コード例 #1
0
 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;
 }