Esempio n. 1
0
function BuildLayerDefinitionData($layerData, $layerVarName, &$output)
{
    global $intermediateVar;
    $xmldoc = new DOMDocument();
    $xmldoc->loadXML($layerData);
    $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", "CompositeTypeStyle");
    $ruleNames = array("PointRule", "LineRule", "AreaRule", "CompositeRule");
    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;
        }
        $scaleRangeVarName = "sc" . $intermediateVar++;
        $output = $output . sprintf("var %s = new ScaleRangeItem(%s, %s, %s);\n", $scaleRangeVarName, $minScale, $maxScale, $layerVarName);
        $output = $output . sprintf("%s.children[%d] = %s;\n", $layerVarName, $sc, $scaleRangeVarName);
        if ($type != 0) {
            break;
        }
        $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++) {
                // We will check if this typestyle is going to be shown in the legend
                $showInLegend = $typeStyle->item($st)->getElementsByTagName("ShowInLegend");
                if ($showInLegend->length > 0) {
                    if ($showInLegend->item(0)->nodeValue == "false") {
                        continue;
                    }
                }
                // This typestyle does not need to be shown in the legend
                $rules = $typeStyle->item($st)->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 . sprintf("%s.children[%d] = new StyleItem(\"%s\", \"%s\", %d, %d);\n", $scaleRangeVarName, $styleIndex++, StrEscape(trim($labelText)), StrEscape(trim($filterText)), $ts + 1, $catIndex++);
                }
            }
        }
    }
    $output = $output . sprintf("%s.lyrtype = %d;\n", $layerVarName, $type);
}
Esempio n. 2
0
function DeclareUiItems($coll, $varname)
{
    global $cmds, $curFlyout;
    $def = "";
    if ($coll != null) {
        for ($i = 0, $j = 0; $i < $coll->GetCount(); $i++) {
            $item = $coll->GetWidget($i);
            $it = $item->GetType();
            if ($it == MgWebWidgetType::Separator) {
                $def = $def . sprintf("%s[%d] = new UiItem('');\n", $varname, $j++);
            } else {
                if ($it == MgWebWidgetType::Command) {
                    $cmd = $item->GetCommand();
                    if (!isset($cmds[$cmd->GetName()])) {
                        continue;
                    }
                    $cmdIndex = $cmds[$cmd->GetName()];
                    $def = $def . sprintf("%s[%d] = new CommandItem(\"%s\", %d);\n", $varname, $j++, StrEscape($cmd->GetLabel()), $cmdIndex);
                } else {
                    $curFlyout++;
                    $subVarname = "flyoutDef" . $curFlyout;
                    $htmlName = "FlyoutDiv" . $curFlyout;
                    $def = $def . sprintf("var %s = new Array()\n", $subVarname);
                    $def = $def . DeclareUiItems($item->GetSubItems(), $subVarname);
                    $def = $def . sprintf("%s[%d] = new FlyoutItem(\"%s\", %s, \"%s\", \"%s\");\n", $varname, $j++, StrEscape($item->GetLabel()), $subVarname, StrEscape($htmlName), $item->GetIconUrl());
                }
            }
        }
    }
    return $def;
}