Een vierkante buffer maken rond een puntobject met ArcGIS for Desktop?

Ik zou graag een vierkante buffer willen maken van een puntobject, maar ik begrijp de code die erin zit niet.

Soortgelijke vragen zijn gesteld op de forums.esri-website, maar dat was meer dan 10 jaar geleden, en het werkte niet toen ik de code probeerde.

Hoe maak ik een vierkant buffer vanaf een puntfunctie?

Reacties

  • gis.stackexchange.com/questions/12479 / … is in wezen een duplicaat (omdat het een generalisatie van deze vraag behandelt), maar aangezien er hier al goede antwoorden zijn die specifiek zijn voor vierkante buffers, lijkt dit het beste om beide threads open en gescheiden te laten in plaats van ze samen te voegen. Maar als je nog meer oplossingen wilt, lees dan ook de andere thread!
  • Oké, bedankt. Ik heb deze website gisteren net gevonden en ik ‘ ben er nog steeds mee vertrouwd. Ik ‘ zal proberen dat te doen met mijn toekomstige berichten / vragen. Ik ‘ vind deze site veel leuker dan de ArcGIS-forums.
  • Ik bedoelde die opmerking niet ‘ als kritiek op wat voor manier dan ook, Kimball: het was er om te voorkomen dat de twee threads werden samengevoegd, dat ‘ alles is. Welkom bij onze community! (En vertel alstublieft uw vrienden over ons, vooral degenen op de ArcGIS-forums. 🙂
  • Juist. Ik weet dat je het niet ‘ zo bedoelde. Ik geniet veel van deze community en ben al begonnen anderen over dit nieuwe forum te vertellen.
  • Bedankt voor je aanzienlijke aandeel. Ik vraag me af hoe ik een set veldgegevens in puntfunctie kan gebruiken om rechthoekige buffers te maken met behulp van het script dat u opgeeft, zonder hun coördinaten handmatig in te voeren. Bedankt

Antwoord

Probeer deze stappen met ArcMap 10:

  1. Buffer uw puntobject (ArcToolbox> Analysehulpmiddelen> Nabijheid> Buffer). Zorg ervoor dat u de juiste afstand selecteert in het vak Lineaire eenheid.
  2. Voer uw nieuw gemaakte buffers in de tool Feature Envelope to Polygon in (Data Management Tools> Features> Feature Envelope to Polygon). Zorg ervoor dat je het vakje “Creëer meerpartijen kenmerken” aanvinkt als je meerdere punten hebt.

Voor een Python-oplossing:

SearchCursor en InsertCursor gebruiken om vierkante buffers te maken

voer hier een afbeeldingsbeschrijving in

Reacties

  • +1 antwoorden die aantonen dat de oplossing werkt, zijn de beste.

Antwoord

Een mogelijke oplossing zou zijn om uw “normale” ronde buffers te maken met behulp van de standaard ESRI-buffertool met elke gewenste straal en vervolgens een Feature Envelope To Polygon uit te voeren op die resulterende feature-klasse van buffers. Dit creëert een vierkant omhullend kenmerk rond de omvang van elk kenmerk. Feature Envelope to Polygon bevindt zich in Gegevensbeheer> Functies. Het modelbouwer-model zou er ongeveer zo uitzien:

voer hier de beschrijving van de afbeelding in

Opmerkingen

  • Uitstekende oplossing! Door de uitvoer van de buffer te creëren als een in_memory-laag (in_memory \ tmpBuffer), kun je voorkomen dat onnodige gegevens naar schijf worden geschreven, en kun je het proces veel sneller maken.

Antwoord

Aangezien het script dat aan het einde van de code van Aaron is gelinkt, alleen gebruikt kan worden voor vierkante buffers en geen gebruik maakt van de nieuwere arcpy.da module, heb ik “heb een script geschreven dat kan worden gebruikt om rechthoekige buffers te maken. Op een gegevensset van 10.000 willekeurige punten was deze in 10 seconden voltooid:

voer hier een afbeeldingsbeschrijving in

 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)  

Antwoord

Ervan uitgaande dat u” ArcObjects “gebruikt (gebruik de tags om de taal en API te specificeren die u” gebruikt), kunt u om een vierkante buffer te maken uit de envelop van een punt, zoals in dit voorbeeld: Haal alle functies van Point Search in GeoFea tureLayer Snippet

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

Antwoord

Als alternatief voor het antwoord van Aaron, voor degenen zonder een geavanceerde licentie, gebruik de Minimum Bounding Geometry tool . Stappen hieronder (gewijzigd van Aaron):

  1. Buffer uw puntobject (ArcToolbox> Analysis Tools> Proximity> Buffer). Zorg ervoor dat u de juiste afstand selecteert in het vak Lineaire eenheid.
  2. Voer uw nieuw gemaakte buffers in de tool Minimum begrenzende geometrie in (Tools voor gegevensbeheer> Functies> Minimum begrenzende geometrie). Gebruik “RECTANGLE_BY_AREA” of “RECTANGLE_BY_WIDTH”, de andere opties zijn alleen beschikbaar met een geavanceerde licentie.

EDIT : Met deze optie kunt u de oriëntatie van de resulterende vierkante buffers niet bepalen, zonder de optie” ENVELOP “te gebruiken (waarvoor een geavanceerde licentie vereist is). Door de optie” Geometrie-eigenschappen als attributen aan uitvoer ( optional) “option – de resulterende offset wordt geregistreerd als” MBG_Orientation “in de output feature class. Dit kan vervolgens worden gebruikt om de features desgewenst terug naar het midden te draaien – zie Rotating polygonen op waarde uit attributentabel met ArcPy? voor een mogelijke oplossing daarvoor.

voer een afbeeldingsbeschrijving in hier

Reacties

  • Voor mijn specifieke feature class draait het de vierkanten in verschillende richtingen met behulp van deze workflow. Misschien omdat ik heb overlappende buffercirkels. Niet zeker. Ik liet Esri de methode van Aaron ‘ hierboven gebruiken voor mijn zelfde feature class en het draaide de gebufferde cirkels niet.
  • @Andrew, ja jij ‘ klopt, dat is een beperking van de tool zonder een geavanceerde licentie. Het gebruik van de ENVELOPE-optie zou hetzelfde resultaat opleveren als de methode van Aaron ‘ hierboven, maar heeft ook een geavanceerde licentie nodig. Een mogelijke oplossing zou zijn om de ‘ geometrie-eigenschappen toe te voegen als attributen ‘ optie aan te vinken en uit te zoeken hoeveel ze zijn gekanteld (moet consistent zijn ) en roteer vervolgens de resulterende vierkante buffers met dat aantal in een bewerkingssessie. Haven ‘ t heeft dit al geprobeerd.

Antwoord

Dit site beschrijft hoe csv naar vierkante of rechthoekige of cirkelbuffers kan worden geconverteerd met behulp van geographiclib JavaScript en js2shapefile.

Je kunt kijken of het oplost uw probleem.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *