//get properties for individual features $result->layers = array(); for ($i=0; $i<$layers->GetCount(); $i++) { $layer = $layers->GetItem($i); $layerName = $layer->GetName(); $layerClassName = $layer->GetFeatureClassName(); $options = new MgFeatureQueryOptions(); $options->SetFilter($resultSel->GenerateFilter($layer, $layerClassName)); $resourceId = new MgResourceIdentifier($layer->GetFeatureSourceId()); $featureReader = $featureSrvc->SelectFeatures($resourceId, $layerClassName, $options); $properties = BuildSelectionArray($featureReader, $layerName, $properties, false, NULL, false, $layer, true); $featureReader->Close(); array_push($result->layers, $layerName); array_push($properties->layers, $layerName); $count = $resultSel->GetSelectedFeaturesCount($layer, $layerClassName); $result->$layerName->featureCount = $count; } /*save selection in the session*/ $_SESSION['selection_array'] = $properties; echo str_replace("</FeatureSet>", "</FeatureSet></FeatureInformation>", str_replace("<FeatureSet", "<FeatureInformation><FeatureSet", $resultSel->ToXml())); } else { echo "<Message>layers false or 0</Message>"; } } else { echo "<Message>no resultsel</Message>"; } } else { echo "<Message>no fi</Message>"; } } else { echo "<Message>no multi geom</Message>"; } } else { echo "<Message>no layers</Message>"; } //return XML header("Content-type: text/xml"); } catch(MgException $e) {
$oMin = $oExtents->GetLowerLeftCoordinate(); $oMax = $oExtents->GetUpperRightCoordinate(); $result->extents->minx = $oMin->GetX(); $result->extents->miny = $oMin->GetY(); $result->extents->maxx = $oMax->GetX(); $result->extents->maxy = $oMax->GetY(); } } $result->layers = array(); for ($i = 0; $i < $layers->GetCount(); $i++) { $layer = $layers->GetItem($i); $layerName = $layer->GetName(); array_push($result->layers, $layerName); $layerClassName = $layer->GetFeatureClassName(); $result->{$layerName} = new stdClass(); $result->{$layerName}->featureCount = $selection->GetSelectedFeaturesCount($layer, $layerClassName); } } echo var2json($result); } catch (MgException $e) { echo "ERROR: " . $e->GetDetails() . "\n"; } function GetParameters($params) { global $selText; global $getExtents; $selText = UnescapeMagicQuotes($params['selection']); $getExtents = $params['getextents'] == "true" ? true : false; } function UnescapeMagicQuotes($str) {
public function GetSelectedFeatures($sessionId, $mapName, $layerName, $format) { $fmt = $this->ValidateRepresentation($format, array("xml", "geojson", "html")); $propList = $this->GetRequestParameter("properties", ""); $pageSize = $this->GetRequestParameter("pagesize", -1); $pageNo = $this->GetRequestParameter("page", -1); $orientation = $this->GetRequestParameter("orientation", "h"); //Internal debugging flag $chunk = $this->GetBooleanRequestParameter("chunk", true); try { $this->EnsureAuthenticationForSite($sessionId); $siteConn = new MgSiteConnection(); $siteConn->Open($this->userInfo); $resSvc = $siteConn->CreateService(MgServiceType::ResourceService); $featSvc = $siteConn->CreateService(MgServiceType::FeatureService); $map = new MgMap($siteConn); $map->Open($mapName); $selection = new MgSelection($map); $selection->Open($resSvc, $mapName); $layers = $selection->GetLayers(); if ($layers != null) { $lidx = -1; $layerCount = $layers->GetCount(); for ($i = 0; $i < $layerCount; $i++) { $currentlayer = $layers->GetItem($i); if ($currentlayer->GetName() == $layerName) { $lidx = $i; break; } } if ($lidx < 0) { $this->NotFound($this->app->localizer->getText("E_LAYER_NOT_IN_SELECTION", $layerName), $this->GetMimeTypeForFormat($fmt)); } else { $layer = $layers->GetItem($lidx); $bMapped = $this->GetBooleanRequestParameter("mappedonly", "0") == "1"; $transformto = $this->GetRequestParameter("transformto", ""); $transform = null; if ($transformto !== "") { $resId = new MgResourceIdentifier($layer->GetFeatureSourceId()); $tokens = explode(":", $layer->GetFeatureClassName()); $transform = MgUtils::GetTransform($featSvc, $resId, $tokens[0], $tokens[1], $transformto); } $owriter = null; if ($chunk === "0") { $owriter = new MgSlimChunkWriter($this->app); } else { $owriter = new MgHttpChunkWriter(); } //NOTE: This does not do a query to ascertain a total, this is already a pre-computed property of the selection set. $total = $selection->GetSelectedFeaturesCount($layer, $layer->GetFeatureClassName()); if (strlen($propList) > 0) { $tokens = explode(",", $propList); $propNames = new MgStringCollection(); foreach ($tokens as $propName) { $propNames->Add($propName); } $reader = $selection->GetSelectedFeatures($layer, $layer->GetFeatureClassName(), $propNames); } else { $reader = $selection->GetSelectedFeatures($layer, $layer->GetFeatureClassName(), $bMapped); } if ($pageSize > 0) { $pageReader = new MgPaginatedFeatureReader($reader, $pageSize, $pageNo, $total); $result = new MgReaderChunkedResult($featSvc, $pageReader, -1, $owriter, $this->app->localizer); } else { $result = new MgReaderChunkedResult($featSvc, $reader, -1, $owriter, $this->app->localizer); } $result->CheckAndSetDownloadHeaders($this->app, $format); if ($transform != null) { $result->SetTransform($transform); } if ($fmt === "html") { $result->SetAttributeDisplayOrientation($orientation); $result->SetHtmlParams($this->app); } $result->Output($format); } } else { $owriter = new MgHttpChunkWriter(); $reader = new MgNullFeatureReader(); $result = new MgReaderChunkedResult($featSvc, $reader, -1, $owriter, $this->app->localizer); if ($fmt === "html") { $result->SetAttributeDisplayOrientation($orientation); $result->SetHtmlParams($this->app); } $result->Output($format); } } catch (MgException $ex) { $this->OnException($ex, $this->GetMimeTypeForFormat($format)); } }