[mapguide-users] Zooming to extent of multiple selections

Jo Cook j.cook at oxfordarch.co.uk
Tue Dec 22 06:24:46 EST 2009


Answered my own question :-)

For information, and future people having a similar problem, the issue was
not with the code but with the fact that the layer came from an odbc data
source, so consequently had no geometry or extents. I figured that out using
the web tier tests. Once I realised that (which was no doubt obvious to most
people) I could extract the values for the coordinates from the table and
use that to construct an envelope for zooming to.

Jo


Jo Cook wrote:
> 
> OK, with some serious searching through the mailing lists, and looking at
> the showgeom.php example in the schemareport folder, I have learnt a
> little more about GetExtents, but I'm still stuck and would very much
> appreciate some assistance. My code is as follows:
> 
> MgInitializeWebTier ($webconfigFilePath); 
> 
>                 $userInfo = new MgUserInformation($sessionId); 
>                 $siteConnection = new MgSiteConnection(); 
>                 $siteConnection->Open($userInfo); 
> 
>                 echo "Map: ".$mapName."<br />"; 
>                 $map = new MgMap($siteConnection); 
>                 $map->Open($mapName); 
>         
>                 $cfilter = "POSTCODE = '$ccode'"; 
>                 echo "Query: ".$cfilter.'<br />'; 
> 
> 
>                 $queryOptions = new MgFeatureQueryOptions(); 
>                 $queryOptions->SetFilter($cfilter); 
> 
>                 echo "Layer: ".$SMAlayer.'<br />'; 
>                 $layers = $map->GetLayers(); 
>                 $selLayer = $layers->GetItem($SMAlayer); 
> 
> 
>                 $featureresourceID = new
> MgResourceIdentifier($selLayer->GetFeatureSourceId()); 
>                 //print_r($featureresourceID);
> 		$featureclassname = $selLayer->GetFeatureClassName(); 
>                 $featureService =
> $siteConnection->CreateService(MgServiceType::FeatureService); 
>                 $dataReader =
> $featureService->SelectFeatures($featureresourceID, $featureclassname,
> $queryOptions); 
>                 $dataReader->ReadNext(); 
>                 $resourceService =
> $siteConnection->CreateService(MgServiceType::ResourceService); 
>         
>                 $selection = new MgSelection($map); 
>                 $selection->AddFeatures($selLayer, $dataReader, 0); 
> 
>                 $selection->Save($resourceService, $mapName); 
>                 $dataReader->Close();                      
>       
> 
>                 $count =
> $selection->GetSelectedFeaturesCount($selLayer,$featureclassname); 
>                 echo 'Count: '.$count.'<br />'; 
>   
>           	$agfReaderWriter = new MgAgfReaderWriter();
>                 // this seems to be the problem line
> 		$spatialcontextReader =
> $featureService->GetSpatialContexts($featureresourceID, false);
>    		while ($spatialcontextReader->ReadNext())
>                 {
>                         // Finds the extent
>                         $extentByteReader =
> $spatialcontextReader->GetExtent();
> 
>                 }
>                 $spatialcontextReader->Close();
> 					
> 
> 
> 		// Get the extent geometry from the spatial context
>                 $extentGeometry =
> $agfReaderWriter->Read($extentByteReader);
> 		
> 		$iterator = $extentGeometry->GetCoordinates();
>                 while($iterator->MoveNext())
>                 {	
>                     $x = $iterator->GetCurrent()->GetX();
>                     $y = $iterator->GetCurrent()->GetY();
>                     if($firstTime)
>                     {
>                         $maxX = $x;
>                         $minX = $x;
>                         $maxY = $y;
>                         $minY = $y;
>                         $firstTime = false;
>                     }
>                     if($maxX<$x)
>                         $maxX = $x;
>                     if($minX>$x||$minX==0)
>                         $minX = $x;
>                     if($maxY<$y)
>                         $maxY = $y;
>                     if($minY>$y||$minY==0)
>                         $minY = $y;
>                 }
> 
> 		echo "extent lower left: ".$minX.",".$minY."<br />";
> 
> 				
> }
> 
> When this runs I get an error that "the argument is null". I believe the
> error is something to do with the spatialcontextreader line, but I can't
> figure out what's wrong with it.
> 
> Any thoughts?
> 
> Jo
> 
> 

-- 
View this message in context: http://n2.nabble.com/Zooming-to-extent-of-multiple-selections-tp4199009p4203040.html
Sent from the MapGuide Users mailing list archive at Nabble.com.


More information about the mapguide-users mailing list