Suite

Comment obtenir toutes les fonctionnalités dans l'étendue actuelle


J'aime ajouter des informations textuelles à chaque entité de l'étendue de la carte affichée dans mon MapControl/PageLayoutControl. L'ajout du texte n'est pas un problème, mais je n'ai pas trouvé de moyen d'obtenir les fonctionnalités.

Existe-t-il un moyen d'obtenir toutes les entités d'une couche qui se trouvent dans l'étendue actuelle de la carte ?


As-tu regardé :

Dim pEnv As IEnvelope pEnv = pAv.ScreenDisplay.DisplayTransformation.VisibleBounds

Définir l'enveloppe = aux limites visibles actives. Vous devrez ensuite définir un filtre spatial, rechercher la classe d'entités spécifique et la définir sur un curseur d'entité pour saisir toutes les entités.


Grâce à artwork21, j'ai pu résoudre ceci comme ceci :

Carte IMap = this._mapControl.ActiveView.FocusMap; Enveloppe IEnvelope = _mapControl.ActiveView.ScreenDisplay.DisplayTransformation.VisibleBounds; IGeoFeatureLayer featLayer = myLayer as IGeoFeatureLayer; if (featLayer != null) { IFeatureClass featureClass = featLayer.FeatureClass; System.String shapeFieldName = featureClass.ShapeFieldName; // Créez un nouveau filtre spatial et utilisez la nouvelle enveloppe comme géométrie ISpatialFilter spatialFilter = new SpatialFilterClass(); spatialFilter.Geometry = enveloppe; spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelEnvelopeIntersects; spatialFilter.set_OutputSpatialReference(shapeFieldName, map.SpatialReference); spatialFilter.GeometryField = shapeFieldName; // Effectuez la recherche IFeatureCursor featureCursor = featureClass.Search(spatialFilter, false); return featureCursor;