Haluaisin luoda neliöpuskurin pisteominaisuudesta, mutta en ymmärrä siihen menevää koodia.
Samanlaisia kysymyksiä on esitetty forums.esri -sivustolla, mutta se oli yli 10 vuotta sitten, eikä se toiminut, kun yritin koodia.
Kuinka luon neliön puskuri pisteominaisuudesta?
Kommentit
- gis.stackexchange.com/questions/12479 / … on pääosin kaksoiskappale (koska se käsittelee tämän kysymyksen yleistystä), mutta koska täällä on jo hyviä vastauksia, jotka ovat ominaisia neliöpuskureille, se näyttää parhaalta jättää molemmat ketjut avoimiksi ja erillisiksi yhdistämisen sijaan. Mutta jos haluat vielä enemmän ratkaisuja, lue myös toinen säie!
- OK kiitos whuber. Löysin juuri eilen tämän verkkosivuston eilen ja tutustun siihen vielä ’. ’ Yritän tehdä sen tulevilla viesteilläni / kysymyksillä. Minusta ’ tykkään tästä sivustosta paljon paremmin kuin ArcGIS-foorumeilla.
- En tarkoittanut ’ tarkoittavan tätä kommenttia millään tavalla kritiikkinä, Kimball: se oli siellä, jotta estettäisiin kahden säikeen yhdistäminen, että ’ kaikki. Tervetuloa yhteisöömme! (Ja kerro ystävillesi meistä, etenkin ArcGIS-foorumeilla oleville. 🙂
- Oikein. Tiedän, ettet tarkoittanut sitä ’. Nautin tästä yhteisöstä paljon ja olen jo alkanut kertoa muille tästä uudesta foorumista.
- Kiitos merkittävästä osuudestasi. Mietin, kuinka voin käyttää kenttätietoja pisteominaisuudessa luomaan suorakulmapuskureita antamallasi komentosarjalla kirjoittamatta niiden koordinaatteja manuaalisesti. Kiitos
Vastaa
Kokeile näitä vaiheita ArcMap 10: n kanssa:
- Puskuroi pisteominaisuutesi (ArcToolbox> Analyysityökalut> Läheisyys> Puskuri). Varmista, että valitset oikean etäisyyden Lineaarinen yksikkö -ruudusta.
- Syötä uudet luodut puskurit Feature Envelope to Polygon -työkaluun (Data Hallintatyökalut> Ominaisuudet> Feature Envelope to Polygon). Varmista, että valitset Luo moniosaiset ominaisuudet -ruutu, jos sinulla on useita pisteitä.
Python-ratkaisu:
Neliön muotoisten puskurien luominen SearchCursorin ja InsertCursorin avulla
kommentit
- +1 Vastaukset, jotka osoittavat ratkaisun toimivan parhaiten.
Vastaa
Mahdollinen ratkaisu olisi luoda ”normaalit” pyöreät puskurisi käyttämällä tavallista ESRI-puskurityökalua haluamallasi säteellä ja suorittaa sitten Feature Envelope To Polygon kyseiselle ominaisuusluokan puskureille. Tämä luo neliön kirjekuoren ominaisuuden kunkin ominaisuuden laajuuteen. Feature Envelope to Polygon sijaitsee kohdassa Data Management> Features. Mallinrakennusmalli näyttäisi samanlaiselta kuin:
kommentit
- Erinomainen ratkaisu! Luomalla myös puskurin ulostulo in_memory-kerrokseksi (in_memory \ tmpBuffer) voit välttää tarpeettoman tiedon kirjoittamisen levylle ja nopeuttaa prosessia.
Vastaus
Koska Aaronin koodin loppuun linkitettyä komentosarjaa voidaan käyttää vain neliöpuskureissa eikä siinä käytetä uudempaa arcpy.da-moduulia, I ”Olemme kirjoittaneet komentosarjan, jota voidaan käyttää suorakulmapuskurien luomiseen. 10 kt: n satunnaispistetiedostossa se valmistui 10 sekunnissa:
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)
vastaus
Olettaen, että käytät ArcObjectsia (määritä käyttämäsi kieli ja sovellusliittymä tagien avulla), voit käyttää IEnvelope.Expand
neliöpuskurin luomiseksi pisteen kirjekuoresta, kuten tässä esimerkissä: Hae kaikki ominaisuudet GeoFean pistehausta tureLayer Snippet
ESRI.ArcGIS.Geometry.IEnvelope envelope = point.Envelope; envelope.Expand(searchTolerance, searchTolerance, false);
Vastaa
Vaihtoehtona Aaronin vastaukselle, niille, joilla ei ole Advanced-lisenssiä, käytä Minimi rajaava geometria -työkalua . Alla olevat vaiheet (muokattu Aaronilta):
- Puskuri pisteominaisuutesi (ArcToolbox> Analyysityökalut> Läheisyys> Puskuri). Varmista, että valitsit oikean etäisyyden Lineaarinen yksikkö -ruudusta.
- Syötä äskettäin luodut puskurisi Rajaavan geometrian vähimmäisväline -työkaluun (Tiedonhallintatyökalut> Ominaisuudet> Pienin rajoittava geometria). Käytä ”RECTANGLE_BY_AREA” tai ”RECTANGLE_BY_WIDTH”, muut vaihtoehdot ovat käytettävissä vain Advanced-lisenssillä.
EDIT : Tämä vaihtoehto ei anna sinun hallita tuloksena olevien neliöpuskurien suuntaa käyttämättä vaihtoehtoa” YMPÄRISTÖ ”(joka vaatii edistyneen lisenssin). Valitsemalla” Lisää geometriset ominaisuudet attribuutteina lähtöön ( valinnainen) ”option” – tuloksena oleva siirtymä kirjataan ”MBG_Orientation” -lähtöominaisuusluokkaan. Tätä voidaan sitten käyttää kiertämään ominaisuuksia takaisin keskelle haluttaessa – katso Kierto polygonit arvon mukaan attribuuttitaulukosta ArcPy-sovelluksella? mahdolliseen ratkaisuun.
Kommentit
- Oman ominaisuusluokkanani se päätyy pyörittämään neliöitä eri suuntiin tämän työnkulun avulla. Ehkä siksi, että minulla on päällekkäiset puskuripiirit. Epävarma. Sain Esrin käyttämään Aaron ’ -menetelmää yllä ominaisuusluokassani, eikä se kiertänyt puskuroituja piirejä.
- @Andrew, jep ’ on oikeassa, se on työkalun rajoitus ilman lisälisenssiä. ENVELOPE-vaihtoehdon käyttäminen palauttaisi saman tuloksen kuin Aaron ’ -menetelmä yllä, mutta tarvitsee myös lisälisenssin. Mahdollinen kiertotapa olisi merkitä ’ lisätä geometriset ominaisuudet attribuutteina ’ -vaihtoehto, selvittää niiden kallistama määrä (pitäisi olla johdonmukainen ), kierrä sitten saatuja neliöpuskureita tällä määrällä editointiistunnossa. Haven ’ ei ole vielä kokeillut tätä.
Vastaa
Tämä -sivustossa kerrotaan, kuinka csv voidaan muuntaa neliö- tai suorakulmio- tai ympyräpuskureiksi käyttämällä geographiclib JavaScriptia ja js2shapefile.
Voit katsoa, ratkaiseeko se. ongelmasi.