Créer un tampon carré autour de lentité ponctuelle à laide dArcGIS for Desktop?

Je voudrais créer un tampon carré à partir dune entité ponctuelle mais je ne comprends pas le code qui y entre.

Des questions similaires ont été posées sur le site Web forums.esri mais cétait il y a plus de 10 ans, et cela na pas fonctionné lorsque jai essayé le code.

Comment créer un carré tampon dune entité ponctuelle?

Commentaires

  • gis.stackexchange.com/questions/12479 / … est essentiellement un doublon (car il répond à une généralisation de cette question), mais comme il y a déjà de bonnes réponses ici qui sont spécifiques aux tampons carrés, il semble préférable pour laisser les deux threads ouverts et séparés plutôt que de les fusionner. Mais si vous voulez encore plus de solutions, lisez aussi lautre fil de discussion!
  • OK merci whuber. Je viens de trouver ce site Web hier et je ‘ m’en suis toujours familiarisé. Je ‘ essaierai de le faire avec mes futurs messages / questions. ‘ jaime beaucoup mieux ce site que les forums ArcGIS.
  • Je nai ‘ que ce commentaire comme critique en aucune façon, Kimball: il était là pour empêcher la fusion des deux threads, que ‘ est tout. Bienvenue dans notre communauté! (Et sil vous plaît, parlez de nous à vos amis, en particulier ceux des forums ArcGIS. 🙂
  • Daccord. Je sais que vous navez ‘ pas le dire de cette façon. Japprécie beaucoup cette communauté et jai déjà commencé à parler de ce nouveau forum aux autres.
  • Merci pour votre contribution significative. Je me demande comment je peux utiliser un ensemble de données de champ dans une entité ponctuelle pour créer des tampons rectangulaires à laide du script que vous fournissez sans taper manuellement leurs coordonnées. Merci

Réponse

Essayez ces étapes avec ArcMap 10:

  1. Buffer votre entité ponctuelle (ArcToolbox> Outils danalyse> Proximité> Buffer). Assurez-vous de sélectionner la distance correcte dans la zone Unité linéaire.
  2. Entrez vos tampons nouvellement créés dans loutil Enveloppe dentités vers polygone (Données Management Tools> Features> Feature Envelope to Polygon). Assurez-vous de cocher la case « Créer des entités multi-parties » si vous avez plusieurs points.

Pour une solution Python:

Utilisation de SearchCursor et InsertCursor pour créer des tampons carrés

entrez la description de limage ici

Commentaires

  • +1 Les réponses qui démontrent que la solution fonctionne sont les meilleures.

Réponse

Une solution possible serait de créer vos tampons ronds « normaux » en utilisant loutil de tampon ESRI standard avec le rayon de votre choix, puis de réaliser une enveloppe dentités en polygone sur cette classe dentités résultante de tampons. Cela crée une fonction denveloppe carrée autour de létendue de chaque entité. Lenveloppe de fonctionnalités vers polygone se trouve dans Gestion des données> Fonctionnalités. Le modèle de création de modèle ressemblerait à:

entrez la description de limage ici

Commentaires

  • Excellente solution! De plus, en créant la sortie du tampon en tant que couche in_memory (in_memory \ tmpBuffer), vous pouvez éviter décrire des données inutiles sur le disque et rendre le processus beaucoup plus rapide.

Réponse

Comme le script lié à la fin du code dAaron ne peut être utilisé que pour les tampons carrés et nutilise pas le nouveau module arcpy.da, je « Jai écrit un script qui peut être utilisé pour créer des tampons rectangulaires. Sur un ensemble de données à points aléatoires de 10k, il sest terminé en 10 secondes:

entrez la description de limage ici

 import os, arcpy point_FC = arcpy.GetParameterAsText(0) w = float(arcpy.GetParameterAsText(1)) h = float(arcpy.GetParameterAsText(2)) output_FC = arcpy.GetParameterAsText(3) def rect(coord, w, h): #Given XY coordinates and rectangle dimensions, #return a polygon object of a rectangle centered about the point x,y = coord w *= 0.5 h *= 0.5 xmin,xmax = x-w, x+w ymin,ymax = y-h, y+h poly = ((xmin, ymax), (xmax, ymax), (xmax, ymin), (xmin, ymin)) return arcpy.Polygon(arcpy.Array(arcpy.Point(*p) for p in poly)) #Create output feature class. spatref = arcpy.Describe(point_FC).spatialReference folder, base = os.path.split(output_FC) arcpy.CreateFeatureclass_management(folder, base, "POLYGON", spatial_reference=spatref) #Get field object for every field in input except OID and Shape. fields = [f for f in arcpy.ListFields(point_FC) if f.type not in ("OID", "Geometry")] for field in fields: arcpy.AddField_management(output_FC, field.name, field.type, field.precision, field.scale, field.length, field.aliasName, field.isNullable, field.required, field.domain) #Get field names to be inputted to cursors. #Need SHAPE@XY token to read point coords and SHAPE@ token to write polygon coords. fnames = [f.name for f in fields] fields_in = fnames[::] fields_out = fnames[::] fields_in.append("SHAPE@XY") fields_out.append("SHAPE@") #Create buffers and write attributes to output FC, if any. count = int(arcpy.GetCount_management(point_FC)[0]) arcpy.SetProgressor("step", "Buffering...", 0, count, 1) with arcpy.da.SearchCursor(point_FC, fields_in) as Scursor, arcpy.da.InsertCursor(output_FC, fields_out) as Icursor: for i,row_in in enumerate(Scursor): #"Convert" point to rectangle arcpy.SetProgressorPosition(i) feature = list(row_in) feature[-1] = rect(feature[-1], w, h) Icursor.insertRow(feature)  

Réponse

En supposant que vous » utilisez ArcObjects (veuillez utiliser les balises pour spécifier la langue et lAPI que vous « utilisez), vous pouvez utiliser IEnvelope.Expand pour créer un tampon carré à partir de lenveloppe dun point, comme dans cet exemple: Obtenir toutes les entités de la recherche de points dans GeoFea tureLayer Snippet

 ESRI.ArcGIS.Geometry.IEnvelope envelope = point.Envelope; envelope.Expand(searchTolerance, searchTolerance, false);  

Réponse

Comme alternative à la réponse dAaron, pour ceux qui nont pas de licence Advanced, utilisez loutil Minimum Bounding Geometry . Étapes ci-dessous (modifiées à partir dAaron):

  1. Buffer votre entité ponctuelle (ArcToolbox> Outils danalyse> Proximité> Buffer). Assurez-vous de sélectionner la distance correcte dans la zone Unité linéaire.
  2. Entrez vos tampons nouvellement créés dans loutil Géométrie de délimitation minimale (Outils de gestion des données> Fonctionnalités> Géométrie de délimitation minimale). Utilisez « RECTANGLE_BY_AREA » ou « RECTANGLE_BY_WIDTH », les autres options ne sont disponibles quavec une licence Advanced.

EDIT : Cette option ne vous permet pas de contrôler lorientation des tampons carrés résultants, sans utiliser loption » ENVELOPE « (qui nécessite une licence avancée). En cochant la case » Ajouter des caractéristiques géométriques comme attributs à la sortie ( option) « – le décalage résultant sera enregistré comme » MBG_Orientation « dans la classe dentités en sortie. Cela peut ensuite être utilisé pour faire pivoter les entités vers le centre si vous le souhaitez – voir Rotation polygones par valeur de la table attributaire utilisant ArcPy? pour une solution potentielle à cela.

entrez la description de limage ici

Commentaires

  • Pour ma classe dentités particulière, cela finit par faire pivoter les carrés dans différentes directions en utilisant ce flux de travail. Peut-être parce que jai cercles tampons qui se chevauchent. Pas certain. Jai demandé à Esri dutiliser la méthode dAaron ‘ ci-dessus sur ma même classe dentités et elle na pas fait pivoter les cercles tamponnés.
  • @Andrew, yep you ‘ a raison, cest une limitation de loutil sans licence avancée. Lutilisation de loption ENVELOPE renvoie le même résultat que la méthode dAaron ‘ ci-dessus, mais nécessite également une licence avancée. Une solution potentielle serait de cocher loption ‘ ajouter des caractéristiques géométriques en tant quattributs ‘, découvrir le degré dinclinaison (doit être cohérent ), puis faites pivoter les tampons carrés résultants de ce montant dans une session dédition. Je nai ‘ pas encore essayé.

Réponse

Ceci site décrit comment convertir csv en tampons carrés ou rectangulaires ou circulaires à laide de Geographiclib JavaScript et js2shapefile.

Vous pouvez voir si cela résout votre problème.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *