[mapguide-users] working with selections ...
Paul Spencer
pspencer at dmsolutions.ca
Tue Aug 15 08:34:18 EDT 2006
Andy, I am refreshing the map. I'm not using the standard mapFrame
stuff, although I traced that code to see how it works and it isn't
substantially different from my code. Except that it round-trips
with the selection ... the selection is turned into xml on the
server, sent to the client which calls SetSelectionXML which calls
the server (setselection.php) to actually save the selection into the
map. It does this to accomodate the dwf viewer which doesn't need to
call the server to highlight the selection I believe.
Cheers
Paul
On 14-Aug-06, at 6:03 PM, Andy Morsell wrote:
> Hi Paul,
> Are you refreshing the map somehow? You will not see the selection
> until
> this occurs via an API call back to the server. In some almost
> identical
> code of mine, I use a JavaScript function to call SetSelectionXML
> in the
> mapFrame. Or, a call to ZoomToView in the mapFrame also works
> since it has
> to redraw the map and will include the new selection object.
>
> I hope this helps.
>
>
> Andy Morsell, P.E.
> Spatial Integrators, Inc.
> http://www.SpatialGIS.com
>
> -----Original Message-----
> From: Paul Spencer [mailto:pspencer at dmsolutions.ca]
> Sent: Monday, August 14, 2006 2:46 PM
> To: users at mapguide.osgeo.org
> Subject: [mapguide-users] working with selections ...
>
> All,
>
> I've been pulling what little hair I have left out of my head over
> this!
>
> I would like to create a selection in the map using the PHP API.
>
> I have the following code:
>
> $map = new MgMap();
> $map->Open($resourceService, $mapName);
> $layerObj = $map->GetLayers()->GetItem($layerName);
> $featureResId = new MgResourceIdentifier($layerObj->GetFeatureSourceId
> ());
> $featureGeometryName = $layerObj->GetFeatureGeometryName();
> $class = $layerObj->GetFeatureClassName(); $queryOptions = new
> MgFeatureQueryOptions(); $queryOptions->SetFilter($filter);
> $wktRW = new MgWktReaderWriter();
> $geom = $wktRW->Read($spatialFilter);
> $queryOptions->SetSpatialFilter($featureGeometryName, $geom,
> MgFeatureSpatialOperations::Inside);
> $featureReader = $featureService->SelectFeatures($featureResId,
> $class, $queryOptions);
> $selection = new MgSelection($map);
> $selection->AddFeatures($layerObj, $featureReader, 0);
> $selection->Save($resourceService, $mapName);
>
> If I add this ...
>
> echo countFeatures($featureReader);
> function countFeatures($featureReader) {
> $i = 0;
> while ($featureReader->ReadNext()) {
> $i++;
> }
>
> return $i;
> }
>
> it tells me that I have the appropriate number of features in the
> feature
> reader (for the geom and attribute filter chosen) ... in my test
> cases, it
> was over 7000 features so I limited it spatially to about 200 ...
> but I
> don't leave this in because it consumes the features and nothing
> gets added
> to the selection :)
>
> The problem is that after the selection is saved, I don't get anything
> highlighted on the map. I have another PHP script that retrieves the
> properties of selected features. It works if I use the mapagent to
> select
> the features but it doesn't work if I use this php script ... well, it
> reports that there is one layer with a selection but no features on
> it.
>
> The problem occurs if I use just a basic filter, just a spatial
> filter, or
> both combined. It also occurs regardless of the number of features
> selected
> from 1 to the full 7000+.
>
> I also tried using my second php script inline to read the
> selection info
> and no joy. The script that reads the selection info looks like:
>
> $layers = $selection->GetLayers();
> $layer = $layers->GetItem(0); //yes there is one layer in the result
> $layerClassName = $layer->GetFeatureClassName(); $selectionString =
> $selection->GenerateFilter($layer, $layerClassName); $layerFeatureId =
> $layer->GetFeatureSourceId(); $layerFeatureResource = new
> MgResourceIdentifier($layerFeatureId);
> $queryOptions->SetFilter($selectionString);
> $featureReader = $featureService->SelectFeatures
> ($layerFeatureResource,
> $layerClassName, $queryOptions); //... etc etc etc
>
> The feature class name is the same in both cases. The filter seems
> appropriate.
>
> I am obviously missing something here but I cannot see what it is.
> I did
> try saving the $map as well, with no obvious change. Or is it a
> bug? Oh, I
> also tried saving the selection as XML and creating a new selection
> and
> initializing it from the XML but that didn't seem to change
> anything either.
>
> Cheers
>
> Paul
>
> +-----------------------------------------------------------------+
> |Paul Spencer pspencer at dmsolutions.ca |
> +-----------------------------------------------------------------+
> |Applications & Software Development |
> |DM Solutions Group Inc http://www.dmsolutions.ca/|
> +-----------------------------------------------------------------+
>
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe at mapguide.osgeo.org
> For additional commands, e-mail: users-help at mapguide.osgeo.org
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe at mapguide.osgeo.org
> For additional commands, e-mail: users-help at mapguide.osgeo.org
>
+-----------------------------------------------------------------+
|Paul Spencer pspencer at dmsolutions.ca |
+-----------------------------------------------------------------+
|Applications & Software Development |
|DM Solutions Group Inc http://www.dmsolutions.ca/|
+-----------------------------------------------------------------+
More information about the Mapguide_users
mailing list