Opretter du firkantet buffer omkring punktfunktion ved hjælp af ArcGIS for Desktop?

Jeg vil gerne oprette en firkantet buffer fra en punktfunktion, men jeg forstår ikke koden, der ligger i den.

Lignende spørgsmål er blevet stillet på forums.esri-webstedet, men det var for over 10 år siden, og det fungerede ikke, da jeg prøvede koden.

Hvordan opretter jeg en firkant buffer fra en punktfunktion?

Kommentarer

  • gis.stackexchange.com/questions/12479 / … er i det væsentlige et duplikat (fordi det adresserer en generalisering af dette spørgsmål), men da der allerede er gode svar her, der er specifikke for firkantede buffere, synes det bedst at lade begge tråde være åbne og adskilte i stedet for at flette dem. Men hvis du ønsker endnu flere løsninger, skal du også læse den anden tråd!
  • OK tak whuber. Jeg fandt netop dette websted i går, og jeg ‘ bliver stadig fortrolig med det. Jeg ‘ Jeg prøver at gøre det med mine fremtidige indlæg / spørgsmål. Jeg ‘ kan godt lide dette websted meget bedre end ArcGIS-foraene.
  • Jeg mente ikke ‘ t mener den kommentar som kritik på nogen måde, Kimball: det var der for at forhindre fletning af de to tråde, at ‘ er alt. Velkommen til vores samfund! (Og fortæl venligst dine venner om os, især dem på ArcGIS-foraene. 🙂
  • Højre. Jeg ved, at du ikke ‘ ikke mente det på den måde. Jeg nyder dette samfund meget og er allerede begyndt at fortælle andre om dette nye forum.
  • Tak for din betydelige andel. Jeg spekulerer på, hvordan jeg kan bruge et sæt feltdata i punktfunktion til at oprette rektangelbuffere ved hjælp af det script, du giver, uden manuelt at skrive deres koordinater. Tak

Svar

Prøv disse trin med ArcMap 10:

  1. Buffer din punktfunktion (ArcToolbox> Analyseværktøjer> Nærhed> Buffer). Sørg for at vælge den korrekte afstand i feltet Lineær enhed.
  2. Indtast dine nyoprettede buffere i værktøjet Feature Envelope to Polygon (Data Management Tools> Features> Feature Envelope to Polygon). Sørg for at markere feltet “Opret multpart-funktioner”, hvis du har flere punkter.

For en Python-løsning:

Brug af SearchCursor og InsertCursor til at oprette firkantede buffere

indtast billedebeskrivelse her

Kommentarer

  • +1 Svar, der viser, at løsningen fungerer, er de bedste.

Svar

En mulig løsning ville være at oprette dine “normale” runde buffere ved hjælp af standard ESRI-bufferværktøjet med den radius, du ønsker, og derefter udføre en Feature Envelope To Polygon på den resulterende funktionsklasse af buffere. Dette skaber en firkantet konvolutfunktion omkring omfanget af hver funktion. Feature Envelope to Polygon er placeret i Data Management> Features. Modelbygger-modellen ligner:

indtast billedbeskrivelse her

Kommentarer

  • Fremragende løsning! Også ved at oprette output fra bufferen som et in_memory-lag (in_memory \ tmpBuffer), og du kan undgå at skrive unødvendige data til disken og gøre processen meget hurtigere.

Svar

Da scriptet, der er linket i slutningen af Arons kode, kun kan bruges til firkantede buffere og ikke benytter det nyere arcpy.da-modul, bruger jeg “har skrevet et script, der kan bruges til at oprette rektangelbuffere. På et 10k tilfældigt punktdatasæt afsluttede det på 10 sekunder:

indtast billedbeskrivelse her

 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)  

Svar

Hvis du antager, at du bruger ArcObjects (brug venligst tags til at specificere det sprog og API, som du bruger), kan du bruge IEnvelope.Expand for at oprette en firkantet buffer fra en punkts konvolut, som i dette eksempel: Få alle funktioner fra punktsøgning i GeoFea tureLayer-kodestykke

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

Svar

Som et alternativ til Arons svar, brug værktøjet Minimum Bounding Geometry til dem uden avanceret licens . Trin nedenfor (ændret fra Aaron):

  1. Buffer din punktfunktion (ArcToolbox> Analyseværktøjer> Nærhed> Buffer). Sørg for at vælge den rigtige afstand i feltet Lineær enhed.
  2. Indtast dine nyoprettede buffere i værktøjet Minimumsbegrænsningsgeometri (Datastyringsværktøjer> Funktioner> Minimumsbegrænsningsgeometri). Brug “RECTANGLE_BY_AREA” eller “RECTANGLE_BY_WIDTH”, de andre muligheder er kun tilgængelige med en avanceret licens.

EDIT : Denne indstilling lader dig ikke styre orienteringen af de resulterende firkantede buffere uden brug af” ENVELOPE “(som kræver en avanceret licens). Ved at markere” Tilføj geometriegenskaber som attributter til output valgfri) “option – den resulterende offset vil blive optaget som” MBG_Orientation “i outputfunktionsklassen. Dette kan derefter bruges til at rotere funktionerne tilbage til midten, hvis det ønskes – se Roterende polygoner efter værdi fra attributttabellen ved hjælp af ArcPy? for en mulig løsning på det.

indtast billedbeskrivelse her

Kommentarer

  • For min særlige funktionsklasse ender det med at rotere firkanterne i forskellige retninger ved hjælp af denne arbejdsgang. Måske fordi jeg har gjort det overlappende buffercirkler. Ikke sikker. Jeg fik Esri til at bruge Aaron ‘ s metode ovenfor på min samme funktionsklasse, og den roterede ikke de bufrede cirkler.
  • @Andrew, ja, du ‘ har ret, det er en begrænsning af værktøjet uden en avanceret licens. Brug af indstillingen ENVELOPE ville returnere det samme resultat som Aaron ‘ metode ovenfor, men har også brug for en avanceret licens. En mulig løsning ville være at markere ‘ tilføje geometriegenskaber som attributter ‘, finde ud af det beløb, de er vippet (skal være ensartede ), og drej derefter de resulterende firkantede buffere med det beløb i en redigeringssession. Havner ‘ t prøvede dette endnu.

Svar

Dette site beskriver, hvordan man konverterer csv til firkantede eller rektangulære eller cirkelbuffere ved hjælp af geografisklib JavaScript og js2shapefile.

Du kan se, om det løser dit problem.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *