private function CreateAreaStyle($query, $ruleNode) { $style = new stdClass(); $sym2DNodes = $ruleNode->getElementsByTagName("AreaSymbolization2D"); $sym2DNode = $sym2DNodes->item(0); $labelNodes = $ruleNode->getElementsByTagName("Label"); $fillNodes = $sym2DNode->getElementsByTagName("Fill"); $strokeNodes = $sym2DNode->getElementsByTagName("Stroke"); if ($labelNodes->length == 1) { } if ($fillNodes->length == 1) { $colorExpr = $fillNodes->item(0)->getElementsByTagName("ForegroundColor")->item(0)->nodeValue; $color = MgUtils::HtmlToRgba($colorExpr); if ($color === FALSE) { //Does not parse into a color. Assume FDO expression $colorAlias = "EXPR_AREA_FILL_COLOR_" . $this->areaStyleNo++; $query->AddComputedProperty($colorAlias, $colorExpr); $style->fillColor = function ($reader) use($colorAlias) { $colorStr = MgUtils::GetBasicValueFromReader($reader, $colorAlias); return MgUtils::HtmlToRgba($colorStr); }; } else { $style->fillColor = function ($reader) use($color) { return $color; }; } } if ($strokeNodes->length == 1) { $style->outline = true; $colorExpr = $strokeNodes->item(0)->getElementsByTagName("Color")->item(0)->nodeValue; $color = MgUtils::HtmlToRgba($colorExpr); if ($color === FALSE) { //Does not parse into a color. Assume FDO expression $colorAlias = "EXPR_AREA_OUTLINE_COLOR_" . $this->areaStyleNo++; $query->AddComputedProperty($colorAlias, $colorExpr); $style->outlineColor = function ($reader) use($colorAlias) { $colorStr = MgUtils::GetBasicValueFromReader($reader, $colorAlias); return MgUtils::HtmlToRgba($colorStr); }; } else { $style->outlineColor = function ($reader) use($color) { return $color; }; } } return $style; }
private function CollectQueryMapFeaturesResult($resSvc, $reqData, $featInfo, $selection, $bRequestAttributes, $inlineSelectionImg) { $xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<FeatureInformation>\n"; $tooltip = ""; $hyperlink = ""; if ($featInfo != null) { $tooltip = $featInfo->GetTooltip(); $hyperlink = $featInfo->GetHyperlink(); } $selXml = $selection->ToXml(); if (strlen($selXml) > 0) { //Need to strip the XML prolog from this fragment $fsdoc = new DOMDocument(); $fsdoc->loadXML($selXml); $selXml = $fsdoc->saveXML($fsdoc->documentElement); $xml .= $selXml; } else { $xml .= "<FeatureSet />\n"; } if (($reqData & self::REQUEST_TOOLTIP) == self::REQUEST_TOOLTIP && strlen($tooltip) > 0) { $xml .= "<Tooltip>" . MgUtils::EscapeXmlChars($tooltip) . "</Tooltip>\n"; } else { $xml .= "<Tooltip />\n"; } if (($reqData & self::REQUEST_HYPERLINK) == self::REQUEST_HYPERLINK && strlen($hyperlink) > 0) { $xml .= "<Hyperlink>" . MgUtils::EscapeXmlChars($hyperlink) . "</Hyperlink>\n"; } else { $xml .= "<Hyperlink />\n"; } if (($reqData & self::REQUEST_INLINE_SELECTION) == self::REQUEST_INLINE_SELECTION && $inlineSelectionImg != null) { $xml .= "<InlineSelectionImage>\n"; $xml .= "<MimeType>" . $inlineSelectionImg->GetMimeType() . "</MimeType>\n"; $b64 = MgUtils::ByteReaderToBase64($inlineSelectionImg); $xml .= "<Content>{$b64}</Content>\n"; $xml .= "</InlineSelectionImage>\n"; } if ($bRequestAttributes) { $agfRw = new MgAgfReaderWriter(); $layerDoc = new DOMDocument(); $xml .= "<SelectedFeatures>"; $selLayers = $selection->GetLayers(); if ($selLayers != null) { $selLayerCount = $selLayers->GetCount(); for ($i = 0; $i < $selLayerCount; $i++) { $selLayer = $selLayers->GetItem($i); $layerName = $selLayer->GetName(); $xml .= "<SelectedLayer id=\"" . $selLayer->GetObjectId() . "\" name=\"{$layerName}\">"; $xml .= "<LayerMetadata>\n"; $ldfId = $selLayer->GetLayerDefinition(); $layerContent = $resSvc->GetResourceContent($ldfId); $layerDoc->loadXML($layerContent->ToString()); $propMapNodes = $layerDoc->getElementsByTagName("PropertyMapping"); $clsDef = $selLayer->GetClassDefinition(); $clsProps = $clsDef->GetProperties(); $propMappings = array(); for ($j = 0; $j < $propMapNodes->length; $j++) { $propMapNode = $propMapNodes->item($j); $propName = $propMapNode->getElementsByTagName("Name")->item(0)->nodeValue; $pidx = $clsProps->IndexOf($propName); if ($pidx >= 0) { $propDispName = MgUtils::EscapeXmlChars($propMapNode->getElementsByTagName("Value")->item(0)->nodeValue); $propDef = $clsProps->GetItem($pidx); $propType = MgPropertyType::Null; if ($propDef->GetPropertyType() == MgFeaturePropertyType::DataProperty) { $propType = $propDef->GetDataType(); } else { if ($propDef->GetPropertyType() == MgFeaturePropertyType::DataProperty) { $propType = MgPropertyType::Geometry; } } $xml .= "<Property>\n"; $xml .= "<Name>{$propName}</Name>\n<Type>{$propType}</Type>\n<DisplayName>{$propDispName}</DisplayName>\n"; $xml .= "</Property>\n"; $propMappings[$propName] = $propDispName; } } $xml .= "</LayerMetadata>\n"; $reader = $selection->GetSelectedFeatures($selLayer, $selLayer->GetFeatureClassName(), false); $rdrClass = $reader->GetClassDefinition(); $geomPropName = $rdrClass->GetDefaultGeometryPropertyName(); while ($reader->ReadNext()) { $xml .= "<Feature>\n"; $bounds = ""; if (!$reader->IsNull($geomPropName)) { $agf = $reader->GetGeometry($geomPropName); $geom = $agfRw->Read($agf); $env = $geom->Envelope(); $ll = $env->GetLowerLeftCoordinate(); $ur = $env->GetUpperRightCoordinate(); $bounds = $ll->GetX() . " " . $ll->GetY() . " " . $ur->GetX() . " " . $ur->GetY(); } $xml .= "<Bounds>{$bounds}</Bounds>\n"; foreach ($propMappings as $propName => $displayName) { $value = MgUtils::EscapeXmlChars(MgUtils::GetBasicValueFromReader($reader, $propName)); $xml .= "<Property>\n"; $xml .= "<Name>{$displayName}</Name>\n"; if (!$reader->IsNull($propName)) { $xml .= "<Value>{$value}</Value>\n"; } $xml .= "</Property>\n"; } $xml .= "</Feature>\n"; } $reader->Close(); $xml .= "</SelectedLayer>"; } } $xml .= "</SelectedFeatures>"; } $xml .= "</FeatureInformation>"; return $xml; }