Creazione di un buffer quadrato attorno alla feature punto utilizzando ArcGIS for Desktop?

Vorrei creare un buffer quadrato da una caratteristica puntuale ma non capisco il codice che lo contiene.

Domande simili sono state poste sul sito web forums.esri ma è stato più di 10 anni fa e non ha funzionato quando ho provato il codice.

Come creo un quadrato buffer da un elemento puntuale?

Commenti

  • gis.stackexchange.com/questions/12479 / … è essenzialmente un duplicato (perché affronta una generalizzazione di questa domanda), ma poiché ci sono già buone risposte qui specifiche per i buffer quadrati, sembra meglio per lasciare entrambi i thread aperti e separati anziché unirli. Ma se vuoi ancora più soluzioni, leggi anche laltro thread!
  • OK, grazie whuber. Ho appena trovato questo sito web ieri e ‘ mi sto ancora familiarizzando. ‘ cercherò di farlo con i miei futuri post / domande. ‘ mi piace questo sito molto meglio dei forum ArcGIS.
  • ‘ non intendevo quel commento come critica in ogni modo, Kimball: era lì per evitare di fondere i due thread, che ‘ è tutto. Benvenuto nella nostra comunità! (E per favore, parla di noi ai tuoi amici, specialmente a quelli sui forum di ArcGIS. 🙂
  • Giusto. So che ‘ non lo intendevi in quel modo. Mi piace molto questa community e ho già iniziato a parlare ad altri di questo nuovo forum.
  • Grazie per la tua significativa condivisione. Mi chiedo come posso utilizzare una serie di dati di campo nella funzione punto per creare buffer rettangolari utilizzando lo script fornito senza digitare manualmente le coordinate. Grazie

Risposta

Prova questi passaggi con ArcMap 10:

  1. Buffer la tua caratteristica punto (ArcToolbox> Strumenti di analisi> Prossimità> Buffer). Assicurati di selezionare la distanza corretta nella casella Unità lineare.
  2. Inserisci i buffer appena creati nello strumento Feature Envelope to Polygon (Data Strumenti di gestione> Funzioni> Da inviluppo di funzioni a poligono). Assicurati di selezionare la casella “Crea funzionalità multiparte” se hai più punti.

Per una soluzione Python:

Utilizzo di SearchCursor e InsertCursor per creare buffer quadrati

inserisci qui la descrizione dellimmagine

Commenti

  • +1 Le risposte che dimostrano che la soluzione funziona sono le migliori.

Risposta

Una possibile soluzione sarebbe quella di creare i tuoi buffer rotondi “normali” utilizzando lo strumento buffer ESRI standard con il raggio che desideri e quindi eseguire un Feature Envelope To Polygon sulla classe di buffer risultante. Questo crea una caratteristica di inviluppo quadrato attorno allestensione di ogni caratteristica. Linviluppo delle caratteristiche al poligono si trova in Gestione dati> Funzioni. Il modello del generatore di modelli sarebbe simile a:

inserisci qui la descrizione dellimmagine

Commenti

  • Ottima soluzione! Inoltre, creando loutput del buffer come livello in_memory (in_memory \ tmpBuffer) e puoi evitare di scrivere dati non necessari su disco e rendere il processo molto più veloce.

Risposta

Poiché lo script collegato alla fine del codice di Aaron può essere utilizzato solo per i buffer quadrati e non utilizza il nuovo modulo arcpy.da, “Ho scritto uno script che può essere utilizzato per creare buffer rettangolari. Su un set di dati di 10k punti casuali, è stato completato in 10 secondi:

inserisci la descrizione dellimmagine qui

 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)  

Risposta

Supponendo che tu stia utilizzando ArcObjects (utilizza i tag per specificare la lingua e lAPI che” stai utilizzando), potresti utilizzare IEnvelope.Expand per creare un buffer quadrato dalla busta di un punto, come in questo esempio: Ottieni tutte le funzioni dalla ricerca di punti in GeoFea tureLayer Snippet

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

Risposta

In alternativa alla risposta di Aaron, per coloro che non dispongono di una licenza avanzata, utilizza lo strumento Minimum Bounding Geometry . Passaggi di seguito (modificati da Aaron):

  1. Buffer la funzione del punto (ArcToolbox> Strumenti di analisi> Prossimità> Buffer). Assicurati di selezionare la distanza corretta nella casella Unità lineare.
  2. Immettere i buffer appena creati nello strumento Geometria di delimitazione minima (Strumenti di gestione dei dati> Funzioni> Geometria di delimitazione minima). Utilizza “RECTANGLE_BY_AREA” o “RECTANGLE_BY_WIDTH”, le altre opzioni sono disponibili solo con una licenza avanzata.

EDIT : questa opzione non consente di controllare lorientamento dei buffer quadrati risultanti, senza utilizzare lopzione” ENVELOPE “(che richiede una licenza avanzata). Selezionando” Aggiungi caratteristiche geometriche come attributi alloutput ( opzionale) “opzione: loffset risultante verrà registrato come” MBG_Orientation “nella classe di entità geografiche di output. Questo può quindi essere utilizzato per ruotare le funzionalità di nuovo al centro, se lo si desidera – vedere Rotazione poligoni in base al valore dalla tabella degli attributi utilizzando ArcPy? per una possibile soluzione a questo.

inserisci la descrizione dellimmagine qui

Commenti

  • Per la mia particolare classe di entità geografiche finisce per ruotare i quadrati in direzioni diverse utilizzando questo flusso di lavoro. Forse perché lho fatto cerchi tampone sovrapposti. Non è sicuro. Ho fatto utilizzare a Esri il metodo di Aaron ‘ sopra sulla mia stessa classe di entità geografiche e non ha ruotato i cerchi bufferizzati.
  • @Andrew, sì ‘ hai ragione, questa è una limitazione dello strumento senza una licenza avanzata. Lutilizzo dellopzione ENVELOPE restituirà lo stesso risultato del metodo di Aaron ‘ sopra, ma richiede anche una licenza avanzata. Una potenziale soluzione sarebbe spuntare lopzione ‘ aggiungi caratteristiche geometriche come attributi ‘ opzione, scoprire quanto sono inclinate (dovrebbe essere coerente ), quindi ruota i buffer quadrati risultanti di tale importo in una sessione di modifica. Non ‘ non ci hai ancora provato.

Rispondi

Questo site descrive come convertire csv in buffer quadrati o rettangolari o circolari utilizzando geographiclib JavaScript e js2shapefile.

Puoi dare unocchiata se risolve il tuo problema.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *