38 votos

La creación de la plaza de amortiguamiento alrededor de entidad de punto utilizando ArcGIS for Desktop?

Me gustaría crear una plaza de búfer a partir de un punto de función, pero no entiendo el código de lo que pasa en él.

Preguntas similares se han preguntado en los foros.sitio web de esri pero eso fue hace más de 10 años, y no funcionó cuando he probado el código.

¿Cómo puedo crear una plaza de búfer a partir de un punto de función?

54voto

Aaron Puntos 25882

Pruebe estos pasos con ArcMap 10:

  1. Búfer de su función de punto (ArcToolbox > Herramientas de Análisis > Proximidad > Buffer). Asegúrese de seleccionar la distancia correcta en el Lineal la caja de la unidad.
  2. La entrada de su recién creado buffers en la Función de Envolvente Polygon tool (Herramientas de Administración de Datos > Funciones > Característica de Sobres para Polígono). Asegúrese de seleccionar "Crear multpart características" en la casilla si usted tiene múltiples puntos.

Para una solución Python:

El uso de SearchCursor y InsertCursor para crear la plaza de búferes

enter image description here

12voto

wonderfulthunk Puntos 182

Una posible solución podría ser la creación de su "normal" de la ronda de buffers usando el estándar de ESRI búfer herramienta con cualquier radio que desea y, a continuación, realizar una Función Envolvente Polígono en que clase de entidad resultante de búferes. De esta forma se crea una plaza de la función de sobre en torno a la medida de cada característica. Característica de la Envolvente Polígono se encuentra dentro de la Gestión de Datos>Características. El modelo generador de modelo sería similar a:

enter image description here

9voto

Örjan Jämte Puntos 3127

Desde la secuencia de comandos vinculados a finales de Aaron código sólo puede ser utilizado para la plaza de búferes y no hacer uso de las nuevas arcpy.da módulo, he escrito un script que puede ser utilizada para crear el rectángulo de búferes. En un 10k punto al azar del conjunto de datos, que terminó en 10 segundos:

enter image description here

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)

5voto

auramo Puntos 161

Asumiendo que usted está utilizando ArcObjects (por favor, utilice las etiquetas para especificar el idioma y la API de que esté usando), puede utilizar IEnvelope.Expand para crear un cuadrado de amortiguamiento de un punto de la envolvente, como en este ejemplo: Obtener Todas las Características desde el Punto de Búsqueda en GeoFeatureLayer Fragmento

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

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X