/* ************************************************* FILENAME: agsMap.js.php AUTHOR: André von Wartburg CREATED: 28. 07. 2010 COPYRIGHT: rawi-geo. Alle Rechte vorbehalten. DESCRIPTION: map functionality ************************************************** */ var paramFocus = ""; var paramParcel = ""; var paramBasemap = ""; var paramBfs = ""; var paramAmt = ""; var currentBaseMap; // recenter map function recenterMap(evt){ map.centerAt(evt.mapPoint); if(internalDebug) console.log("recenter! " + evt.mapPoint); } // handle resize of browser function resizeMap(){ clearTimeout(resizeTimer); resizeTimer = setTimeout(function(){ map.resize(); map.reposition(); }, 500); } // display coordinates in footer function showCoordinates(evt) { var mp = evt.mapPoint; // get mapPoint from event dojo.byId("map-coord-x").value = mp.x.toFixed(0); dojo.byId("map-coord-y").value = mp.y.toFixed(0); } // zoom to new level, keep extent function mapLevel(scale) { tLOD = 0; chkScale = 999999; lodCorrection = 0; if (lodsArr[0].scale != 350000) { lodCorrection = 13 - lodsArr.length; } // correct shortened lods dojo.forEach (lodsArr, function(LOD) { diffScale = Math.abs(scale - LOD.scale); if ((diffScale < chkScale) || (diffScale == 0)) { chkScale = diffScale; tLOD = LOD.level - lodCorrection;} console.log("target scale: " + scale + ", check scale(LOD): " + LOD.scale + " (" + LOD.level + "), diff: " + diffScale + ", new scale(LOD): "+ chkScale + "(" + tLOD + ")"); }); map.setLevel(tLOD); } // zoom to coords at given extent function mapFocus(xcoor, ycoor, scale) { // if (internalDebug) { console.log("INFO: mapFocus (" + xcoor + ", " + ycoor + ", " + scale + ")"); } if ((isNaN(xcoor) || isNaN(ycoor)) || ( ((xcoor < 629000) || (xcoor > 682000)) || ((ycoor < 180000) || (ycoor > 238000)) )) { var d = new dijit.Dialog({title: "Hinweis: Ungültige Koordinaten"}); d.setContent( "Bitte geben sie ganzzahlige Werte zwischen
629000 und 682000 bzw. 180000 und 238000 ein."); d.show(); } else { var fPoint = new esri.geometry.Point(parseFloat(xcoor), parseFloat(ycoor), new esri.SpatialReference({ wkid: 21781 })); // look up closest available LOD tLOD = 0; chkScale = 999999; lodCorrection = 0; if (lodsArr[0].scale != 350000) { lodCorrection = 13 - lodsArr.length; } // correct shortened lods dojo.forEach (lodsArr, function(LOD) { diffScale = Math.abs(scale - LOD.scale); //console.log(scale, LOD.scale, diffScale, chkScale, LOD.level, lodsArr.length); if ((diffScale < chkScale) || (diffScale == 0)) { chkScale = diffScale; tLOD = LOD.level - lodCorrection;} }); map.centerAndZoom(fPoint, tLOD); } } // set start extent by param or defaults function setStartExtent(dx, dy, ds){ if ((paramFocus != "") && (paramParcel == "")) { pFocusParts = paramFocus.split(":"); if (pFocusParts.length == 3) { chkScale = 999999; tScale = parseFloat(pFocusParts[2]); // validate entered scale if((isNaN(tScale)) || (tScale > 350000) || (tScale < 250)){ var d = new dijit.Dialog({title: "Hinweis: Ungültiger Massstab"}); d.setContent( "Bitte geben einen Massstab zwischen 1:250 und 1:350000 an."); d.show(); tScale = 350000; } // look up closest available scale dojo.forEach (lodsArr, function(LOD) { diffScale = Math.abs(tScale - LOD.scale); if ((diffScale < chkScale) || (diffScale == 0)) { chkScale = diffScale; goScale = LOD.scale;} }); mapFocus(pFocusParts[0], pFocusParts[1], goScale); } else { mapFocus(dx, dy, ds); } } // default startup extent and scale else { mapFocus(dx, dy, ds);} } // set base map function setBaseMap(defaultStartMap) { if (paramBasemap != "") { switch (paramBasemap) { case "B": currentBaseMap = "basis_baspla"; break; case "G": currentBaseMap = "basis_gbplan"; break; case "K": currentBaseMap = "basis_raster"; break; case "L": currentBaseMap = "basis_ortho"; break; default: currentBaseMap = "basis_gbplan"; } } else { currentBaseMap = defaultStartMap; } toggleBaseLayer(currentBaseMap, null); } // toggle base maps (row of buttons) function toggleBaseLayer(layerToShow, theMap){ if (theMap == null) { theMap = map } // only include actual base layers dojo.forEach(theMap.layerIds, function(baseLayerId){ // only include actual base layers baseChk = baseLayerId.substr(0, 6); if (baseChk == "basis_") { var layer = theMap.getLayer(baseLayerId); if (baseLayerId == layerToShow) { layer.show(); currentBaseMap = baseLayerId; dojo.style('btnBase_' + baseLayerId,{'color':'#000', 'font':'bold 12px arial, helvetica, sans-serif'}); } else { layer.hide(); dojo.style('btnBase_' + baseLayerId,{'color':'#666', 'font':'normal 12px arial, helvetica, sans-serif'}); } } }); } // call external map app function changeMap(baseUrl) { // build FOCUS param xc = map.extent.xmin + (( map.extent.xmax - map.extent.xmin) / 2); yc = map.extent.ymin + (( map.extent.ymax - map.extent.ymin) / 2); lvl = map.getLevel(); foc = xc.toFixed(0) + ":" + yc.toFixed(0) + ":" + lodsArr[lvl].scale; //console.log("changeMap: " + foc); // build BASEMAP param switch(currentBaseMap) { case "basis_gbplan": bm = "G"; break; case "basis_baspla": bm = "B"; break; case "basis_raster": bm = "K"; break; case "basis_ortho": bm = "L"; break; default: bm = "G"; } // concat n' go //thisHost = document.location.host; conc = "http://www.geo.lu.ch" + baseUrl + "?FOCUS=" + foc + "&BASEMAP=" + bm; window.open(conc); } function clearMapSelection() { map.graphics.clear(); } // open measure floating panel, start measuring function showMapMeasure() { dojo.byId('mapMeasure').style.display='block'; dojo.byId('idResults').style.display='none'; map.graphics.clear(); dojo.disconnect(idConnect); // deactivate id dojo.byId("measureResult").innerHTML = "0.0 m"; document.getElementById("measureRadioBtn1").checked = true; startMeasureLength(); } // hide measure floating panel, stop measuring function hideMapMeasure() { dojo.byId('mapMeasure').style.display='none'; map.graphics.clear(); tb.deactivate(esri.toolbars.Draw.POLYLINE); idConnect = dojo.connect(map, "onClick", doIdentify); // activate id connect } // activate measure function startMeasureLength() { //dojo.disconnect(idConnect); // deactivate id map.graphics.clear(); dojo.byId("measureResult").innerHTML = "0.0 m"; tb.activate(esri.toolbars.Draw.POLYLINE); } function startMeasureArea() { //dojo.disconnect(idConnect); // deactivate id map.graphics.clear(); dojo.byId("measureResult").innerHTML = "0.0 m²"; tb.deactivate(esri.toolbars.Draw.POLYLINE); tb.activate(esri.toolbars.Draw.POLYGON); } function outputMeasureDistance(result) { dist = (result.lengths[0]).toFixed(1); if (dist < 1000) { dojo.byId("measureResult").innerHTML = dist + " m"; } else { dojo.byId("measureResult").innerHTML = (dist / 1000).toFixed(2) + " km"; } } function outputAreaAndLength(result) { console.log(dojo.toJson(result)); fNumTMP = result.areas[0]; fNum = fNumTMP.toFixed(0); // reduce to whole squaremetres fHe = Math.floor(fNum / 10000); // calc hectares fAr = Math.floor((fNum - (fHe * 10000))/100); // calc ares fM2 = fNum - (fHe * 10000) - (fAr * 100); // calc squaremeters if (fHe == 0){ if (fAr == 0){ fContent = fM2 + " m²"; } else { fContent = fAr + "a " + fM2 + " m²"; } } else { fContent = fHe + "ha " + fAr + "a " + fM2 + " m²"; } dojo.byId("measureResult").innerHTML = fContent; } // convert graphics layer to JSON /*function parseGraphicsToJSON() { graphArray = map.graphics.graphics; // init JSON geometry array var jsonGeometryArray = []; dojo.forEach (graphArray, function(graph) { // get geometry, convert to JSON var jsonGraphGeometry = graph.geometry.toJson(); // populate json geometry Array jsonGeometryArray.push(jsonGraphGeometry); }); var h = dojo.toJson(jsonGeometryArray); console.log("jsonGeometryArray: ", h); }*/