[fusion-commits] r1967 - trunk/layers/MapServer/php
svn_fusion at osgeo.org
svn_fusion at osgeo.org
Tue Nov 10 14:38:53 EST 2009
Author: tnolte
Date: 2009-11-10 14:38:52 -0500 (Tue, 10 Nov 2009)
New Revision: 1967
Modified:
trunk/layers/MapServer/php/LoadMap.php
Log:
re $283: now uses CLASS TITLE if defined/available otherwise fall back on the CLASS NAME
Modified: trunk/layers/MapServer/php/LoadMap.php
===================================================================
--- trunk/layers/MapServer/php/LoadMap.php 2009-11-09 03:15:36 UTC (rev 1966)
+++ trunk/layers/MapServer/php/LoadMap.php 2009-11-10 19:38:52 UTC (rev 1967)
@@ -1,419 +1,420 @@
-<?php
-/**
- * LoadMap
- *
- * $Id$
- *
- * Copyright (c) 2007, DM Solutions Group Inc.
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-/*****************************************************************************
- * Purpose: Load a mapfile into the session and return information about the
- * map to the client
- *****************************************************************************/
-
-/* Common starts the session */
-include(dirname(__FILE__).'/../../../common/php/Utilities.php');
-include(dirname(__FILE__).'/Common.php');
-include(dirname(__FILE__).'/Utilities.php');
-
-/* if scales are not set, these become the default values */
-define('MIN_SCALE', 1);
-define('MAX_SCALE', 1000000000);
-
-/* could potentially make this optional */
-$moveToSession = true;
-
-/**
- TODO make it possible to specify only a relative path
- in the WebLayout and have this code know where to
- look for it on the server somehow
- */
-
-/* only do something if a mapfile was requested */
-if (isset($_REQUEST['mapfile'])) {
-
- /* look for mapFileRoot specified in config.json and test to see if the map path in appdef is realitive to it.*/
- $configObj = $_SESSION['fusionConfig'];
- $szFusionRoot = dirname(__FILE__).'/../../../'; // TODO : not a very elegant way of doing this
- $szDblSeparator = DIRECTORY_SEPARATOR.DIRECTORY_SEPARATOR;
-
- $szMapFromFusionRoot = str_replace($szDblSeparator,DIRECTORY_SEPARATOR,$szFusionRoot.DIRECTORY_SEPARATOR.$_REQUEST['mapfile']);
- $szMapFileRoot = str_replace($szDblSeparator,DIRECTORY_SEPARATOR,$configObj->mapserver->mapFileRoot.DIRECTORY_SEPARATOR.$_REQUEST['mapfile']);
-
- if( file_exists($szMapFileRoot) ) {
- /* use the realitive path specified in config.json */
- $szMapFile = $szMapFileRoot;
- }
- else
- {
- if( file_exists($szMapFromFusionRoot) ) {
- /* use the realitive path from fusion install root */
- $szMapFile = $szMapFromFusionRoot;
- }
- else
- {
- /* use absolute path from appdef */
- $szMapFile = $_REQUEST['mapfile'];
- }
- }
-
- $oMap = ms_newMapObj($szMapFile);
-
- /* optionally move the mapfile to the session */
- if ($moveToSession) {
- //path to map file in the session is used by the client
- $mapId = getSessionSavePath().($oMap->name).".map";
- //modify various paths if necessary
- $pathToMap = dirname($szMapFile);
- $cwd = getcwd();
- chdir($pathToMap);
- $shapePath = $oMap->shapepath;
- $oMap->set('shapepath', realpath($shapePath));
- $symbolSet = $oMap->symbolsetfilename;
- if ($symbolSet != '') {
- $oMap->setSymbolSet(realpath($symbolSet));
- }
- $fontSet = $oMap->fontsetfilename;
- if ($fontSet != '') {
- $oMap->setFontSet(realpath($fontSet));
- }
- /* need to modify all image symbols reference in the map file
- eg STYLE
- SYMBOL "../etc/markers/target-7.gif" : this is relative to the map file
- */
-
- for ($i=0; $i<$oMap->numlayers; $i++)
- {
- $oLayer = &$oMap->GetLayer($i);
- /* check layername for invalid URI characters and replace */
- $oLayer->set("name",replaceInvalidLayerName($oLayer->name));
-
- for ($j=0; $j<$oLayer->numclasses; $j++)
- {
- $oClass = $oLayer->GetClass($j);
- /* if keyimage is defined, change the path*/
- if ($oClass->keyimage && strlen($oClass->keyimage) > 0)
- {
- $oClass->set("keyimage", realpath($oClass->keyimage));
- }
- for ($k=0; $k<$oClass->numstyles; $k++)
- {
- $oStyle = $oClass->getStyle($k);
- if ($oStyle->symbolname != "")
- {
- if (file_exists(realpath($oStyle->symbolname)))
- {
- $oStyle->set("symbolname", realpath($oStyle->symbolname));
- }
- }
- }
- }
- }
- $oMap->save($mapId);
- chdir($cwd);
- } else {
- $mapId = $_REQUEST['mapfile'];
- }
-} elseif (isset($_SESSION['maps']) && isset($_SESSION['maps'][$mapName])) {
- $oMap = ms_newMapObj($_SESSION['maps'][$mapName]);
- $mapId = getSessionSavePath().($oMap->name).".map";
-}
-
-$mapObj = NULL;
-if ($oMap) {
- header('Content-type: application/json');
- header('X-JSON: true');
- $mapObj->sessionId = $sessionID;
- $mapObj->mapId = $mapId;
-
- $mapObj->metadata = NULL;
- if (isset($_REQUEST['map_metadata'])) {
- $mapMetadataKeys = explode(',',$_REQUEST['map_metadata']);
- foreach($mapMetadataKeys as $key) {
- $mapObj->metadata->$key = $oMap->getMetadata($key);
- }
- }
-
- $mapObj->projString = $oMap->getProjection();
- $mapObj->metersPerUnit = GetMetersPerUnit($oMap->units);
-
- $mapObj->dpi = $oMap->resolution;
- $mapObj->imagetype = $oMap->imagetype;
- $mapObj->mapName = $oMap->name;
- if (!isset($_SESSION['maps'])) {
- $_SESSION['maps'] = array();
- }
- if (!isset($_SESSION['maps'][$mapObj->mapName])) {
- $_SESSION['maps'][$mapObj->mapName] = $mapId;
- }
- $mapObj->extent = array( $oMap->extent->minx, $oMap->extent->miny,
- $oMap->extent->maxx, $oMap->extent->maxy );
- $minScale = $oMap->web->minscale == -1 ? MIN_SCALE : $oMap->web->minscale;
- $maxScale = $oMap->web->maxscale == -1 ? MAX_SCALE : $oMap->web->maxscale;
- $title = $oMap->getmetadata('legend_title');
- $mapObj->mapTitle = $title == "" ? $mapObj->mapName : $title;
- //layers
- $mapObj->layers = array();
- for ($i=0;$i<$oMap->numlayers;$i++)
- {
- $layer=$oMap->getLayer($i);
- $layerObj = NULL;
-
- /* Status Default - If a layer is status Default trac it in layerObj */
- if($layer->status == MS_DEFAULT)
- $layerObj->statusdefault = true;
- else
- $layerObj->statusdefault = false;
-
- /* rename layes names with invalid characters */
- $layer->set("name",replaceInvalidLayerName($layer->name));
-
- $layerObj->metadata = NULL;
- if (isset($_REQUEST['layer_metadata'])) {
- $layerMetadataKeys = explode(',',$_REQUEST['layer_metadata']);
- foreach($layerMetadataKeys as $key) {
- $layerObj->metadata->$key = $layer->getMetadata($key);
- }
- }
-
- //$extent = $layer->getExtent();
- $layerObj->extent = NULL;
- $layerObj->extent->minx = NULL;
- $layerObj->extent->maxx = NULL;
- $layerObj->extent->miny = NULL;
- $layerObj->extent->maxy = NULL;
-
- // only proceed if extent is valid
- if( isset($GLOBALS["extent"]) )
- {
- $layerObj->extent->minx = $extent->minx;
- $layerObj->extent->maxx = $extent->maxx;
- $layerObj->extent->miny = $extent->miny;
- $layerObj->extent->maxy = $extent->maxy;
- }
-
- $layerObj->propertyMappings = '';
- $layerObj->uniqueId = $i;
- $layerObj->layerName = $layer->name;
- switch($layer->type) {
- case MS_LAYER_POINT:
- $type = 0;
- break;
- case MS_LAYER_LINE:
- $type = 1;
- break;
- case MS_LAYER_POLYGON:
- $type = 2;
- break;
- case MS_LAYER_RASTER:
- $type = 4;
- break;
- case MS_LAYER_ANNOTATION:
- $type = 8;
- break;
- default:
- $type = 0;
- }
- $layerObj->layerTypes = array($type);
-
- $displayInLegend = strtolower($layer->getMetaData('displayInLegend'));
- $layerObj->displayInLegend = $displayInLegend == 'false' ? false : true;
-
- $expandInLegend = strtolower($layer->getMetaData('expandInLegend'));
- $layerObj->expandInLegend = $expandInLegend == 'false' ? false : true;
- $layerObj->resourceId = $layer->name;
- $layerObj->parentGroup = $layer->group;
-
- $legendLabel = $layer->getMetaData('legendLabel');
- if ($legendLabel == '') {
- $legendLabel = $layer->name;
- }
- $layerObj->legendLabel = $legendLabel;
-
- $selectable = strtolower($layer->getMetaData('selectable'));
- $layerObj->selectable = $selectable == 'true' ? true : false;
-
- $layerObj->visible = ($layer->status == MS_ON || $layer->status == MS_DEFAULT);
- $layerObj->actuallyVisible = true;
-
- $editable = strtolower($layer->getMetaData('editable'));
- $layerObj->editable = $editable == 'true' ? true : false;
-
- /* process the classes. The legend expects things
- * organized by scale range so we have to first
- * find all the scale breaks, then create ranges
- * for each scale break pair, then slot the classes
- * into the scale ranges that they apply to.
- */
-
- $aScaleRanges = array();
- //create a default scale range for the layer as a whole
- $layerMin = $layer->minscale == -1 ? $minScale : $layer->minscale;
- $layerMax = $layer->maxscale == -1 ? $maxScale : $layer->maxscale;
-
- /* check to see that the layer has a vaild scale range
- * inside the defined map's main min max scale ranges
- * set them to the maps scale ranges if they exceede
- */
- if($layer->minscale != -1 && $layerMin < $minScale)
- $layerMin = $minScale;
-
- if($layer->maxscale != -1 && $layerMax > $maxScale)
- $layerMax = $maxScale;
-
- //find all the unique scale breaks in this layer
- $aScaleBreaks = array($layerMin, $layerMax);
- for ($j=0; $j<$layer->numclasses; $j++) {
- $oClass = $layer->getClass($j);
- $classMin = $oClass->minscale == -1 ? $layerMin : max($oClass->minscale, $layerMin);
- $classMax = $oClass->maxscale == -1 ? $layerMax : min($oClass->maxscale, $layerMax);
- if (!in_array($classMin, $aScaleBreaks)) {
- array_push($aScaleBreaks, $classMin);
- }
- if (!in_array($classMax, $aScaleBreaks)) {
- array_push($aScaleBreaks, $classMax);
- }
- }
- //sort them
- sort($aScaleBreaks);
-
- //create scale ranges for each pair of breaks
- for ($j=0; $j<count($aScaleBreaks)-1; $j++) {
- $scaleRange = NULL;
- $scaleRange->minScale = $aScaleBreaks[$j];
- $scaleRange->maxScale = $aScaleBreaks[$j+1];
- $scaleRange->styles = array();
- array_push($aScaleRanges, $scaleRange);
- }
-
- //create classes and slot them into the scale breaks
- for ($j=0; $j<$layer->numclasses; $j++) {
- $oClass = $layer->getClass($j);
- $classObj = NULL;
- $classObj->legendLabel = $oClass->name;
- $classObj->filter = $oClass->getExpression();
- $classMin = $oClass->minscale == -1 ? $layerMin : max($oClass->minscale, $layerMin);
- $classMax = $oClass->maxscale == -1 ? $layerMax : min($oClass->maxscale, $layerMax);
- $classObj->minScale = $classMin;
- $classObj->maxScale = $classMax;
- $classObj->index = $j;
- for ($k=0; $k<count($aScaleRanges); $k++) {
- if ($classMin < $aScaleRanges[$k]->maxScale &&
- $classMax > $aScaleRanges[$k]->minScale) {
- array_push($aScaleRanges[$k]->styles, $classObj);
- }
- }
- }
- //$layerObj->scaleRanges = $aScaleRanges;
- $_SESSION['scale_ranges'][$i] = $aScaleRanges;
- /*get the min/max scale for the layer*/
- $nCount = count($aScaleRanges);
- $layerObj->minScale = $aScaleRanges[0]->minScale;
- $layerObj->maxScale = $aScaleRanges[0]->maxScale;
- for ($j=1; $j<$nCount; $j++)
- {
- $layerObj->minScale = min($layerObj->minScale, $aScaleRanges[$j]->minScale);
- $layerObj->maxScale = max($layerObj->maxScale, $aScaleRanges[$j]->maxScale);
- }
- array_push($mapObj->layers, $layerObj);
- }
- $mapObj->groups = array();
- $aGroups = $oMap->getAllGroupNames();
- foreach($aGroups as $groupName) {
- $aLayerIndexes = $oMap->getLayersIndexByGroup($groupName);
- if (count($aLayerIndexes) > 0) {
- array_push($mapObj->groups, getGroupObject($oMap->getLayer($aLayerIndexes[0])));
- }
- }
- echo var2json($mapObj);
-}
-
-function getGroupObject($layer) {
- $group = NULL;
- $group->groupName = $layer->group;
- $ll = $layer->getMetaData('groupLegendLabel');
- $group->legendLabel = $ll != '' ? $ll : $group->groupName;
- $group->uniqueId = $group->groupName;
- $b = $layer->getMetaData('groupDisplayInLegend');
- $group->displayInLegend = ($b == 'false') ? false : true;
- $b = $layer->getMetaData('groupExpandInLegend');
- $group->expandInLegend = ($b == 'false') ? false : true;
- $group->layerGroupType = '';
- /* parent is always not set for mapserver since we can't have nested groups */
- $group->parentUniqueId = '';
- $group->parent = '';
- $b = $layer->getMetaData('groupVisible');
- $group->visible = ($b == 'false') ? false : true;
- $group->actuallyVisible = $layer->isVisible();
- $group->groupParent = $layer->getMetaData('groupParent');
-
- return $group;
-}
-
-function GetMetersPerUnit($unit)
-{
- if ($unit == MS_INCHES)
- return 0.0254;
- else if ($unit == MS_FEET)
- return 0.3048;
- else if ($unit == MS_MILES)
- return 1609.344;
- else if ($unit == MS_METERS)
- return 1;
- else if ($unit == MS_KILOMETERS)
- return 1000;
- else if ($unit == MS_DD)
- return 111118.7516;
- else if ($unit == MS_PIXELS)
- return 1;
-
-}
-
-function replaceInvalidLayerName($szLayerName){
- /*
- bug http://trac.osgeo.org/fusion/ticket/96 - Invalid characters in layer name (pdeschamps)
-
- Fusion requests the map imavge via the Mapserver CGI to toggle the layer visibility.
- The layer paramerter for the cgi uses spaces as a delimiter for the layer names this creates
- an issue for the mapserver binary to toggle layers that have these reserved URI characters.
- also removing characters that could pose potential issues with json.
- */
- $aInvalidLayerNameCharacters = array();
- $aInvalidLayerNameCharacters[0] ="&";
- $aInvalidLayerNameCharacters[1] =" ";
- $aInvalidLayerNameCharacters[2] ="#";
- $aInvalidLayerNameCharacters[3] ="\\";
- $aInvalidLayerNameCharacters[4] ="=";
- $aInvalidLayerNameCharacters[5] ="/";
- $aInvalidLayerNameCharacters[6] ="'";
-
- $aReplace[0] = "_";
- $aReplace[1] = "_";
- $aReplace[2] = "_";
- $aReplace[3] = "_";
- $aReplace[4] = "_";
- $aReplace[5] = "_";
- $aReplace[6] = "_";
-
- return str_replace($aInvalidLayerNameCharacters,$aReplace,$szLayerName);
-}
-
-?>
+<?php
+/**
+ * LoadMap
+ *
+ * $Id$
+ *
+ * Copyright (c) 2007, DM Solutions Group Inc.
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/*****************************************************************************
+ * Purpose: Load a mapfile into the session and return information about the
+ * map to the client
+ *****************************************************************************/
+
+/* Common starts the session */
+include(dirname(__FILE__).'/../../../common/php/Utilities.php');
+include(dirname(__FILE__).'/Common.php');
+include(dirname(__FILE__).'/Utilities.php');
+
+/* if scales are not set, these become the default values */
+define('MIN_SCALE', 1);
+define('MAX_SCALE', 1000000000);
+
+/* could potentially make this optional */
+$moveToSession = true;
+
+/**
+ TODO make it possible to specify only a relative path
+ in the WebLayout and have this code know where to
+ look for it on the server somehow
+ */
+
+/* only do something if a mapfile was requested */
+if (isset($_REQUEST['mapfile'])) {
+
+ /* look for mapFileRoot specified in config.json and test to see if the map path in appdef is realitive to it.*/
+ $configObj = $_SESSION['fusionConfig'];
+ $szFusionRoot = dirname(__FILE__).'/../../../'; // TODO : not a very elegant way of doing this
+ $szDblSeparator = DIRECTORY_SEPARATOR.DIRECTORY_SEPARATOR;
+
+ $szMapFromFusionRoot = str_replace($szDblSeparator,DIRECTORY_SEPARATOR,$szFusionRoot.DIRECTORY_SEPARATOR.$_REQUEST['mapfile']);
+ $szMapFileRoot = str_replace($szDblSeparator,DIRECTORY_SEPARATOR,$configObj->mapserver->mapFileRoot.DIRECTORY_SEPARATOR.$_REQUEST['mapfile']);
+
+ if( file_exists($szMapFileRoot) ) {
+ /* use the realitive path specified in config.json */
+ $szMapFile = $szMapFileRoot;
+ }
+ else
+ {
+ if( file_exists($szMapFromFusionRoot) ) {
+ /* use the realitive path from fusion install root */
+ $szMapFile = $szMapFromFusionRoot;
+ }
+ else
+ {
+ /* use absolute path from appdef */
+ $szMapFile = $_REQUEST['mapfile'];
+ }
+ }
+
+ $oMap = ms_newMapObj($szMapFile);
+
+ /* optionally move the mapfile to the session */
+ if ($moveToSession) {
+ //path to map file in the session is used by the client
+ $mapId = getSessionSavePath().($oMap->name).".map";
+ //modify various paths if necessary
+ $pathToMap = dirname($szMapFile);
+ $cwd = getcwd();
+ chdir($pathToMap);
+ $shapePath = $oMap->shapepath;
+ $oMap->set('shapepath', realpath($shapePath));
+ $symbolSet = $oMap->symbolsetfilename;
+ if ($symbolSet != '') {
+ $oMap->setSymbolSet(realpath($symbolSet));
+ }
+ $fontSet = $oMap->fontsetfilename;
+ if ($fontSet != '') {
+ $oMap->setFontSet(realpath($fontSet));
+ }
+ /* need to modify all image symbols reference in the map file
+ eg STYLE
+ SYMBOL "../etc/markers/target-7.gif" : this is relative to the map file
+ */
+
+ for ($i=0; $i<$oMap->numlayers; $i++)
+ {
+ $oLayer = &$oMap->GetLayer($i);
+ /* check layername for invalid URI characters and replace */
+ $oLayer->set("name",replaceInvalidLayerName($oLayer->name));
+
+ for ($j=0; $j<$oLayer->numclasses; $j++)
+ {
+ $oClass = $oLayer->GetClass($j);
+ /* if keyimage is defined, change the path*/
+ if ($oClass->keyimage && strlen($oClass->keyimage) > 0)
+ {
+ $oClass->set("keyimage", realpath($oClass->keyimage));
+ }
+ for ($k=0; $k<$oClass->numstyles; $k++)
+ {
+ $oStyle = $oClass->getStyle($k);
+ if ($oStyle->symbolname != "")
+ {
+ if (file_exists(realpath($oStyle->symbolname)))
+ {
+ $oStyle->set("symbolname", realpath($oStyle->symbolname));
+ }
+ }
+ }
+ }
+ }
+ $oMap->save($mapId);
+ chdir($cwd);
+ } else {
+ $mapId = $_REQUEST['mapfile'];
+ }
+} elseif (isset($_SESSION['maps']) && isset($_SESSION['maps'][$mapName])) {
+ $oMap = ms_newMapObj($_SESSION['maps'][$mapName]);
+ $mapId = getSessionSavePath().($oMap->name).".map";
+}
+
+$mapObj = NULL;
+if ($oMap) {
+ header('Content-type: application/json');
+ header('X-JSON: true');
+ $mapObj->sessionId = $sessionID;
+ $mapObj->mapId = $mapId;
+
+ $mapObj->metadata = NULL;
+ if (isset($_REQUEST['map_metadata'])) {
+ $mapMetadataKeys = explode(',',$_REQUEST['map_metadata']);
+ foreach($mapMetadataKeys as $key) {
+ $mapObj->metadata->$key = $oMap->getMetadata($key);
+ }
+ }
+
+ $mapObj->projString = $oMap->getProjection();
+ $mapObj->metersPerUnit = GetMetersPerUnit($oMap->units);
+
+ $mapObj->dpi = $oMap->resolution;
+ $mapObj->imagetype = $oMap->imagetype;
+ $mapObj->mapName = $oMap->name;
+ if (!isset($_SESSION['maps'])) {
+ $_SESSION['maps'] = array();
+ }
+ if (!isset($_SESSION['maps'][$mapObj->mapName])) {
+ $_SESSION['maps'][$mapObj->mapName] = $mapId;
+ }
+ $mapObj->extent = array( $oMap->extent->minx, $oMap->extent->miny,
+ $oMap->extent->maxx, $oMap->extent->maxy );
+ $minScale = $oMap->web->minscale == -1 ? MIN_SCALE : $oMap->web->minscale;
+ $maxScale = $oMap->web->maxscale == -1 ? MAX_SCALE : $oMap->web->maxscale;
+ $title = $oMap->getmetadata('legend_title');
+ $mapObj->mapTitle = $title == "" ? $mapObj->mapName : $title;
+ //layers
+ $mapObj->layers = array();
+ for ($i=0;$i<$oMap->numlayers;$i++)
+ {
+ $layer=$oMap->getLayer($i);
+ $layerObj = NULL;
+
+ /* Status Default - If a layer is status Default trac it in layerObj */
+ if($layer->status == MS_DEFAULT)
+ $layerObj->statusdefault = true;
+ else
+ $layerObj->statusdefault = false;
+
+ /* rename layes names with invalid characters */
+ $layer->set("name",replaceInvalidLayerName($layer->name));
+
+ $layerObj->metadata = NULL;
+ if (isset($_REQUEST['layer_metadata'])) {
+ $layerMetadataKeys = explode(',',$_REQUEST['layer_metadata']);
+ foreach($layerMetadataKeys as $key) {
+ $layerObj->metadata->$key = $layer->getMetadata($key);
+ }
+ }
+
+ //$extent = $layer->getExtent();
+ $layerObj->extent = NULL;
+ $layerObj->extent->minx = NULL;
+ $layerObj->extent->maxx = NULL;
+ $layerObj->extent->miny = NULL;
+ $layerObj->extent->maxy = NULL;
+
+ // only proceed if extent is valid
+ if( isset($GLOBALS["extent"]) )
+ {
+ $layerObj->extent->minx = $extent->minx;
+ $layerObj->extent->maxx = $extent->maxx;
+ $layerObj->extent->miny = $extent->miny;
+ $layerObj->extent->maxy = $extent->maxy;
+ }
+
+ $layerObj->propertyMappings = '';
+ $layerObj->uniqueId = $i;
+ $layerObj->layerName = $layer->name;
+ switch($layer->type) {
+ case MS_LAYER_POINT:
+ $type = 0;
+ break;
+ case MS_LAYER_LINE:
+ $type = 1;
+ break;
+ case MS_LAYER_POLYGON:
+ $type = 2;
+ break;
+ case MS_LAYER_RASTER:
+ $type = 4;
+ break;
+ case MS_LAYER_ANNOTATION:
+ $type = 8;
+ break;
+ default:
+ $type = 0;
+ }
+ $layerObj->layerTypes = array($type);
+
+ $displayInLegend = strtolower($layer->getMetaData('displayInLegend'));
+ $layerObj->displayInLegend = $displayInLegend == 'false' ? false : true;
+
+ $expandInLegend = strtolower($layer->getMetaData('expandInLegend'));
+ $layerObj->expandInLegend = $expandInLegend == 'false' ? false : true;
+ $layerObj->resourceId = $layer->name;
+ $layerObj->parentGroup = $layer->group;
+
+ $legendLabel = $layer->getMetaData('legendLabel');
+ if ($legendLabel == '') {
+ $legendLabel = $layer->name;
+ }
+ $layerObj->legendLabel = $legendLabel;
+
+ $selectable = strtolower($layer->getMetaData('selectable'));
+ $layerObj->selectable = $selectable == 'true' ? true : false;
+
+ $layerObj->visible = ($layer->status == MS_ON || $layer->status == MS_DEFAULT);
+ $layerObj->actuallyVisible = true;
+
+ $editable = strtolower($layer->getMetaData('editable'));
+ $layerObj->editable = $editable == 'true' ? true : false;
+
+ /* process the classes. The legend expects things
+ * organized by scale range so we have to first
+ * find all the scale breaks, then create ranges
+ * for each scale break pair, then slot the classes
+ * into the scale ranges that they apply to.
+ */
+
+ $aScaleRanges = array();
+ //create a default scale range for the layer as a whole
+ $layerMin = $layer->minscale == -1 ? $minScale : $layer->minscale;
+ $layerMax = $layer->maxscale == -1 ? $maxScale : $layer->maxscale;
+
+ /* check to see that the layer has a vaild scale range
+ * inside the defined map's main min max scale ranges
+ * set them to the maps scale ranges if they exceede
+ */
+ if($layer->minscale != -1 && $layerMin < $minScale)
+ $layerMin = $minScale;
+
+ if($layer->maxscale != -1 && $layerMax > $maxScale)
+ $layerMax = $maxScale;
+
+ //find all the unique scale breaks in this layer
+ $aScaleBreaks = array($layerMin, $layerMax);
+ for ($j=0; $j<$layer->numclasses; $j++) {
+ $oClass = $layer->getClass($j);
+ $classMin = $oClass->minscale == -1 ? $layerMin : max($oClass->minscale, $layerMin);
+ $classMax = $oClass->maxscale == -1 ? $layerMax : min($oClass->maxscale, $layerMax);
+ if (!in_array($classMin, $aScaleBreaks)) {
+ array_push($aScaleBreaks, $classMin);
+ }
+ if (!in_array($classMax, $aScaleBreaks)) {
+ array_push($aScaleBreaks, $classMax);
+ }
+ }
+ //sort them
+ sort($aScaleBreaks);
+
+ //create scale ranges for each pair of breaks
+ for ($j=0; $j<count($aScaleBreaks)-1; $j++) {
+ $scaleRange = NULL;
+ $scaleRange->minScale = $aScaleBreaks[$j];
+ $scaleRange->maxScale = $aScaleBreaks[$j+1];
+ $scaleRange->styles = array();
+ array_push($aScaleRanges, $scaleRange);
+ }
+
+ //create classes and slot them into the scale breaks
+ for ($j=0; $j<$layer->numclasses; $j++) {
+ $oClass = $layer->getClass($j);
+ $classObj = NULL;
+ // Use formatted legend label as defined by CLASS->TITLE
+ $classObj->legendLabel = $oClass->title != '' ? $oClass->title : $oClass->name;
+ $classObj->filter = $oClass->getExpression();
+ $classMin = $oClass->minscale == -1 ? $layerMin : max($oClass->minscale, $layerMin);
+ $classMax = $oClass->maxscale == -1 ? $layerMax : min($oClass->maxscale, $layerMax);
+ $classObj->minScale = $classMin;
+ $classObj->maxScale = $classMax;
+ $classObj->index = $j;
+ for ($k=0; $k<count($aScaleRanges); $k++) {
+ if ($classMin < $aScaleRanges[$k]->maxScale &&
+ $classMax > $aScaleRanges[$k]->minScale) {
+ array_push($aScaleRanges[$k]->styles, $classObj);
+ }
+ }
+ }
+ //$layerObj->scaleRanges = $aScaleRanges;
+ $_SESSION['scale_ranges'][$mapName][$layer->name] = $aScaleRanges;
+ /*get the min/max scale for the layer*/
+ $nCount = count($aScaleRanges);
+ $layerObj->minScale = $aScaleRanges[0]->minScale;
+ $layerObj->maxScale = $aScaleRanges[0]->maxScale;
+ for ($j=1; $j<$nCount; $j++)
+ {
+ $layerObj->minScale = min($layerObj->minScale, $aScaleRanges[$j]->minScale);
+ $layerObj->maxScale = max($layerObj->maxScale, $aScaleRanges[$j]->maxScale);
+ }
+ array_push($mapObj->layers, $layerObj);
+ }
+ $mapObj->groups = array();
+ $aGroups = $oMap->getAllGroupNames();
+ foreach($aGroups as $groupName) {
+ $aLayerIndexes = $oMap->getLayersIndexByGroup($groupName);
+ if (count($aLayerIndexes) > 0) {
+ array_push($mapObj->groups, getGroupObject($oMap->getLayer($aLayerIndexes[0])));
+ }
+ }
+ echo var2json($mapObj);
+}
+
+function getGroupObject($layer) {
+ $group = NULL;
+ $group->groupName = $layer->group;
+ $ll = $layer->getMetaData('groupLegendLabel');
+ $group->legendLabel = $ll != '' ? $ll : $group->groupName;
+ $group->uniqueId = $group->groupName;
+ $b = $layer->getMetaData('groupDisplayInLegend');
+ $group->displayInLegend = ($b == 'false') ? false : true;
+ $b = $layer->getMetaData('groupExpandInLegend');
+ $group->expandInLegend = ($b == 'false') ? false : true;
+ $group->layerGroupType = '';
+ /* parent is always not set for mapserver since we can't have nested groups */
+ $group->parentUniqueId = '';
+ $group->parent = '';
+ $b = $layer->getMetaData('groupVisible');
+ $group->visible = ($b == 'false') ? false : true;
+ $group->actuallyVisible = $layer->isVisible();
+ $group->groupParent = $layer->getMetaData('groupParent');
+
+ return $group;
+}
+
+function GetMetersPerUnit($unit)
+{
+ if ($unit == MS_INCHES)
+ return 0.0254;
+ else if ($unit == MS_FEET)
+ return 0.3048;
+ else if ($unit == MS_MILES)
+ return 1609.344;
+ else if ($unit == MS_METERS)
+ return 1;
+ else if ($unit == MS_KILOMETERS)
+ return 1000;
+ else if ($unit == MS_DD)
+ return 111118.7516;
+ else if ($unit == MS_PIXELS)
+ return 1;
+
+}
+
+function replaceInvalidLayerName($szLayerName){
+ /*
+ bug http://trac.osgeo.org/fusion/ticket/96 - Invalid characters in layer name (pdeschamps)
+
+ Fusion requests the map imavge via the Mapserver CGI to toggle the layer visibility.
+ The layer paramerter for the cgi uses spaces as a delimiter for the layer names this creates
+ an issue for the mapserver binary to toggle layers that have these reserved URI characters.
+ also removing characters that could pose potential issues with json.
+ */
+ $aInvalidLayerNameCharacters = array();
+ $aInvalidLayerNameCharacters[0] ="&";
+ $aInvalidLayerNameCharacters[1] =" ";
+ $aInvalidLayerNameCharacters[2] ="#";
+ $aInvalidLayerNameCharacters[3] ="\\";
+ $aInvalidLayerNameCharacters[4] ="=";
+ $aInvalidLayerNameCharacters[5] ="/";
+ $aInvalidLayerNameCharacters[6] ="'";
+
+ $aReplace[0] = "_";
+ $aReplace[1] = "_";
+ $aReplace[2] = "_";
+ $aReplace[3] = "_";
+ $aReplace[4] = "_";
+ $aReplace[5] = "_";
+ $aReplace[6] = "_";
+
+ return str_replace($aInvalidLayerNameCharacters,$aReplace,$szLayerName);
+}
+
+?>
Property changes on: trunk/layers/MapServer/php/LoadMap.php
___________________________________________________________________
Deleted: svn:eol-style
- native
More information about the fusion-commits
mailing list