selection generated by MgRenderingService::QueryFeatures() does not work properly?

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

selection generated by MgRenderingService::QueryFeatures() does not work properly?

mjirku
I am using MgRenderingService::QueryFeatures(). But when:
- I use "A-code" to get layers from $map, I am able to run "C-code" part and 'echo $featureFilter . "<br/>";' outputs filters with features Id. Something like this:
(FID=5023802)
(FID=11315)

- If I use "A-code" but comment out the "C-code" and uncomment "D-code". the server returns mgunclassifiedexception

- If I use "B-code" instead of "A-code", the server returns mginvalidmapdefinitionexception

Why I am not able to get FeatureReaders straight from MgSelection object? What can be wrong? Why it throws those exceptions?

<?php
require_once __DIR__ . '/IGsSearcher.php';
require_once __DIR__ . '/GsServiceProvider.php';
require_once __DIR__ . '/MgHelper.php';

class GsSearcherMapStrategy implements IGsSearcher{
        public static $MAP = 'map';
        public static $GEOMETRY = 'geometry';

        private $map;
        private $geometry;
        private $session;

        public function __construct($params){
                $this->map = $params[self::$MAP];
                $this->geometry = $params[self::$GEOMETRY];
                $this->session = $this->map->GetSessionId();
        }

        public function search(){
                $mgFeatureInformation = $this->getMgFeatureInformation();
                $resourceService =  GsServiceProvider::get($this->session, MgServiceType::ResourceService);
                $mapName = $this->map->GetName();
                $mgSelection = $mgFeatureInformation->GetSelection();

               
                //A-code
                $layers = $this->map->GetLayers();
                //B-code
                //$layers = $mgSelection->GetLayers();

                $countLayers = $layers->GetCount();
                for ($i=0; $i < $countLayers; $i++) {
                        $layer = $layers->GetItem($i);
                        //C-code
                        $featureFilter = $mgSelection->GenerateFilter($layer, $layer->GetFeatureClassName());
                        echo $featureFilter . "<br/>";
                        //D-code
                        //$featureReader = $mgSelection->GetSelectedFeatures($layer, $layer->GetFeatureClassName(),false);
                }
        }
       
        private function getMgFeatureInformation(){
                $renderingSrv = GsServiceProvider::get($this->session, MgServiceType::RenderingService);
                $mgStringCollection = new MgStringCollection();
                $layers = $this->map->GetLayers();
                $countLayers = $layers->GetCount();
                for ($i=0; $i < $countLayers; $i++) {
                        $mgStringCollection->Add($layers->GetItem($i)->GetName());
                }
                $selectionVariant = MgFeatureSpatialOperations::Intersects;
                $maxFeatures = -1;

                return $renderingSrv->QueryFeatures($this->map, $mgStringCollection, $this->geometry, $selectionVariant, $maxFeatures);
        }
}