Aș dori să creez un tampon pătrat dintr-o caracteristică punct, dar nu înțeleg codul care intră în ea.
Întrebări similare au fost adresate pe site-ul forums.esri, dar asta a fost acum peste 10 ani și nu a funcționat când am încercat codul.
Cum creez un pătrat buffer dintr-o caracteristică punct?
Comentarii
- gis.stackexchange.com/questions/12479 / … este în esență un duplicat (deoarece abordează o generalizare a acestei întrebări), dar, deoarece există deja răspunsuri bune care sunt specifice tampoanelor pătrate, pare cel mai bine să lase ambele fire deschise și separate, mai degrabă decât să le îmbine. Dar dacă doriți încă mai multe soluții, citiți și celălalt fir!
- OK, mulțumesc whuber. Tocmai am găsit acest site ieri și ‘ încă mă familiarizez cu el. ‘ voi încerca să fac asta cu viitoarele mele postări / întrebări. ‘ îmi place acest site mult mai bine decât forumurile ArcGIS.
- Nu ‘ nu am însemnat acel comentariu ca critică în vreun fel, Kimball: a fost acolo pentru a împiedica îmbinarea celor două fire, ceea ce ‘ este tot. Bine ați venit în comunitatea noastră! (Și vă rugăm să spuneți prietenilor dvs. despre noi, în special cei de pe forumurile ArcGIS. 🙂
- Bine. Știu că nu ‘ nu ai spus-o așa. Mă bucur foarte mult de această comunitate și am început deja să le spun altora despre acest nou forum.
- Vă mulțumim pentru partea dvs. semnificativă. Mă întreb cum pot folosi un set de date de câmp în caracteristică punct pentru a crea tampoane dreptunghiulare folosind scriptul pe care îl furnizați fără să tastați manual coordonatele lor. Mulțumim
Răspuns
Încercați acești pași cu ArcMap 10:
- Buffer caracteristica punctului dvs. (ArcToolbox> Instrumente de analiză> Proximitate> Buffer). Asigurați-vă că ați selectat distanța corectă în caseta Unitate liniară.
- Introduceți tampoanele nou create în instrumentul Plic de caracteristici către poligon (Date Instrumente de gestionare> Caracteristici> Plic caracteristică la poligon). Asigurați-vă că selectați caseta „Creați caracteristici multipart” dacă aveți mai multe puncte.
Pentru o soluție Python:
Utilizarea SearchCursor și InsertCursor pentru a crea tampoane pătrate
Comentarii
- +1 Răspunsurile care demonstrează că soluția funcționează sunt cele mai bune.
Răspuns
O posibilă soluție ar fi să vă creați tampoane rotunde „normale” utilizând instrumentul tampon ESRI standard cu orice rază doriți și apoi să efectuați un plic de caracteristici către poligon pe acea clasă de caracteristici rezultată de tampoane. Acest lucru creează o caracteristică plic pătrat în jurul extinderii fiecărei caracteristici. Plic de caracteristici pentru poligon se află în Gestionarea datelor> Caracteristici. Modelul constructor de model ar arăta similar cu:
Comentarii
- Soluție excelentă! De asemenea, prin crearea ieșirii bufferului ca strat in_memory (in_memory \ tmpBuffer) și puteți evita scrierea datelor inutile pe disc și puteți face procesul mult mai rapid.
Răspuns
Deoarece scriptul legat la sfârșitul codului lui Aaron poate fi utilizat doar pentru tampoane pătrate și nu folosește modulul arcpy.da mai nou, eu „Am scris un script care poate fi utilizat pentru a crea tampoane dreptunghiulare. Pe un set de date cu 10 puncte aleatorii, acesta s-a finalizat în 10 secunde:
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ăspuns
Presupunând că utilizați ArcObjects (utilizați etichetele pentru a specifica limba și API-ul pe care îl utilizați), puteți utiliza IEnvelope.Expand
pentru a crea un tampon pătrat dintr-un plic punct, ca în acest exemplu: Obțineți toate caracteristicile din Căutarea punctelor în GeoFea Fragment tureLayer
ESRI.ArcGIS.Geometry.IEnvelope envelope = point.Envelope; envelope.Expand(searchTolerance, searchTolerance, false);
Răspuns
Ca alternativă la răspunsul lui Aaron, pentru cei fără o licență avansată, utilizați instrumentul Geometria minimă de limitare . Pașii de mai jos (modificat din Aaron):
- Buffer caracteristica punctului dvs. (ArcToolbox> Instrumente de analiză> Proximitate> Buffer). Asigurați-vă că selectați distanța corectă în caseta Unitate liniară.
- Introduceți tampoanele nou create în instrumentul Geometrie minimă de limitare (Instrumente de gestionare a datelor> Caracteristici> Geometrie minimă de limitare). Utilizați „RECTANGLE_BY_AREA” sau „RECTANGLE_BY_WIDTH”, celelalte opțiuni sunt disponibile numai cu o licență avansată.
EDIT : Această opțiune nu vă permite să controlați orientarea tampoanelor pătrate rezultate, fără a utiliza opțiunea” ENVELOPE „(care necesită o licență avansată). Bifând„ Adăugați caracteristici geometrice ca atribute la ieșire ( opțional) „opțiune – compensarea rezultată va fi înregistrată ca” MBG_Orientation „în clasa de caracteristici de ieșire. Aceasta poate fi apoi utilizată pentru a roti caracteristicile înapoi la centru, dacă se dorește – consultați poligoane după valoarea din tabelul de atribute folosind ArcPy? pentru o soluție potențială la asta.
Comentarii
- Pentru clasa mea particulară de caracteristici se termină prin rotirea pătratelor în direcții diferite folosind acest flux de lucru. Poate pentru că am suprapunerea cercurilor tampon. Nu sunt sigur. L-am pus pe Esri să folosească metoda Aaron ‘ de mai sus pe aceeași clasă de caracteristici și nu a rotit cercurile tamponate.
- @Andrew, da este corect, adică o limitare a instrumentului fără o licență avansată. Folosirea opțiunii ENVELOPE ar întoarce același rezultat ca și metoda Aaron ‘ de mai sus, dar are nevoie și de o licență avansată. O soluție potențială ar fi să bifați opțiunea ‘ adăugați caracteristici geometrice ca atribute ‘, să aflați cantitatea în care sunt înclinate (ar trebui să fie consecventă) ), apoi rotiți tampoanele pătrate rezultate cu acea cantitate într-o sesiune de editare. ‘ nu am încercat încă acest lucru.
Răspuns
Acest lucru site descrie cum să convertiți csv în pătrate sau dreptunghiuri sau tampoane de cercuri folosind JavaScript geografic și js2shapefile.
Puteți arunca o privire dacă se rezolvă problema ta.