Open($mapName);
//Get layer collection as xml
header('content-type: text/xml');
$layers=$map->GetLayers();
echo "";
function buildScaleRanges($layer) {
global $resourceService;
$resID = $layer->GetLayerDefinition();
$layerContent = $resourceService->GetResourceContent($resID);
$xmldoc = new DOMDocument();
$xmldoc->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 .= ''.htmlspecialchars(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;
}
?>