/* * element_var: mod_dynamicOverview_zoomFactor (proportion between main- and overview-map) * element_var: mod_dynamicOverview_startExtent (startextent of the main mapframe, minx,miny,maxx,maxy commaseparated) * element_var: mod_dynamicOverview_wmsIndex (wms by index to calculate the maxExtent) * element_var: mod_dynamicOverview_useMaxExtent (consider the maxExtent for the wms in the given srs) */ try{ if (mod_dynamicOverview_startExtent){} } catch(e){ mod_dynamicOverview_startExtent = false; } try{ if (mod_dynamicOverview_wmsIndex){ mod_dynamicOverview_wmsIndex = parseInt(mod_dynamicOverview_wmsIndex);} } catch(e){ mod_dynamicOverview_wmsIndex = 0; } try{ if (mod_dynamicOverview_useMaxExtent){} } catch(e){ mod_dynamicOverview_useMaxExtent = false; } var mod_dynamicOverviewCount = 0; var mod_dynamicOverviewSwitch = false; mb_registerPreFunctions("mod_dynamicOverviewCalculateExtent(frameName)"); mb_registerSubFunctions("mod_dynamicOverviewSetVisibility(frameName)"); function mod_dynamicOverviewCalculateExtent(frameName){ var arrayTargets = mod_dynamicOverview_target.split(","); var disty = false; var distx = false; //set extent for the main mapframe from configuration param element_var if(mod_dynamicOverview_startExtent && mod_dynamicOverviewCount == 0){ mod_dynamicOverviewCount++; var arrayCoords = mod_dynamicOverview_startExtent.split(","); var minx = parseFloat(arrayCoords[0]); var miny = parseFloat(arrayCoords[1]); var maxx = parseFloat(arrayCoords[2]); var maxy = parseFloat(arrayCoords[3]); mb_calculateExtent(arrayTargets[0],minx,miny,maxx,maxy); } // read params from main-mapframe if(frameName == arrayTargets[0]){ var ind = getMapObjIndexByName(frameName); // get center in coords: var coords = mb_mapObj[ind].extent.split(","); var minx = parseFloat(coords[0]); var miny = parseFloat(coords[1]); var maxx = parseFloat(coords[2]); var maxy = parseFloat(coords[3]); distx = maxx - minx; disty = maxy - miny; var centerx = minx + distx/2; var centery = miny + disty/2; if(mod_dynamicOverview_zoomFactor){ mod_dynamicOverview_zoomFactor = parseFloat(mod_dynamicOverview_zoomFactor); minx = centerx - ((distx/2)*mod_dynamicOverview_zoomFactor); miny = centery - ((disty/2)*mod_dynamicOverview_zoomFactor); maxx = centerx + ((distx/2)*mod_dynamicOverview_zoomFactor); maxy = centery + ((disty/2)*mod_dynamicOverview_zoomFactor); distx = maxx - minx; disty = maxy - miny; } // check and set maxExtent for orverview if(mod_dynamicOverview_useMaxExtent){ if(mod_dynamicOverview_useMaxExtent){ var maxExtent = mod_dynamicOverview_useMaxExtent; } else{ var maxExtent = mod_dynamicOverviewGetMaxExtent(wms[mod_dynamicOverview_wmsIndex], wms[0].gui_wms_epsg); } if(maxExtent){ maxExtent = maxExtent.split(","); var maxMinx = parseFloat(maxExtent[0]); var maxMiny = parseFloat(maxExtent[1]); var maxMaxx = parseFloat(maxExtent[2]); var maxMaxy = parseFloat(maxExtent[3]); var maxDistx = maxMaxx - maxMinx; var maxDisty = maxMaxy - maxMiny; if(distx && disty && (distx > maxDistx || disty > maxDisty)){ minx = maxMinx; miny = maxMiny; maxx = maxMaxx; maxy = maxMaxy; } } } //check and set minExtent for overview var newMinExt = mod_dynamicOverviewCheckDiagonal(arrayTargets[1], minx,miny, maxx, maxy); if(newMinExt){ // console.log("newMin: "+newMinExt); var minCoords = newMinExt.split(","); minx = parseFloat(minCoords[0]); miny = parseFloat(minCoords[1]); maxx = parseFloat(minCoords[2]); maxy = parseFloat(minCoords[3]); } mb_calculateExtent(arrayTargets[1],minx,miny,maxx,maxy) zoom(arrayTargets[1],true, 1.0); } else if(frameName == arrayTargets[1]){ //switch hidden wms to visible if(wms[mod_dynamicOverview_wmsIndex].gui_wms_visible != 1){ mod_dynamicOverviewSwitch = wms[mod_dynamicOverview_wmsIndex].gui_wms_visible; wms[mod_dynamicOverview_wmsIndex].gui_wms_visible = 1; } } } function mod_dynamicOverviewCheckDiagonal(frameName, minx,miny, maxx, maxy){ var r = false; var ind = getMapObjIndexByName(frameName); var distx = maxx-minx; var disty = maxy-miny; var centerx = minx + distx/2; var centery = miny + distx/2; var xPerPix = distx/mb_mapObj[ind].width; var yPerPix = disty/mb_mapObj[ind].height; var d = Math.sqrt(Math.pow(xPerPix,2)+Math.pow(yPerPix,2)); if(mod_dynamicOverview_minScale && mod_dynamicOverview_minScale > d){ var newDistx = Math.sqrt(Math.pow((mod_dynamicOverview_minScale),2)/2)*mb_mapObj[ind].width; // console.log(newDistx); minx = centerx - newDistx/2; maxx = centerx + newDistx/2; miny = centery - newDistx/2; maxy = centery + newDistx/2; r = minx + ","+ miny + "," + maxx + "," + maxy; } return r; } function mod_dynamicOverviewSetVisibility(frameName){ var arrayTargets = mod_dynamicOverview_target.split(","); if(mod_dynamicOverviewSwitch && frameName == arrayTargets[1]){ wms[mod_dynamicOverview_wmsIndex].gui_wms_visible = mod_dynamicOverviewSwitch; } } function mod_dynamicOverviewGetMaxExtent(wms, srs){ var re = false; for(var i=0; i