Vytváření čtvercového bufferu kolem bodu pomocí ArcGIS pro Desktop?

Chtěl bych vytvořit hranatý buffer z bodového prvku, ale nerozumím kódu, který do něj vstupuje.

Podobné otázky byly položeny na webu forums.esri, ale to bylo před více než 10 lety a při pokusu o kód to nefungovalo.

Jak vytvořím čtverec vyrovnávací paměť z bodového prvku?

Komentáře

  • gis.stackexchange.com/questions/12479 / … je v podstatě duplikát (protože řeší zevšeobecnění této otázky), ale protože zde již existují dobré odpovědi, které jsou specifické pro čtvercové vyrovnávací paměti, zdá se být nejlepší ponechat obě vlákna otevřená a oddělená, spíše než jejich slučování. Pokud ale chcete ještě více řešení, přečtěte si i druhé vlákno!
  • Dobře, díky whuberovi. Právě jsem včera našel tento web a stále se s ním ‚ seznamuji. ‚ Pokusím se o to se svými budoucími příspěvky / dotazy. ‚ se mi tento web líbí mnohem lépe než ve fórech ArcGIS.
  • Nechtěl jsem ‚ tento komentář říct jako kritika jakýmkoli způsobem, Kimball: bylo to tam, aby se zabránilo sloučení dvou vláken, to vše ‚. Vítejte v naší komunitě! (A prosím, řekněte o nás svým přátelům, zejména těm na fórech ArcGIS. 🙂
  • Správně. Vím, že jste to tak nemysleli ‚. Tato komunita se mi moc líbí a už jsem o tomto novém fóru začal vyprávět ostatním.
  • Děkuji vám za váš významný podíl. Zajímalo by mě, jak mohu pomocí sady dat pole v bodové funkci vytvořit obdélníkové vyrovnávací paměti pomocí skriptu, který zadáte, aniž byste ručně zadali jejich souřadnice. Děkujeme

Odpověď

Zkuste tyto kroky s ArcMap 10:

  1. Vyrovnávací paměť váš bodový prvek (ArcToolbox> Analytické nástroje> Blízkost> Vyrovnávací paměť). Nezapomeňte vybrat správnou vzdálenost v poli Lineární jednotka.
  2. Vložte své nově vytvořené vyrovnávací paměti do nástroje Obálka prvku na polygon (Data Nástroje pro správu> Funkce> Obálka prvku na mnohoúhelník). Pokud máte více bodů, nezapomeňte zaškrtnout políčko „Vytvořit vícedílné funkce“.

U řešení v Pythonu:

Použití nástrojů SearchCursor a InsertCursor k vytvoření čtvercových vyrovnávacích pamětí

zde zadejte popis obrázku

Komentáře

  • +1 Odpovědi, které ukazují, že řešení funguje, jsou nejlepší.

Odpověď

Možným řešením by bylo vytvořit „normální“ kulaté vyrovnávací paměti pomocí standardního nástroje pro vyrovnávací paměti ESRI s libovolným poloměrem, který chcete, a poté provést obálku prvku do polygonu v této výsledné třídě funkcí vyrovnávacích pamětí. Tím se vytvoří prvek čtvercové obálky kolem rozsahu každého prvku. Obálka prvku do polygonu se nachází v části Správa dat> Funkce. Model nástroje pro vytváření modelů by vypadal podobně jako:

zde zadejte popis obrázku

Komentáře

  • Vynikající řešení! Také vytvořením výstupu vyrovnávací paměti jako vrstvy in_memory (in_memory \ tmpBuffer) se můžete vyhnout zápisu nepotřebných dat na disk a zrychlit proces.

Odpověď

Protože skript propojený na konci Aaronova kódu lze použít pouze pro čtvercové vyrovnávací paměti a nevyužívá novější modul arcpy.da, „Napsal jsem skript, který lze použít k vytvoření vyrovnávacích pamětí obdélníku. U datové sady s náhodným bodem 10k se to dokončilo za 10 sekund:

zde zadejte popis obrázku

 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)  

Odpovědět

Za předpokladu, že používáte ArcObjects (použijte prosím tagy k určení jazyka a API, které používáte), můžete použít IEnvelope.Expand k vytvoření čtvercové vyrovnávací paměti z obálky bodu, jako v tomto příkladu: Získejte všechny funkce z bodového vyhledávání v GeoFea tureLayer Snippet

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

Odpovědět

Jako alternativu k Aaronově odpovědi pro ty, kteří nemají licenci Advanced, použijte nástroj Minimum Bounding Geometry . Kroky níže (upravené od Aarona):

  1. Vyrovnávací paměť vaše bodová funkce (ArcToolbox> Analytické nástroje> Blízkost> Vyrovnávací paměť). Nezapomeňte vybrat správnou vzdálenost v poli Lineární jednotka.
  2. Zadejte své nově vytvořené vyrovnávací paměti do nástroje Minimum Bounding Geometry (Nástroje pro správu dat> Funkce> Minimum Bounding Geometry). Použijte „RECTANGLE_BY_AREA“ nebo „RECTANGLE_BY_WIDTH“, ostatní možnosti jsou k dispozici pouze s licencí Advanced.

EDIT : Tato možnost vám neumožňuje ovládat orientaci výsledných čtvercových vyrovnávacích pamětí, aniž byste použili možnost„ OBÁLKA “(která vyžaduje licenci Advanced). Zaškrtnutím políčka„ Přidat geometrické charakteristiky jako atributy k výstupu ( nepovinné) „volba – výsledný offset bude ve třídě výstupních prvků zaznamenán jako“ MBG_Orientation „. To lze poté použít k otočení prvků zpět do středu, pokud je to požadováno – viz Otáčení polygony podle hodnoty z tabulky atributů pomocí ArcPy? pro potenciální řešení.

zadat popis obrázku zde

Komentáře

  • U mé konkrétní třídy prvků to pomocí tohoto pracovního postupu skončí rotací čtverců v různých směrech. Možná proto, že mám překrývající se kruhy vyrovnávací paměti. Nejsem si jistý. Esri jsem použil Aaron ‚ s výše uvedenou metodu na stejnou třídu funkcí a neotočil kruhy s vyrovnávací pamětí.
  • @Andrew, jo ‚ máte pravdu, to je omezení nástroje bez pokročilé licence. Použití možnosti ENVELOPE by vrátilo stejný výsledek jako výše uvedená metoda Aaron ‚, ale také potřebuje Pokročilou licenci. Potenciálním řešením by bylo zaškrtnout možnost ‚ přidat vlastnosti geometrie jako atributy ‚ a zjistit, nakolik jsou nakloněny (mělo by to být konzistentní ), pak v editační relaci otočte výsledné čtvercové vyrovnávací paměti o tuto částku. Haven ‚ jsme to ještě nezkoušeli.

Odpovědět

Toto web popisuje, jak převést csv na čtvercové, obdélníkové nebo kruhové vyrovnávací paměti pomocí geograficlib JavaScript a js2shapefile.

Můžete se podívat, jestli to vyřeší váš problém.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *