[mapguide-users] Getting all object Enveloppe
David Hequet
david.hequet at free.fr
Thu Jun 7 10:39:39 EDT 2007
Using mapagent test page i can have a geometry using oracle spatial function:
SELECT SDO_AGGR_MBR(GEOMETRY) FROM LOCAL WHERE ID_NIVEAU=510
(where id_niveau is a group property)
But i prefer use mapguide function.
I was looking "SelectAggregate" method. But it seems difficult to create a
group filter.
I'm trying :p
If Someone has un example, i take it!
Kenneth, GEOGRAF A/S wrote:
>
> Yes, you should be able to assign the query to the MgQueryOptions object.
>
> I don't have a syntax sample, and the avalibility/performance would
> probally depend heavily on the provider.
>
> If you have a lot of features/layers, I would probally be a perfomance
> killer doing it manually.
>
> Regards, Kenneth, GEOGRAF A/S
>
>
>
> David Hequet wrote:
>> and about "Select Envelope(geometry) from datasource"
>> I can do that with ExecuteSqlQuery ?
>> do you have a syntaxe sample? i think i have to check if the fdoprovider
>> has
>> this "SpatialExtents" capability?
>> going through each object can be very slow on each map loading..
>>
>>
>> Kenneth, GEOGRAF A/S wrote:
>>
>>> Yes, you have to run through each feature in the feature reader.
>>> Then on each feature, you have to use some of the obscure
>>> AgfReader/Bytereader stuff to get the actual object out of the geometry
>>> column.
>>> When you have the object, it has a GetEnvelope() method.
>>>
>>> Regards, Kenneth, GEOGRAF A/S
>>>
>>>
>>> David Hequet wrote:
>>>
>>>> Arg, i was so close of my goal
>>>>
>>>> I think i have to take a look on your idea because of MGSelection seems
>>>> to
>>>> have a limit.
>>>>
>>>> here is my code:
>>>>
>>>> For i = 0 To aMgLayerCollection.GetCount() - 1
>>>> aLayer = aMgLayerCollection.GetItem(i)
>>>> aProvider = Me._getLayerSourceType(, aLayer)
>>>> If aProvider <> "Autodesk.Raster" And aProvider <> "DWF" Then
>>>>
>>>> aLayerClassName = aLayer.GetFeatureClassName()
>>>> If aClassArray.IndexOf(aLayerClassName) = -1 Then
>>>> Me._log(aLayerClassName)
>>>> aLayerFeatureId = aLayer.GetFeatureSourceId()
>>>> aLayerResId = New MgResourceIdentifier(aLayerFeatureId)
>>>> aFeatureReader =
>>>> Me._featureService.SelectFeatures(aLayerResId,
>>>> aLayerClassName, aMGQueryOptions)
>>>> aMGSelection.AddFeatures(aLayer, aFeatureReader, 0)
>>>> aClassArray.Add(aLayerClassName)
>>>> End If
>>>> End If
>>>> Next i
>>>> aMgEnveloppe = aMGSelection.GetExtents(Me._featureService)
>>>> I got an error:
>>>> Une exception non classifiée s'est produite.Une exception non
>>>> classifiée
>>>> s'est produite.
>>>> Une exception s'est produite dans la méthode
>>>> MgServerSelectFeatures.SelectFeatures à la ligne 217 dans le fichier
>>>> c:\build_tux_area\mgdev\server\src\services\feature\ServerSelectFeatures.cpp
>>>> In english "non classified error"
>>>> When i use this method
>>>> aMgEnveloppe = aMGSelection.GetExtents(Me._featureService)
>>>>
>>>> it didn't happen every time:
>>>> on a map with ~30 features dispatched on 4 layers it's ok
>>>> on a map with ~1200 features on 2 layers it crash (if i try too much
>>>> the
>>>> mgserver service crash).
>>>>
>>>> i didn't see a getExtent method on the featurereader, i think i have to
>>>> check enveloppe for each feature in the reader?
>>>>
>>>>
>>>> Kenneth, GEOGRAF A/S wrote:
>>>>
>>>>
>>>>> You don't have to use the selection part.
>>>>> You can extract the object directly from the feature reader.
>>>>> Once you have the object, you can also get the extent (aka bbox).
>>>>> If you then construct an envelope object, you can add the features
>>>>> envelope to original envelope.
>>>>>
>>>>> Something like:
>>>>>
>>>>> create a new MgFeatureQueryOptions with an empty filter
>>>>> create a new Envelope
>>>>> For Each Layer
>>>>> {
>>>>> Use a featureReader with the MgFeatureQueryOptions
>>>>> Add the feature's envelope to the outer Envelope
>>>>> }
>>>>> Get zoom extents from the Envelope
>>>>>
>>>>>
>>>>> Other than this, I don't think you can optimize it anymore, as you
>>>>> need
>>>>> to execute the query on each layer.
>>>>>
>>>>> I think there is a "Get Extents" on the feature source, but I can't
>>>>> find
>>>>> it. And I don't think it works on filtered datasources.
>>>>>
>>>>> Perhaps you can execute the query with some SQL optimizations like
>>>>> "Select Envelope(geometry) from datasource".
>>>>>
>>>>> Hope it helps.
>>>>>
>>>>> Regards, Kenneth, GEOGRAF A/S
>>>>>
>>>>>
>>>>>
>>>>> David Hequet wrote:
>>>>>
>>>>>
>>>>>> Hello,
>>>>>>
>>>>>> I'm trying to make a fonction that can return me the enveloppe of the
>>>>>> entire
>>>>>> visible map (no way with original map extent).
>>>>>>
>>>>>> Explain: I have a map "template" with a lot of layers, i have a
>>>>>> function
>>>>>> that change all the layer filter (basic filter, no spatial) to see
>>>>>> different
>>>>>> map based on that template. Doing that make the "zoom to original
>>>>>> extent"
>>>>>> useless, because data are not on the same area.
>>>>>> I wan't to set the new map extent in the MapDefinition.
>>>>>> My ask is about getting the new extent.
>>>>>>
>>>>>> I thought to do it like that:
>>>>>>
>>>>>> create a new MgSelection
>>>>>> create a new MgFeatureQueryOptions with an empty filter
>>>>>> For Each Layer
>>>>>> {
>>>>>> Use a featureReader with the MgFeatureQueryOptions
>>>>>> Add the selected feature to the MgSelection
>>>>>> }
>>>>>> Getting the MgSelection enveloppe
>>>>>>
>>>>>> It will work, but i don't think it's very optimized with a lot of
>>>>>> Layer/Feature (and it will used at each map load, filter
>>>>>> modification..)
>>>>>>
>>>>>> Did someone have a better way?
>>>>>>
>>>>>> Thank you!
>>>>>>
>>>>>> Ps: sorry for my poor english, ask i you want precision.
>>>>>>
>>>>>>
>>>>>>
>>>>> _______________________________________________
>>>>> mapguide-users mailing list
>>>>> mapguide-users at lists.osgeo.org
>>>>> http://lists.osgeo.org/mailman/listinfo/mapguide-users
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>> _______________________________________________
>>> mapguide-users mailing list
>>> mapguide-users at lists.osgeo.org
>>> http://lists.osgeo.org/mailman/listinfo/mapguide-users
>>>
>>>
>>>
>>
>>
>
> _______________________________________________
> mapguide-users mailing list
> mapguide-users at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/mapguide-users
>
>
--
View this message in context: http://www.nabble.com/Getting-all-object-Enveloppe-tf3864317s16610.html#a11009272
Sent from the MapGuide Users mailing list archive at Nabble.com.
More information about the mapguide-users
mailing list