¿Crear un búfer cuadrado alrededor de la entidad de punto usando ArcGIS for Desktop?

31

Me gustaría crear un búfer cuadrado a partir de una característica de punto, pero no entiendo el código que contiene.

Se han hecho preguntas similares en el sitio web forum.esri, pero eso fue hace más de 10 años, y no funcionó cuando probé el código.

¿Cómo creo un búfer cuadrado a partir de una entidad de puntos?

Kimball
fuente
gis.stackexchange.com/questions/12479/… es esencialmente un duplicado (porque aborda una generalización de esta pregunta), pero como ya hay buenas respuestas aquí que son específicas para buffers cuadrados, parece mejor dejar ambos hilos abiertos y separados en lugar de fusionarlos. Pero si quieres aún más soluciones, ¡lee el otro hilo también!
whuber
2
OK gracias whuber. Ayer encontré este sitio web y todavía me estoy familiarizando con él. Intentaré hacer eso con mis futuras publicaciones / preguntas. Este sitio me gusta mucho más que los foros de ArcGIS.
Kimball
No quise decir ese comentario como crítica de ninguna manera, Kimball: estaba allí para evitar la fusión de los dos hilos, eso es todo. ¡Bienvenido a nuestra comunidad! (Y cuénteles a sus amigos acerca de nosotros, especialmente aquellos en los foros de ArcGIS. :-)
whuber
Correcto. Sé que no lo dijiste de esa manera. Disfruto mucho de esta comunidad y ya he comenzado a contarles a otros sobre este nuevo foro.
Kimball
Gracias por tu gran parte. Me pregunto cómo puedo usar un conjunto de datos de campo en la función de punto para crear buffers de rectángulo usando el script que proporciona sin escribir manualmente sus coordenadas. Gracias

Respuestas:

47

Pruebe estos pasos con ArcMap 10:

  1. Amortiguar su característica de punto (ArcToolbox> Herramientas de análisis> Proximidad> Buffer). Asegúrese de seleccionar la distancia correcta en el cuadro Unidad lineal.
  2. Ingrese los búferes recién creados en la herramienta Envolvente de entidades en polígono (Herramientas de administración de datos> Funciones> Envolvente de entidades en polígonos). Asegúrate de seleccionar el cuadro "Crear características de varias partes" si tienes varios puntos.

Para una solución de Python:

Usando SearchCursor e InsertCursor para crear buffers cuadrados

ingrese la descripción de la imagen aquí

Aaron
fuente
2
+1 Las respuestas que demuestran que la solución funciona son las mejores.
whuber
12

Una posible solución sería crear sus búferes redondos "normales" utilizando la herramienta de búfer ESRI estándar con el radio que desee y luego realizar un Envolvente de entidad a polígono en esa clase de búfer de entidad resultante. Esto crea una función de envoltura cuadrada alrededor del alcance de cada función. Feature Envelope to Polygon se encuentra en Gestión de datos> Características. El modelo del generador de modelos sería similar a:

ingrese la descripción de la imagen aquí

Un alto
fuente
Excelente solucion! Además, al crear la salida del búfer como una capa in_memory (in_memory \ tmpBuffer) y puede evitar escribir datos innecesarios en el disco, y hacer que el proceso sea mucho más rápido.
RyanDalton
9

Dado que el script vinculado al final del código de Aaron solo se puede usar para buffers cuadrados y no hace uso del nuevo módulo arcpy.da, he escrito un script que se puede usar para crear buffers rectangulares. En un conjunto de datos de puntos aleatorios de 10k, se completó en 10 segundos:

ingrese la descripción de la imagen aquí

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)
Paul
fuente
1

Como alternativa a la respuesta de Aaron, para aquellos sin una licencia avanzada, use la herramienta de geometría de límite mínimo . Pasos a continuación (modificado de Aaron):

  1. Amortiguar su característica de punto (ArcToolbox> Herramientas de análisis> Proximidad> Buffer). Asegúrese de seleccionar la distancia correcta en el cuadro Unidad lineal.
  2. Ingrese los búferes recién creados en la herramienta Geometría de límite mínimo (Herramientas de administración de datos> Características> Geometría de límite mínimo). Use 'RECTANGLE_BY_AREA' o 'RECTANGLE_BY_WIDTH', las otras opciones solo están disponibles con una licencia avanzada.

EDITAR : Esta opción no le permite controlar la orientación de los búferes cuadrados resultantes, sin usar la opción 'SOBRE' (que requiere una licencia avanzada). Al marcar la opción 'Agregar características de geometría como atributos a la salida (opcional)', el desplazamiento resultante se registrará como 'MBG_Orientation' en la clase de entidad de salida. Esto se puede usar para rotar las entidades de nuevo al centro si lo desea: consulte ¿ Rotar polígonos por valor de la tabla de atributos con ArcPy? para una posible solución a eso.

ingrese la descripción de la imagen aquí

Dùn Caan
fuente
Para mi clase de entidad particular, termina girando los cuadrados en diferentes direcciones utilizando este flujo de trabajo. Quizás porque tengo círculos de búfer superpuestos. No es seguro. Hice que Esri usara el método anterior de Aaron en mi misma clase de entidad y no rotó los círculos almacenados en búfer.
Andrew
@ Andrew, sí, tienes razón, eso es una limitación de la herramienta sin una licencia avanzada. El uso de la opción ENVELOPE devolvería el mismo resultado que el método anterior de Aaron, pero también necesita una licencia avanzada. Una solución alternativa posible sería marcar la opción 'agregar características de geometría como atributos', averiguar la cantidad que están inclinados (debe ser consistente), y luego rotar los búferes cuadrados resultantes en esa cantidad en una sesión de edición. No he probado esto todavía.
Dùn Caan
0

Este sitio describe cómo convertir csv en búferes cuadrados, rectangulares o circulares utilizando JavaScript y js2shapefile.

Puedes echar un vistazo si resuelve tu problema.

GeoSpatialEarth.in
fuente