Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Wed 19 June 2002 13:06

Maud Bauduret
Invité

[ArcObjects] Filtre spatial dans VB ArcMap

Bonjour,

Je voudrais utiliser l'objet ISpatialFilter dans un script VB pour ArcMap, mais j'ai un peu de mal a parametrer le filtre et le curseur.

Quelqu'un l'a-t'il deja utilise et/ou sais comment l'utiliser.

Merci pour votre aide,

Maud

 

#2 Wed 19 June 2002 05:54

Olivier De LA POMMERAYE
Invité

Re: [ArcObjects] Filtre spatial dans VB ArcMap

Bonjour,

Voici une fonction qui permet de faire une requete spatial sur une ILayer et de recuperer un IFeatureCursor vous permettant ensuite de boucler sur les objets graphiques (IFeature) pour faire tout type de manipulation (calcul sur les formes, intersection, buffer etc ...)

Code:

Public Function SpatialQuery(TheIntersectILayer As ILayer, TheOverlayILayer As ILayer, TheQueryShape As IGeometry, TheesriSpatialRelEnum As esriSpatialRelEnum, Optional TheSpatialRelDescription As String) As IFeatureCursor
Dim pGeom As IGeometry
Dim TheIntersectFeatureLayer As IFeatureLayer
Set TheIntersectFeatureLayer = TheIntersectILayer
Dim TheOverlayFeatureLayer As IFeatureLayer
Set TheOverlayFeatureLayer = TheOverlayILayer
Dim TheIntersectFeatureClass As IFeatureClass
Set TheIntersectFeatureClass = TheIntersectFeatureLayer.FeatureClass
Dim TheOverlayFeatureClass As IFeatureClass
Set TheOverlayFeatureClass = TheOverlayFeatureLayer.FeatureClass
Dim TheIDField As IField

Dim pFilter As ISpatialFilter
Set pFilter = New SpatialFilter
pFilter.SpatialRelDescription = TheSpatialRelDescription 
'Inverse la selection de tous les polygones qui ont en communs l'exterieur du QueryPolygone et
'les Limites des polygones de Union_Result

'  Query Geometry   Requested Geometry
'1   interior      interior
'2   interior      Boundary
'3   interior      exterior
'4   Boundary      interior
'5   Boundary      Boundary
'6   Boundary      exterior
'7   exterior      interior
'8   exterior      Boundary  
'9   exterior      exterior
'Note that any two shapes' exteriors always intersect

Set pFilter.Geometry = TheQueryShape
pFilter.GeometryField = TheIntersectFeatureClass.ShapeFieldName
pFilter.SpatialRel = TheesriSpatialRelEnum

Dim pOverlayFeatureCursor As IFeatureCursor
Set pOverlayFeatureCursor = TheOverlayFeatureClass.Search(pFilter, False)

Set SpatialQuery = pOverlayFeatureCursor
End Function

Vous pouvez ensuite appelez cette fonction par des synthaxes du type:
Set TheGlobalIFeatureCursor = SpatialQuery(TheILayer, TheILayerToQuery, TheQueryPolygon, esriSpatialRelIntersects)
OU
Set TheGlobalIFeatureCursor = SpatialQuery(TheILayer, TheILayerToQuery, TheQueryPolygon, esriSpatialRelRelation)

L'utilisation de la methode esriSpatialRelRelation est franchement hasardeuse (domage parceque c'est vraiment puissant)
ArcObject se melange un peu les pedales entre les Bondary/Interior/Exterior, par exemple.

L'Interieur du polygone de requete n'intersecte pas l'Interieur des polygones de la couche
--> donc on doit avoir tous les polygones a l'EXTERIEUR du polygone de requete OR cela ne donne pas le meme resultat que soit l'Exterieur du polygone de requete intersecte l'Interieur des polygones de la couche
--> donc on devrait avoir tous les polygones a l'EXTERIEUR du polygone de requete et bien cela depend des Polygones en cause, parfois les deux marches, parfois aucun marche !

Pour ma part, j'ai du faire un buffer -1 de mon polygone de Requete pour que cela fonctionne dans tous les cas.

L'Objet TheGlobalIFeatureCursor est du type IFeatureCursor

Votre question etait un peu vague j'espere que cela pourra quand meme vous etre utile.

Cordialement

Olivier de LA POMMERAYE
Ingenieur SIG et Teledetection
Service des Methodes Administratives et de l'Informatique (SMAI)
Nouvelle-Caledonie

 

Pied de page des forums

Powered by FluxBB