Open($resourceService, $mapName); //Get layer collection as xml header('content-type: text/xml'); $layers=$map->GetLayers(); echo ""; echo ""; //create a mapping service for the legend images $mappingService = $siteConnection->CreateService(MgServiceType::MappingService); //TODO: make the temp location configurable $tempImgPath = "c:/Program Files/Apache Group/Apache2/htdocs/ms_tmp/"; for($i=0;$i<$layers->GetCount();$i++) { $layer=$layers->GetItem($i); $layerDefinition = $layer->GetLayerDefinition(); echo ''; echo ''.$layer->GetObjectId().''; echo ''.htmlentities($layer->GetName()).''; echo ''.$layer->GetLayerType().''; echo ''.BooleanToString($layer->GetDisplayInLegend()).''; echo ''.BooleanToString($layer->GetExpandInLegend()).''; echo ''.$layerDefinition->ToString().''; if ($layer->GetGroup()) { echo ''.$layer->GetGroup()->GetObjectId().''; } echo ''.htmlentities($layer->GetLegendLabel()).''; echo ''.BooleanToString($layer->GetSelectable()).''; echo ''.BooleanToString($layer->GetVisible()).''; echo ''.BooleanToString($layer->isVisible()).''; buildScaleRanges($layer); echo ''; } echo ""; //Get layer groups as xml $groups = $map->GetLayerGroups(); echo ""; for($i=0;$i<$groups->GetCount();$i++) { $group=$groups->GetItem($i); $layerDefinition = $layer->GetLayerDefinition(); echo ''; echo ''.htmlentities($group->GetName()).''; echo ''.htmlentities($group->GetLegendLabel()).''; echo ''.$group->GetObjectId().''; echo ''.BooleanToString($group->GetDisplayInLegend()).''; echo ''.BooleanToString($group->GetExpandInLegend()).''; echo ''.$group->GetLayerGroupType().''; $parent = $group->GetGroup(); if ($parent){ echo ''.$parent->GetObjectId().''; } echo ''.BooleanToString($group->GetVisible()).''; echo ''.BooleanToString($group->isVisible()).''; echo ''; } echo""; echo ""; function buildScaleRanges($layer) { global $resourceService; $resID = $layer->GetLayerDefinition(); $layerContent = $resourceService->GetResourceContent($resID); $xmldoc = DOMDocument::loadXML(ByteReaderToString($layerContent)); $type = 0; $scaleRanges = $xmldoc->getElementsByTagName('VectorScaleRange'); if($scaleRanges->length == 0) { $scaleRanges = $xmldoc->getElementsByTagName('GridScaleRange'); if($scaleRanges->length == 0) { $scaleRanges = $xmldoc->getElementsByTagName('DrawingLayerDefinition'); if($scaleRanges->length == 0) return; $type = 2; } else $type = 1; } $typeStyles = array("PointTypeStyle", "LineTypeStyle", "AreaTypeStyle"); $ruleNames = array("PointRule", "LineRule", "AreaRule", ); $output = ''; for($sc = 0; $sc < $scaleRanges->length; $sc++) { $scaleRange = $scaleRanges->item($sc); $minElt = $scaleRange->getElementsByTagName('MinScale'); $maxElt = $scaleRange->getElementsByTagName('MaxScale'); $minScale = "0"; $maxScale = "1000000000000.0"; // as MDF's VectorScaleRange::MAX_MAP_SCALE if($minElt->length > 0) $minScale = $minElt->item(0)->nodeValue; if($maxElt->length > 0) $maxScale = $maxElt->item(0)->nodeValue; if($type != 0) break; $output .= ''; $output .= ''.$minScale.''; $output .= ''.$maxScale.''; $styleIndex = 0; for($ts=0, $count = count($typeStyles); $ts < $count; $ts++) { $typeStyle = $scaleRange->getElementsByTagName($typeStyles[$ts]); $catIndex = 0; for($st = 0; $st < $typeStyle->length; $st++) { $rules = $typeStyle->item(0)->getElementsByTagName($ruleNames[$ts]); for($r = 0; $r < $rules->length; $r++) { $rule = $rules->item($r); $label = $rule->getElementsByTagName("LegendLabel"); $filter = $rule->getElementsByTagName("Filter"); $labelText = $label->length==1? $label->item(0)->nodeValue: ""; $filterText = $filter->length==1? $filter->item(0)->nodeValue: ""; $output .= ''; $output .= ''; $output .= ''.htmlentities(trim($filterText)).''; $output .= ''.($ts+1).''; $output .= ''.($catIndex++).''; $output .= ''; } } } $output .= ''; } echo $output; } function ByteReaderToString($byteReader) { $buffer = ''; do { $data = str_pad("\0", 50000, "\0"); $len = $byteReader->Read($data, 50000); if ($len > 0) { $buffer = $buffer . substr($data, 0, $len); } } while ($len > 0); return $buffer; } ?>