[Mapbender-commits] r1335 - trunk/mapbender/http/javascripts
svn_mapbender at osgeo.org
svn_mapbender at osgeo.org
Tue May 22 09:44:57 EDT 2007
Author: uli
Date: 2007-05-22 09:44:57 -0400 (Tue, 22 May 2007)
New Revision: 1335
Added:
trunk/mapbender/http/javascripts/mod_dynamicOverview.php
Log:
first check in
Added: trunk/mapbender/http/javascripts/mod_dynamicOverview.php
===================================================================
--- trunk/mapbender/http/javascripts/mod_dynamicOverview.php (rev 0)
+++ trunk/mapbender/http/javascripts/mod_dynamicOverview.php 2007-05-22 13:44:57 UTC (rev 1335)
@@ -0,0 +1,193 @@
+<?php
+# $Id$
+# http://www.mapbender.org/index.php/Owsproxy
+# Module maintainer Uli
+# Copyright (C) 2002 CCGIS
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+require_once(dirname(__FILE__)."/../../conf/mapbender.conf");
+$e_id_css = 'dynamicOverview';
+$gui_id = $_REQUEST["gui_id"];
+include '../include/dyn_js.php';
+
+$con = db_connect($DBSERVER,$OWNER,$PW);
+db_select_db(DB,$con);
+$sql = "SELECT e_src, e_target FROM gui_element WHERE e_id = 'dynamicOverview' AND fkey_gui_id = $1 ";
+$v = array($gui_id);
+$t = array('s');
+$res = db_prep_query($sql, $v, $t);$cnt = 0;
+while($row = db_fetch_array($res)){
+ $e_target = $row["e_target"];
+ $cnt++;
+}
+if($cnt > 1){ echo "alert('dynamicOverview: ID not unique!');";}
+echo "var mod_dynamicOverview_target = '".$e_target."';";
+
+?>
+/*
+* 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<wms.gui_epsg.length; i++){
+ if(srs == wms.gui_epsg[i]){
+ var re = wms.gui_minx[i] +","+ wms.gui_miny[i] +","+ wms.gui_maxx[i] +","+ wms.gui_maxy[i];
+// window.console.log(re);
+ }
+ }
+ return re;
+}
Property changes on: trunk/mapbender/http/javascripts/mod_dynamicOverview.php
___________________________________________________________________
Name: svn:keywords
+ HeadURL Id LastChangedBy LastChangedDate LastChangedRevision
More information about the Mapbender_commits
mailing list