Négyzet alakú puffer létrehozása a pont körül az ArcGIS for Desktop használatával?

Szeretnék egy négyzet alakú puffert létrehozni egy pontfunkcióból, de nem értem a benne lévő kódot.

Hasonló kérdéseket tettek fel a forums.esri webhelyen, de ez több mint 10 évvel ezelőtt történt, és nem működött, amikor megpróbáltam a kódot.

Hogyan hozhatok létre négyzetet puffer egy pontfunkcióból?

Megjegyzések

  • gis.stackexchange.com/questions/12479 A / … lényegében másolat (mert ennek a kérdésnek az általánosításával foglalkozik), de mivel itt már vannak jó válaszok, amelyek kifejezetten a négyzet alakú pufferekre vonatkoznak, a legjobbnak tűnik hogy mindkét szál nyitva és külön maradjon, nem pedig összevonja őket. De ha még több megoldást szeretne, olvassa el a másik szálat is!
  • OK, köszönöm whuber. Tegnap éppen megtaláltam ezt a weboldalt, és ‘ még mindig ismerkedem vele. ‘ Megpróbálom ezt megtenni a jövőbeli bejegyzéseimmel / kérdéseimmel. ‘ sokkal jobban tetszik ez a webhely, mint az ArcGIS fórumai.
  • Nem gondoltam ‘ ezt a megjegyzést mint bármiféle kritika, Kimball: a két szál összevonásának megakadályozása érdekében ‘ mind. Üdvözöljük közösségünkben! (És kérjük, mondja el rólunk barátainak, különösen azoknak, akik az ArcGIS fórumain vannak. 🙂
  • Helyes. Tudom, hogy nem ‘ nem így gondolta. Nagyon élvezem ezt a közösséget, és már elkezdtem másoknak mesélni erről az új fórumról.
  • Köszönöm a jelentős részvételt. Kíváncsi vagyok, hogyan használhatnám a mezőadatok készletét a pont szolgáltatásban a téglalap pufferek létrehozásához a megadott szkript segítségével anélkül, hogy manuálisan beírnám a koordinátákat. Köszönet

Válasz

Próbálja ki ezeket a lépéseket az ArcMap 10 használatával:

  1. Puffer a ponttulajdonságod (ArcToolbox> Elemző eszközök> Közelség> Puffer). Ügyeljen arra, hogy a Lineáris egység mezőben válassza ki a megfelelő távolságot.
  2. Írja be az újonnan létrehozott puffereket a Feature Envelope to Polygon eszközbe (Adatok Kezelőeszközök> Szolgáltatások> Feature Envelope to Polygon). Ha több pontja van, ne felejtse el kiválasztani a “Többpartíciós szolgáltatások létrehozása” négyzetet.

Python megoldás esetén:

Szögletes pufferek létrehozása a SearchCursor és az InsertCursor használatával

ide írja be a kép leírását

Megjegyzések

  • +1 A legjobb megoldásokat bizonyító válaszok.

Válasz

Egy lehetséges megoldás az lenne, ha létrehozná a “normál” kerek puffereit a szokásos ESRI puffer eszköz használatával, tetszőleges sugárral, majd egy Feature Envelope To Polygon-t hajt végre az adott eredő buffer-osztályon. Ez négyzet alakú borítékjellemzőt hoz létre az egyes jellemzők kiterjedése körül. A Feature Envelope to Polygon az Adatkezelés> Szolgáltatások részben található. A modellépítő modell a következőhöz hasonlít:

írja ide a kép leírását

Megjegyzések

  • Kiváló megoldás! Ha a puffer kimenetét in_memory rétegként hozza létre (in_memory \ tmpBuffer), akkor elkerülheti a szükségtelen adatok lemezre írását, és sokkal gyorsabbá teheti a folyamatot.

Válasz

Mivel az Aaron kódjának végén linkelt szkript csak négyzet alakú pufferekhez használható, és nem használja az újabb arcpy.da modult, ezért “Írtál egy szkriptet, amely téglalappufferek létrehozására használható. Egy 10 ezer véletlenszerű adatkészleten 10 másodperc alatt elkészült:

ide írja be a kép leírását

 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)  

Válasz

Feltételezve, hogy ArcObjects-t használ (a címkék segítségével adja meg a használt nyelvet és API-t), használhatja a IEnvelope.Expand négyzet alakú puffer létrehozásához egy pont borítékából, mint ebben a példában: Az összes szolgáltatás letöltése a Pontkeresőből a GeoFea-ban tureLayer kivonat

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

Válasz

Aaron válaszának alternatívájaként azok számára, akik nem rendelkeznek Advanced licenccel, használja a Minimális határoló geometria eszközt . Az alábbi lépések (Aarontól módosítva):

  1. Puffer a ponttulajdonságod (ArcToolbox> Elemző eszközök> Közelség> Puffer). Ügyeljen arra, hogy a Lineáris egység mezőben válassza ki a megfelelő távolságot.
  2. Írja be újonnan létrehozott puffereit a Minimális határoló geometria eszközbe (Adatkezelő eszközök> Szolgáltatások> Minimális határoló geometria). Használja a “RECTANGLE_BY_AREA” vagy a “RECTANGLE_BY_WIDTH” alkalmazást, a többi lehetőség csak Speciális licenccel érhető el.

EDIT : Ez az opció nem teszi lehetővé a kapott négyzet alakú pufferek tájolásának vezérlését az” ENVELOPE “opció használata nélkül (amelyhez speciális licenc szükséges). A” Geometriai jellemzők hozzáadása attribútumként a kimenethez “jelölőnégyzet bejelölésével opcionális) “” opció – az eredményül kapott eltolást “MBG_Orientation” néven rögzítjük a kimeneti jellemzők osztályában. Ezután fel lehet használni a funkciókat, ha szükséges, vissza a középre – lásd Forgatás sokszögek az attribútumtáblázat értékével az ArcPy használatával? ennek lehetséges megoldására.

írja be a kép leírását itt

Megjegyzések

  • Sajátos jellemzői osztályomnál ez a munkafolyamat segítségével végül a négyzeteket különböző irányokba forgatja. Talán azért, mert van átfedő pufferkörök. Nem biztos. Esri használta Aaron ‘ s fenti módszert ugyanazon funkcióosztályomon, és nem forgatta el a pufferelt köröket.
  • @Andrew, yep you ‘ igaza van, ez az eszköz korlátozása Fejlett licenc nélkül. Az ENVELOPE opció használata ugyanazt az eredményt adja, mint Aaron ‘ fenti módszere, de emellett speciális licencre van szüksége. Egy lehetséges megoldás az, ha bejelöli a ‘ geometriai jellemzők hozzáadása attribútumként ‘ opciót, megtudja, mennyit döntöttek (konzisztensnek kell lenniük) ), majd egy szerkesztési munkamenetben forgassa el a kapott négyzet alakú puffereket ennyivel. Haven ‘ még nem próbálta ezt meg.

Válasz

Ez A webhely leírja, hogyan lehet konvertálni a csv-t négyzet vagy téglalap vagy kör pufferekké a geographiclib JavaScript és a js2shapefile használatával.

Megnézheti, ha megoldja a problémád.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük