Mer

Sjekker du om polygon passer inn i en annen polygon ved hjelp av ArcGIS Desktop?


Hvordan sjekker jeg om en polygon passer inne i en annen polygon? Videre hvordan sjekker jeg automatisk om en polygon passer inn i andre polygoner i min formfil?

Jeg har en formfil med tusenvis av forskjellige polygoner, hver oppført i attribusjonslisten med sin egen ID (de er enkeltpartier, ikke flerdelte). Polygonene har en ikke-vanlig form. Nå vil jeg sjekke hvilken av disse polygonene som passer til en bestemt annen polygon (det er en sirkel med en bestemt diameter). Jeg trenger bare de polygonene inne i min formfil som denne sirkelen passer inn i. Bakgrunn (bruk i den virkelige verden): Jeg søker etter (geotermiske) steder der jeg vil installere en rigg (med sikkerhetsavstander). Så hvis det er områder hvor jeg ikke kan plassere boreriggen min inkl. sikkerhetsavstanden har jeg ikke bruk for dette området.

En idé var å bruke det geometriske midtpunktet, legge sirklene og polygonene midt i midten og se om de kantene overlapper. Feil idé siden den geometriske midpoit er feil tilgang allerede. Polygonene har veldig rare former, kan være veldig lange med et stort tips eller hva som helst. Her ville det geometriske midtpunktet være et sted inne i eller til og med utenfor den lange delen av polygonen, sirkelen ville ikke passe, men på spissen ville den faktisk passe.

Har du noen ide om hvordan jeg kan behandle automatisk? I utgangspunktet trenger jeg bare å sortere ut de polygonene der sirkelen min/den andre polygonen ikke passer. Bryr meg ikke om godkjenningen er for vektor eller raster (vektor ville være fint, men jeg kan alltid transformere), for ArcGIS Desktop.

Illustrasjon som nedenfor: I hvilke polygoner passer ikke sirkelen?


Jeg bruker vektor og raster tilnærming for å løse det. Skriptet nedenfor har 3 inngangsparametere: a) polygoner (må være en enkelt del), b) utgangspunktets funksjonsklasse for å lagre punktene som er mest fjernt fra polygongrensen c) toleranse i kartenheter.

Algoritme:

POLYGON = formgeometri

  1. beregne sentroid av POLYGON (p1)
  2. Definer avstanden fra sentrum til polygonskissen
  3. Buffer omrisset over avstand og trekk det fra polygon
  4. Beregn sentrum av største gjenværende polygon (p2)
  5. Break (p2 er vårt punkt, avstanden er vår radius) hvis avstanden mellom p1 og p2 <= toleranse
  6. POLYGON = polygon. Gå til 1

Ideen lånt hvis minnet tjener fra et veldig gammelt innlegg av @whuber.

importere arcpy, traceback, os, sys fra arcpy import env env.overwriteOutput = True infc = arcpy.GetParameterAsText (0) outfc = arcpy.GetParameterAsText (1) tolerance = float (arcpy.GetParameterAsText (2) infc) SR = d.spatialReference try: def showPyMessage (): arcpy.AddMessage (str (time.ctime ()) + " -" + melding) theFolder, theFile = os.path.split (outfc) arcpy.CreateFeatureclass_management (theMapder , theFile, "POINT", infc, "DISABLED", "DISABLED", SR) arcpy.AddField_management (outfc, "theDist", "DOUBLE") shapefield, fidName = d.ShapeFieldName, d.OIDFieldName fileds2add = [] fields = [f.navn for f i arcpy.ListFields (infc)] for f i felt: hvis f ikke er i (shapefield, fidName, "Shape_Length", "Shape_Area"): fileds2add.append (f) tbl = arcpy.da.TableToNumPyArray (infc, fileds2add) nF = len (tbl) arcpy.SetProgressor ("trinn", "", 0, nF, 1) arcpy.AddMessage ("Oppretter poeng ...") fileds2add = ["[email protected]", "theDist"] +fileds2add curT = arcpy.da.InsertCursor (outfc, fileds2add) theM = 0 med arcpy.da.SearchCursor (infc, " [email protected]") som rader: for rad i rader: feat = rad [0]; prt = feat.getPart (0) feat = arcpy.Polygon (prt, SR) outLine = feat.boundary (); pSave = feat.trueCentroid d = outLine.distanceTo (pSave) if d <= tolerance: break while (True): theLine = feat.boundary () p = feat.labelPoint d = theLine.distanceTo (p) try: buf = theLine .buffer (d) unntatt: pSave = feat.labelPoint break intR = feat.difference (buf) n = intR.partCount; aMax = 0 for i i xrange (n): prt = intR.getPart (i) pgon = arcpy. Polygon (prt, SR) aCur = pgon.area if aCur> aMax: aMax = aCur; feat = pgon pN = feat.labelPoint d = arcpy.PointGeometry (p) .distanceTo (pN) if d <= tolerance: pSave = pN ; break d = outLine.distanceTo (pSave) theRow = [pSave, d]; theP = list (tbl [theM]) theRow+= theP curT.insertRow (theRow) theM+= 1 arcpy.SetProgressorPosition () del tbl unntatt: melding = " n *** PYTHON FEIL ***"; showPyMessage () melding = "Python Traceback Info:" + traceback.format_tb (sys.exc_info () [2]) [0]; showPyMessage () melding = "Python -feilinfo:" + str (sys.exc_type) + ":" + str (sys.exc_value) + " n"; showPyMessage ()

Script legger til feltet theDist to point -tabellen så vel som alle synlig attributtene til funksjonsklassen polygoninngang. Bruk denne avstanden til å lage relevant buffer rundt poeng, eller bare velg punktene som har theDist <= terskelen din.

Legg merke til at den er veldig treg (10 polygoner som en på bildet per sekund). Prøv på valg og bruk rimelig toleranse.

Det er en raskere rasterløsning:

  1. Konverter polygoner til konturer
  2. Beregn euklidisk avstand
  3. Konverter polygoner til raster
  4. Beregn sonestatistikk (maks)
  5. Raster kalkulator Con (abs (distanse-maks)
  6. Konverter til poeng
  7. Romlig sammenføyning til polygoner og fjern duplikater av punkter. Rasterverdifeltet i punkter er radius på maks sirkel for å passe inn i din polygon. Kontroll presisjon etter cellestørrelse, fungerer ikke for overlappende polygoner

OPPDATERING november 2016 Skriptet nedenfor er endring av originalen. Den håndterer doughnutpolygoner og fungerer litt raskere, omtrent 25 polygoner/sekund:

importere arcpy, traceback, os, sys fra arcpy import env env.overwriteOutput = True infc = arcpy.GetParameterAsText (0) outfc = arcpy.GetParameterAsText (1) tolerance = float (arcpy.GetParameterAsText (2) infc) SR = d.spatialReference try: def showPyMessage (): arcpy.AddMessage (str (time.ctime ()) + " -" + melding) theFolder, theFile = os.path.split (outfc) arcpy.CreateFeatureclass_management (theMapder , theFile, "POINT", infc, "DISABLED", "DISABLED", SR) arcpy.AddField_management (outfc, "theDist", "DOUBLE") shapefield, fidName = d.ShapeFieldName, d.OIDFieldName fileds2add = [] fields = [f.navn for f i arcpy.ListFields (infc)] for f i felt: hvis f ikke er i (shapefield, fidName, "Shape_Length", "Shape_Area"): fileds2add.append (f) tbl = arcpy.da.TableToNumPyArray (infc, fileds2add) nF = len (tbl) arcpy.SetProgressor ("trinn", "", 0, nF, 1) arcpy.AddMessage ("Oppretter poeng ...") fileds2add = ["[email protected]", "theDist"] +fileds2add curT = arcpy.da.InsertCursor (outfc, fileds2add) med arcpy.da.SearchCursor (infc, "[email protected]" ) som rader: for m, rad i enumerate (rader): feat = rad [0] outLine = feat.boundary () pSave = feat.labelPoint d = outLine.distanceTo (pSave) mens (True): theLine = feat.boundary () p = feat.labelPoint dist = theLine.distanceTo (p) prøve: buf = feat.buffer (-dist) unntatt: pSave = feat.labelPoint break try: pN = buf.labelPoint unntatt: pN = feat.labelPoint d = arcpy.PointGeometry (p) .distanceTo (pN) hvis d <= toleranse: pSave = pN; break feat = buf d = outLine.distanceTo (pSave) theRow = [pSave, d]; theP = list (tbl [m]) theRow+= theP curT.insertRow (theRow) arcpy.SetProgressorPosition () del tbl unntatt: melding = " n *** PYTHON FEIL ***"; showPyMessage () melding = "Python Traceback Info:" + traceback.format_tb (sys.exc_info () [2]) [0]; showPyMessage () melding = "Python -feilinfo:" + str (sys.exc_type) + ":" + str (sys.exc_value) + " n"; showPyMessage ()

I motsetning til GODTAGET SVAR denne prosessen vurderer HULL inne i polygonene. f.eks. Hvis du bruker godtatt svar så blir det feil der det finnes hull som bildet nedenfor!


Hvis jeg har deg, vil du sjekke om sirkelen din kan skrives inne i polygonene. Du kan gjøre det i ETGEOWIZARD, et arcmap -tillegg, (se bildene nedenfor) for disse polygonene og skille de maksimale innskrevne sirklene har et område større enn eller lik arealet til den medfølgende sirkelen-Du kan bruke Velg etter attributt for å skille disse sirklene (> = eksempelsirkelområdet), generere sentroid av de valgte sirklene og kjøre Velg etter sted for å velge den polygonen som krysser med tidligere valgte sirkelsenter.Det går tross alt fort.

N.B. Jeg er ikke tilknyttet noen programvare


I ArcGIS:

  • Foren de to funksjonsklassene (FC), la oss si at FC1 er hoved -FC og FC2 er FC du tester for å se om den passer.
  • Beregn sammendragsstatistikk med statistikkfelt som min for FID for FC1 og saksfelt er FID for FC2.
  • Bli med den resulterende tabellen tilbake til FC2.
  • Velg etter attributter der FREQUENCY = 1 og MIN FID for FC1> -1.


Her er en løsning på QGIS (hvis jeg skjønte deg riktig)

Du bør først kopiere laget ditt,
installer deretter pluginet kalt spatial request: docs

Du kan nå gjøre de vanlige GIS -tingene, dvs.
velg funksjoner som er helt i en annen funksjon, ect ... se innlegget fra Slslam!

Denne pluginen vil velge disse funksjonene. Hvis du vil lagre dem i et annet lag, bruker du bare lagrede lag!

Håper det hjelper


For grafikk foretrekker jeg helst ikke heltall. Mange systemer bruker heltall for UI -maleri (piksler er tross alt ints), men for eksempel bruker macOS float for alt. macOS kjenner bare poeng, og et punkt kan oversettes til en piksel, men avhengig av skjermoppløsning kan det oversette til noe annet. På netthinneskjermer er et halvt punkt (0,5/0,5) piksel. Likevel la jeg aldri merke til at macOS -brukergrensesnitt er betydelig tregere enn andre brukergrensesnitt. Tross alt fungerer 3D APIer (OpenGL eller Direct3D) også med flyter og moderne grafikkbibliotek bruker ofte GPU -akselerasjon.

Nå sa du at hastigheten er din viktigste bekymring, ok, la oss gå for fart. Før du kjører en sofistikert algoritme, må du først gjøre en enkel test. Lag en akselinjert avgrensningsboks rundt polygonen din. Dette er veldig enkelt, raskt og kan allerede sikre deg mange beregninger. Hvordan fungerer det? Iterer over alle punkter i polygonen og finn min/maks -verdiene til X og Y.

F.eks. du har poengene (9/1), (4/3), (2/7), (8/2), (3/6). Dette betyr at Xmin er 2, Xmax er 9, Ymin er 1 og Ymax er 7. Et punkt utenfor rektanglet med de to kantene (2/1) og (9/7) kan ikke være innenfor polygonen.

Dette er den første testen som kjøres for et hvilket som helst punkt. Som du kan se, er denne testen ekstremt rask, men den er også veldig grov. For å håndtere punkter som er innenfor rektangelet, trenger vi en mer sofistikert algoritme. Det er et par måter hvordan dette kan beregnes. Hvilken metode som fungerer, avhenger også av om polygonen kan ha hull eller alltid vil være solid. Her er eksempler på solide (en konveks, en konkav):

Og her er en med et hull:

Den grønne har et hull i midten!

Den enkleste algoritmen, som kan håndtere alle tre sakene ovenfor, og som fortsatt er ganske rask, er navngitt stråling. Ideen om algoritmen er ganske enkel: Tegn en virtuell stråle fra hvor som helst utenfor polygonen til poenget ditt og tell hvor ofte den treffer en side av polygonen. Hvis antall treff er jevnt, er det utenfor polygonen, hvis det er rart, er det inne.

De algoritme for svingete tall ville være et alternativ, er det mer nøyaktig for punkter som er veldig nær en polygonlinje, men det er også mye tregere. Strålestøping kan mislykkes for punkter for nær en polygonside på grunn av begrenset flytpunktspresisjon og avrundingsproblemer, men i virkeligheten er det neppe et problem, som om et punkt ligger så nær en side, er det ofte visuelt ikke engang mulig for en seeren for å gjenkjenne om den allerede er inne eller fortsatt utenfor.

Du har fremdeles begrensningsboksen ovenfor, husker du? Bare velg et punkt utenfor grenseboksen og bruk det som utgangspunkt for strålen din. F.eks. punktet (Xmin - e/p.y) er sikkert utenfor polygonen.

Men hva er e? Vel, e (faktisk epsilon) gir avgrensningsboksen litt polstring. Som sagt mislykkes strålesporing hvis vi starter for nær en polygonlinje. Siden avgrensningsboksen kan være lik polygonen (hvis polygonen er et aksejustert rektangel, er avgrensningsboksen lik polygonen selv!), Trenger vi litt polstring for å gjøre dette trygt, det er alt. Hvor stor bør du velge e? Ikke for stort. Det avhenger av koordinatsystemskalaen du bruker for tegning. Hvis piksel trinnbredden din er 1,0, så er det bare å velge 1,0 (likevel ville 0,1 også ha fungert)

Nå som vi har strålen med start- og sluttkoordinater, skifter problemet fra "er punktet i polygonen" til "hvor ofte skjærer strålen en polygonside". Derfor kan vi ikke bare jobbe med polygonpunktene som før, nå trenger vi de faktiske sidene. En side er alltid definert av to punkter.

Du må teste strålen mot alle sider. Tenk på strålen som en vektor og hver side som en vektor. Strålen må treffe hver side nøyaktig en gang eller aldri i det hele tatt. Den kan ikke treffe samme side to ganger. To linjer i 2D -rom krysser alltid nøyaktig en gang, med mindre de er parallelle, i så fall krysser de aldri. Siden vektorer har en begrenset lengde, er det imidlertid ikke sikkert at to vektorer er parallelle og krysser hverandre aldri fordi de er for korte til å møte hverandre.

Så langt så bra, men hvordan tester du om to vektorer krysser hverandre? Her er noen C -kode (ikke testet), som burde gjøre susen:

Inngangsverdiene er to endepunkter av vektor 1 (v1x1/v1y1 og v1x2/v1y2) og vektor 2 (v2x1/v2y1 og v2x2/v2y2). Så du har 2 vektorer, 4 poeng, 8 koordinater. JA og NEI er klare. JA øker kryss, NEI gjør ingenting.

Hva med COLLINEAR? Det betyr at begge vektorene ligger på den samme uendelige linjen, avhengig av posisjon og lengde, krysser de ikke i det hele tatt eller krysser dem i et uendelig antall punkter. Jeg er ikke helt sikker på hvordan jeg skal håndtere denne saken, jeg vil ikke regne det som kryss uansett. Vel, denne saken er ganske sjelden i praksis uansett på grunn av flytende punkts avrundingsfeil bedre kode ville sannsynligvis ikke testet for == 0.0f, men i stedet for noe som & lt epsilon, hvor epsilon er et ganske lite tall.

Hvis du trenger å teste et større antall poeng, kan du sikkert fremskynde det hele litt ved å beholde de lineære ligningsstandardformene til polygonsidene i minnet, slik at du ikke trenger å beregne disse på nytt hver gang. Dette vil spare deg for to flytende punktmultiplikasjoner og tre flytende punkts subtraksjoner på hver test i bytte mot å lagre tre flytepunktverdier per polygonside i minnet. Det er en typisk minne vs beregningstid.

Sist men ikke minst: Hvis du kan bruke 3D -maskinvare for å løse problemet, er det et interessant alternativ. Bare la GPU gjøre alt arbeidet for deg. Lag en maleroverflate som er utenfor skjermen. Fyll den helt med fargen svart. La nå OpenGL eller Direct3D male polygonen din (eller til og med alle polygonene dine hvis du bare vil teste om punktet er innenfor noen av dem, men du bryr deg ikke om hvilken) og fyll polygonen (e) med en annen farge, f.eks hvit. For å sjekke om et punkt er innenfor polygonen, får du fargen på dette punktet fra tegneoverflaten. Dette er bare en O (1) minnehenting.

Selvfølgelig er denne metoden bare brukbar hvis tegneoverflaten ikke trenger å være stor. Hvis den ikke får plass i GPU -minnet, er denne metoden tregere enn å gjøre det på CPU -en. Hvis det må være stort og GPU -en din støtter moderne shaders, kan du fortsatt bruke GPU -en ved å implementere ray casting vist ovenfor som en GPU -skyggelegger, noe som absolutt er mulig. For et større antall polygoner eller et stort antall poeng å teste, vil dette lønne seg. Tenk på at noen GPUer vil kunne teste 64 til 256 poeng parallelt. Vær imidlertid oppmerksom på at overføring av data fra CPU til GPU og tilbake alltid er dyrt, så for bare å teste et par poeng mot et par enkle polygoner, hvor enten punktene eller polygonene er dynamiske og vil endres ofte, vil en GPU -tilnærming sjelden betale av.


Jeg kvier meg for å legge ut dette som et svar, men det vil ikke passe i kommentarene. I GIS -verden blir dette noen ganger referert til som voronoi -algoritme. De fleste GIS -verktøy, som ESRI ArcMap, kan generere veronoi -polgoner fra et sett med punkter. For ditt brukstilfelle tror jeg at du kan lage et veronoi -polygonsett fra poengene dine ved å bruke pakken i lenken nedenfor (det er kompatibelt), deretter ta den utgangen og gjøre litt fancy romlig sammenføyning for å erstatte polygonen din med flere polygoner.

Her er en lenke til wikipedia -siden som beskriver konseptet

også delaunoy triangulering er en annen tilnærming du kanskje vil se på

her er en annen lenke som har st_veronoi -funksjonen nevnt med en lenke til ovennevnte. http://www.spatialdbadvisor.com/source_code/223/geoprocessing-package-documentation

grunnlaget for denne pakken ser ut til å være java JTS, som tilsynelatende blir kompilert i java lagrede prosesser i oracle. JTS er "standarden" for geometrioperasjoner i Java. Jeg tror jeg skal prøve det selv.

Husk at jeg bare har gjort dette ved hjelp av et verktøy som ArcGIS, og ikke brukt noe jeg nevnte ovenfor. så HTH og jeg leder deg ikke ned i et rottehull.

Jeg kan ikke gi deg et navn, men kan beskrive tre forskjellige algoritmer

Jeg kommer til å kalle settet med poeng du får "mål" for å forenkle løsningen min fordi jeg vil kalle vilkårlige steder på sletten "punkter":

Du kommer til å gjøre mye aritmetikk på 2-vektorer

algoritmen min for å dele polygonen er enkel: finn det nærmeste målet.

settet med punkter nærmest et mål vil ha rette kanter. toppunktene vil være like langt fra tre (eller flere) av målene (eller være der kanten krysser grensepolygonen),

algoritmen din kan se slik ut:

kryss det opprinnelige settet med mål to ganger for å lage et sett med tripler som avviser de som ikke klarer tre forskjellige mål.

for hvert sett med tre finner punktet like langt fra alle tre målene hvis det punktet er nærmere et annet mål, avviser det.

til slutt har du (høyst) n-2 hjørner, så trenger du bare finne ut hvordan kantene henger sammen. som du kan gjøre dette ved å se på hvilke mål som skapte hvert toppunkt.

nå må du legge til kantene som ender i det uendelige, ta et kryss av mål og seg selv og finne halvveis mellom hvert par mål, alle punkter som ikke har to nærmeste mål kan forkastes, hver av disse pontene representerer en linje (vinkelrett halveringslinje), og den vil ende med en toppunkt eller uendelig

til slutt trimme kartet ved hjelp av grensepolygonen, kan det være lurt å slippe en av kantene fra ethvert fragment som ikke inneholder et mål

på den annen side kan du bruke en fraktal partisjoneringsordning for å dele polygonen i biter som deler hver del mindre til den inneholder en enkelt polygon, resultatene blir mindre estetisk tiltalende, men utseende var ikke et designkrav AFAICT.

f.eks. fraktalkartleggingen som brukes for IP -adresser.

deretter å ha konvertert koordinater til tall i dele dette i biter på praktiske punkter, (IE ved å slippe unødvendige etterfølgende 1 -er)

måle omfanget av sett med mål hvis det er bredere enn det er høyt, tegne en linje vertikalt som deler den i to andre trekke horisontalt. Hvis den opplyste varmen, justerer en av målene den slik at den går glipp av.

gjenta for hver halvdel til extet er null (som betyr et enkelt punkt)


Pakkedatamodellen - typer eierskap

I forrige uke så vi på pakkedatamodellen, en omfattende måte å lagre og administrere informasjon om landbøker som deler lagene med data, eller "Typer" i to forskjellige klasser: de typene som definerer hvordan landene "deles eller deles" og de typene som definerer de forskjellige formene for land "eierskap". La oss fortsette vår anmeldelse ved å utforske eierskapstyper.

Eierskapet "Bundle of Rights"

Eierskapstyper

De resterende polygontypene i pakkedatamodellen dekker de forskjellige måtene hvor land kan eies. Den følgende diskusjonen er ikke ment å være en avhandling om grunneierskap i USA, men en generalisert diskusjon om hvordan disse eierforholdene lagres med pakkedatamodellen.

Eierinteresser i USA er ikke en enkelt rettighet, men blir ofte referert til som en "Bundle of Rights". Som sådan kan man ha et flertall av rettighetene (dette blir ofte referert til som "honorar enkelt eierskap", eller en enkelt midlertidig eller permanent rettighet.

Type 7 - Rett til å betale skatt - Skattepakker

Den første eierskapstypen som er lagret i pakkedatamodellen er ment å lagre og administrere informasjon om "retten til å betale skatt". Dette er polygontypen som oftest er kartlagt og vedlikeholdt av eiendomsvurderingsbyråer (assessorer) kontorer gjennom landet. En generell misforståelse fra allmennheten likestiller disse pakkene med "eierskap" til pakkene, uten å innse at disse polygonene representerer skatteplikten, eller de eiendommene som det betales verdier for og som ikke representerer sant eierskap. Dette gjelder spesielt når det er langsiktige leieinteresser som kontraktuelt har vært forpliktet til å betale skatter på disse landområdene under leie (tenk kjøpesentre, etc.)

Type 8 - Gebyr Enkelt eierskap - Eierskapspakker

Den andre eierskapstypen og den åttende polygontypen i pakkedatamodellen er ment å lagre og administrere gebyr enkelt eierskap. Spesielt brukes dette ofte til å kartlegge og vedlikeholde overflaterettigheter og verken undergrunnsrettigheter som mineraler eller gass eller luftromrettigheter. Selv om de fleste byråer for øyeblikket ikke oppbevarer informasjon om disse eierskapene, ser jeg for meg at det blir stadig viktigere.

Type 9 - Mindre enn gebyr Enkelt eierskap - Heftelser

Den neste eierskapstypen er Encumbrances. Black's Law definerer heftelser som bruksrett over eiendommen av en annen. I denne forstand kan enhver bruk av eiendommen av andre enn avgiften enkel grunneier betraktes som en heftelse. Heftelser er ofte begrensninger i bruken av landet av gebyret enkelt eier. Ulike typer beheftelser inkluderer: veierettigheter eller servitutter, drenerings- eller flytnings servitutter, bevarings servitutter, fiske servitutter, beiterettigheter eller nytte servitutter.

Type 10 - Separerte rettigheter

Den neste eierskapstypen er Separated Rights. Som nevnt i matrikkelinformasjonsstandarden for nasjonal romlig datainfrastruktur: atskilte rettigheter er rettigheter og interesser i grunneierskap som kan kobles fra primær- eller avgiftsenkelt overflateierskap. For eksempel skilles mineral- og oljerettigheter ofte fra overflateierskapet.

Type 11 - Andre rettigheter

Den siste polygontypen er ment å dekke de andre eierinteressene som ikke passer inn i noen av de andre polygontypene.

I løpet av de to siste blogginnleggene har vi undersøkt de forskjellige polygon "Typer" i Pakkedatamodellen som ble brukt av ArcGIS Pakkeredigeringsløsning (tidligere referert til som Pakkestoffet.) Jeg håper dette hjelper deg å forstå måten Pakkedata på Modell brukes.


ArcGIS -oppgave - kan noen hjelpe?

Hei alle! Jeg må gjøre noen øvelser med data jeg har fått fra universitetet. Jeg klarte å lage et av de tre kartene, men jeg holdt fast ved det andre. Jeg lurer på om du kan hjelpe meg. Oppgaven er som følger: Lag et kart som viser skogsområdet for hver administrativ region i Bayern (i 5% trinn). Legg også til et diagram som viser fordelingen av de forskjellige skogtypene (bartrær, lauv og blandet) for HVER region.

Dataene jeg har består av: --- & gt en allerede georeferert polygonformfil av Bayern og den har forskjellige regioner (som du kan se her: http://imgur.com/a/3DqSF) --- & gt en annen polygon shapefile som inneholder alle de skogkledde områdene (som du kan se her: http://imgur.com/a/D0ght: de overlapper hverandre. De passer ikke alle inn i polygonen i delstaten Bayern, muligens fordi jeg ikke gjorde det georeferanse optimalt. Jeg antar at det ikke spiller noen rolle. I attributttabellen til vegetasjonspolygonen viser feltet#x27CODE_06 ' 311 (løvfellende), 312 (begrensende) eller 313 (blandet).

Tips jeg har fått er å bruke verktøyet 'tabulate veikryss ' for den første delen av øvelsen. For den andre delen må jeg bruke verktøyet 'tabulate area ' Jeg vet ikke hvordan jeg skal bruke disse verktøyene, og hva jeg skal velge og hvordan jeg deretter kan visualisere det. Kan dere hjelpe meg?


En ny metode for å estimere den romlige korrelasjonen mellom planlagt og faktisk patchsprøyting av ugressmidler

On/off patch spraying basert på ugresskart brukes i stedsspesifikk ugressbehandling. To forutsetninger for å realisere lappesprøyting er nøyaktig ugressoppdagelse og målretting av ugressmidler på ugressplaster. Det er mye i litteraturen om deteksjon av ugress, men lite oppmerksomhet er blitt gitt til den romlige nøyaktigheten av påføring av ugressmiddel. Denne studien ble utført for å vurdere i hvilken grad patch-sprayede herbicider er målrettet nøyaktig i henhold til forhåndslastede reseptkart og for å evaluere en ny romlig vurderingsmetode. Den nye metoden besto av sprøyting med rødt Ponceau 4R -fargestoff, ubemannet luftfartøy (UAV) -bilder og romlig bildeanalyse basert på et geografisk informasjonssystem (GIS). Det sprøytede fargestoffet var tydelig synlig i luftbilder og plasseringene til de sprøytede områdene ble sammenlignet med stedene gitt av reseptkartene. Fire forskjellige kommersielle sprøyter med bombreddsbredde i området 0,5 til 3 m og kjørehastighet i området 2,5 til 8 km h −1 ble brukt i ti forsøk. Alle forsøkene ble utført om høsten på stubbemarker. Resultatene viste at den nye metoden var rask og pålitelig. Det feil sprøytede området utenfor målområder på reseptkart var i gjennomsnitt 81% for tre forskjellige sprøyter med 3 m bomdeler, og 5% for en sprøyte med 0,5 m bomdeler (individuell sprøytedysekontroll). Målområdene som ikke ble sprøytet innenfor de planlagte ugressplastområdene var i gjennomsnitt 6% av det forhåndsdefinerte lappearealet for sprøyter med 3 m bomdeler og 14% for sprøyten med 0,5 m bomdeler. Denne studien avslørte at sprøyten med 0,5 m bomdeler hadde en kontroller som ikke var rask nok til å åpne og lukke sprøytedyser ved normal kjørehastighet. Loggfiler fra sprøytekonsollen overvurderte det sprøytede området med 24% og var mindre nøyaktige enn den romlige analysen av de sprøytede områdene.

Dette er en forhåndsvisning av abonnementsinnhold, tilgang via institusjonen din.


Kildediagram

Et kildediagram kan brukes til å avgrense hvor batymetriske, topografiske eller andre navigasjonsdata kommer fra. Kildediagrammet består av generaliserte versjoner av landområdene, grafiske linjer som avgrenser kildestrekninger og bokstaver som korrelerer området til kilden. Følgende trinn forklarer hvordan du bruker det eksisterende landdekningslaget, samt en tidligere versjon av kildediagrammet.

Opprette en annotasjonsfunksjonsklasse

Du kan velge å lage grafisk tekst i stedet for å lage en annotasjonsfunksjonsklasse for å lagre etikettene for kildediagrammet. I så fall kan du hoppe over dette trinnet.

  1. Start ArcCatalog.
  2. Bla til produktdatabasen.
  3. Bla til datasettet for CartographicFeatures -funksjonen, og klikk for å velge det.
  4. Høyreklikk på datasettet, og klikk deretter Ny & gt Feature Class.
  5. Skriv inn et navn, for eksempel Diagrams_Anno, eller et annet navn for funksjonsklassen Kildediagram -annotering i tekstboksen Navn.
  6. Klikk på Type funksjoner som er lagret i rullegardinpilen for denne funksjonsklassen, og velg Kommentarfunksjoner.
  7. Klikk Neste.
  8. Velg referanseskalaen til kildediagrammet.
  9. La enheter stå som standard.
  10. Klikk Neste.
  11. Klikk på Gi nytt navn og skriv Kildediagramannotering for det nye navnet.
  12. Endre skrift og størrelse om nødvendig.
  13. Klikk Neste.
  14. Bruk standardalternativet.
  15. La alle feltene stå igjen.
  16. Klikk på Fullfør.

Opprette et rutenett

Følgende trinn beskriver prosessen som kreves for å lage et rutenett for et kildediagram.

Hvis dialogboksen ArcMap - Komme i gang vises, kan du åpne et nytt eller eksisterende kartdokument. Du kan også merke av for Ikke vis denne dialogboksen i fremtiden og klikke Åpne.

Dette er NaturalFeaturesA for ENC -data

Referanseskalaen må være en tidel av hovedpanelet. For eksempel vil et diagram med skalaen 1: 25 000 ha et kildediagram med en skala på 1: 250 000.

En trevisning av produktbiblioteket vises.

Vinduet ArcToolbox vises.

Gjenta alle trinnene for å lage rutenettene for kildediagrammet med følgende modifikasjoner.

Verktøyet Make Grids and Graticules Layer krever at du har et funksjonsdatasett som du kan skrive utdata til. Du må kanskje opprette et funksjonsdatasett i produktdatabasen før du fortsetter.

Denne XML er bare et eksempel og må kanskje justeres for skalaen på diagrammet.

Hvis du bruker et versjonert miljø, må du forene og legge ut til standardversjonen.

Generaliserende funksjoner

Fordi kildediagrammet bare er en tiendedel av skalaen på diagrammet det representerer, må du generalisere lagene som brukes i kildediagrammet. Følgende trinn beskriver prosessen for generalisering av funksjoner for et kildediagram.

  1. Endre kartet til Datavisning.
  2. Fra Velg -menyen, velg Velg etter attributter.
  3. Klikk på rullegardinpilen Lag og velg NaturalFeaturesA (eller polygonfunksjonsklasse for områdeområde).
  4. Klikk på rullegardinpilen Metode og velg Opprett et nytt utvalg.
  5. Velg FCSubtype fra listen og dobbeltklikk på den slik at den vises i uttrykksboksen.
  6. Klikk likhetstegnet (=) slik at det vises i tekstboksen for uttrykket.
  7. Klikk på Få unike verdier.
  8. Dobbeltklikk på 5 - LNDARE_LandArea slik at uttrykket nå leser FCSubtype = 5.

Du kan skrive uttrykket hvis du allerede kjenner den numeriske verdien og har riktig avstand.

Dialogboksen Bekreftende uttrykk vises.

Alle landområder er nå valgt, og dialogboksen lukkes.

Søkevinduet vises.

Dialogboksen Forenkle polygon vises.

Hvis du for eksempel bruker funksjonsklassen NaturalFeaturesA polygon, kaller du den nye utgangsfunksjonsklassen NaturalFeaturesA_Gen eller NaturalFeaturesA_SD.

For eksempel vil et diagram på 1: 25 000 skala bruke 300–500 meter.

Verktøyet kan kjøres flere ganger hvis resultatene ikke er det resultatet du ønsker.

Dette vil tillate polygoner som kollapser på seg selv når de blir generalisert, til å bli poeng. Disse punktene opprettes deretter i en ny funksjonsklasse, lagret på samme nivå som angitt av utgangsfunksjonsklassen.

Hvis verktøyet kjøres flere ganger, og med samme utgangsfunksjonsklasse valgt, vil det overskrive de eksisterende polygonene i den funksjonsklassen, ikke vedlegge den.

Alt som gjenstår er rutenettene og de generaliserte landområdets polygonlag.

Hvis du ikke hadde selvkryssende polygoner, hopper du over neste avsnitt, Manuelt generering av kildediagrampolygoner, og fortsetter med symbolisering av kildediagramfunksjoner. Hvis du imidlertid hadde polygoner som krysser seg selv, kan du fortsette med å generere kildediagrampolygoner manuelt for å finne ut hvilke polygonfunksjoner som kan forårsake problemet.

Hvis du bruker et versjonert miljø, må du forene og poste til standardversjonen, og du må registrere som versjonert den nyopprettede funksjonsklassen (e).

Manuell generering av kildediagrampolygoner

Denne delen er valgfri. Når du arbeider med svært detaljerte storskala data, kan forenklingspolygon-geoprosesseringsverktøyet resultere i selvkryssende polygoner, noe som vil føre til at verktøyet mislykkes. I dette tilfellet følger du trinnene nedenfor for å generere kildediagramdata. Hvis verktøyet Simplify Polygon geoprosessering kjører uten feil i Generaliseringsfunksjoner, hopper du over dette trinnet og går videre til Symboliserer kildediagramfunksjoner.

  1. Hvis mulig, bestem hvilke polygonfunksjoner som får verktøyet til å mislykkes, og kjør prosessen Generalizing Features på alle NaturalFeaturesA -funksjoner med et SQL -utvalgssett av FCSubtype = 5 og en ekstra setning ekskludert den / de krenkende polygonen.
  2. Om nødvendig kan du legge til funksjonsklassen fra utdataene fra Simplify Polygon -verktøyet og NaturalFeaturesA -funksjonsklassene til ArcMap, og plassere NaturalFeaturesA -polygonen under funksjonsklassen Kildediagram.
  3. Set a definition query on the NaturalFeaturesA feature class by opening the Feature Layer Properties dialog box, clicking the Definition Query tab and typing FCSubtype = 5 , so that you only see the Land Area features.
  4. Click the Production Start Editing button on the Production Editing toolbar.

The Manage Features and Create Attributes , Update Attributes , or Metadata Attributes windows automatically appear when you start an edit session using the Production Start Editing tool.

If the Create Attributes , Update Attributes , or Metadata Attributes window does not appear when you start an edit session, click the Show/Hide Attributes button on the Manage Features window.

Symbolizing Source Diagram features

  1. Klikk på knappen Legg til data and add the generalized Source Diagram land areas polygon feature class to the Table of Contents twice.
  2. Change the symbology for the generalized land areas so that
  • One layer is symbolized with a fill color that matches the Agency Standard for land tint and no outline color.
  • The other layer is symbolized with no color for the fill and the Agency Standard for coastline for the outline color.

The Manage Features and Create Attributes , Update Attributes , or Metadata Attributes windows automatically appear when you start an edit session using the Production Start Editing tool.

If the Create Attributes , Update Attributes , or Metadata Attributes window does not appear when you start an edit session, click the Show/Hide Attributes button on the Manage Features window.

What was entered in the toolbar will appear where the mouse is clicked, (not the word "Text")

The geodatabase becomes uneditable. If you have made edits, you will be prompted to save the changes if you want.

It will be added to the final layout in the next section. If using a versioned environment, you will need to reconcile and post to the Default version.

Adding the Source Diagram to the product map document

Now that the Source Diagram has been created, it needs to be added to the product map document through the following steps.

  1. Start ArcMap and open the saved Source Diagram map document.
  2. If working in an enterprise environment such as the NIS, click the List By Source button in the Table Of Contents window and ensure that all layers point to an editing version.
  3. From the Source Diagram map document, in the Table of Contents window, click the List By Drawing Order button .
  4. Right-click Layers on the Table of Contents window and click Copy .
  5. Start a second ArcMap session.
  6. Open the main chart panel map document in the second session.
  7. If necessary, switch to Layout View in the product map document.
  8. Click the Edit menu and click Paste .
  9. Once the data frame has properly pasted, close the Source Diagram map document without saving.
  10. Rename the newly pasted data frame Source Diagram in the product map document Table Of Contents window.
  11. If necessary, activate the Source Diagram data frame (right-click and click Activate ).
  12. If necessary, click the Select Elements button on either the Tools or Draw toolbar.
  13. Drag the Source Diagram data frame to an uncluttered area of the chart.
  14. Resize the data frame to be just a few points (roughly 1 mm) larger than the actual Source Diagram.
  • When selected, grab one of the corner handles and hold down the SHIFT + ALT keys to maintain aspect ratio and to keep the data frame centered.
  • You may need to use the standard Pan tool on the Tools toolbar to recenter the data frame over the Source Diagram.

Gis developers: What do you usually do in your current position?

What skills would you recommend to an aspiring gis dev to attain?

Python, HTML and if you work for the government reddit

GIS is all about web these days. I would recommend really understanding front and back end web development.

What are the current ways of doing web gis? So I can avoid being left behind.

Customer Service skills. I know it sounds stupid, but understanding what the customer is requesting, realizing what they actually want , and what they are trying to achieve are very important. I don't know how many times I've gotten a request for something where the customer was trying "to make it easier to build" when they would have ended up with a product that still required them to do a bunch of machinations to get their end goal which was something I had to build along the way to get what they requested.
So, yeah, take that class on user requirements and scoping projects.

The one thing I like about working in agile shop - product owners handle all the client communication, requirements gathering, etc.

Python scripting, web development (JavaScript, HTML, CSS), RDBMS SQL (Oracle PL/SQL for our organization), general Enterprise Geodatabase administration, server administration for ArcGIS Enterprise.

I break stuff until it's not broken no more

We use Python and PostgreSQL/PostGIS. But we do backend processing.

I write web apps in C# that run SQL queries against our GIS data.

Certain databases support spatial queries, which is really cool because you can look up a polygon by it's id and then query against other layers using the shape of that polygon, or a buffer around, all from an SQL statement. It's a bit hard to get the hang of if you never written an SQL before, or you've never used a spatial query, but it's a great way to apply GIS data to problems where a map wouldn't be a good fit.

Core skills for this line of work are HTML, CSS, JavaScript for convincing the browsers to do what you want and knowledge of a web app framework like ASP.NET Core. There's a lot of options here, but Microsoft offers a pretty solid tutorial on building a web apps from scratch which you could use to build a portfolio. Alternatives are valid, but the key here is that you can create, deploy, and demo a full stack web app.

Most of the day to day work is building new web apps, fixing bugs in existing web apps, and enhancing older web apps.

Cloud and data engineering skills are big right now. I work as a GIS data engineer and spend my days building data pipelines using airflow and various services on AWS. I use Python, bash, and Docker often and do a lot of database management.

Stoked to hear replies on this. I start 29th of April at a new firm, so this might come in handy for some preparation

In this job? I do everything from GIS tech work (mapping, digitizing, analysis) to IT (infrastructure planning for the whole company, security, and I deal with our MSP a lot), to development. My goal is to cut the others down so I am working 80% on dev, but since it's a small company I do what is needed even though I may not like it.

When I am developing, my primary focus is on the web side. However, I write my applications modular so that it could fairly easily be applied to a desktop tool. I use python, django, javascript, postgres, and css to do most of my development work

At a past job I primarily focused on web application development, and used SQLServer, C#, and ArcGIS Server. I did some desktop python scripts as well, and some c# desktop add-ins/applications.

For aspiring developers, I would definitely focus more on learning programming basics over any specific language. I would also highly suggest picking a language (either python or C#, depends on where you work), and master it. Once you master it, other languages will come much easier. Don't worry about applying GIS to a language until you are fairly competent and well versed, it will make life a lot easier. Also, learn how to normalize data, and how to properly implement a relational database. There are definitely a lot of people who don't follow these approaches and are noticeably bad programmers because of it. Just because you know how to copy code from stackoverflow doesn't mean you are any good.


Exercise 2.2. Create a mosaic for classification¶

We first need an image to classify before running a classification. For best results, we will need to create an optical mosaic with good coverage of our study area. We will build on knowledge gained in Module 1 to create an optical mosaic in SEPAL and retrieve it to Google Earth Engine.

In SEPAL you can run a classification on either a mosaic recipe or on a GEE asset. It is best practice to run a classification using an asset rather than on-the-fly with a recipe. This will improve how quickly your classification will export and avoid computational limitations.

Build on knowledge gained in Module 1.

Create a mosaic to be the basis for your classification

You can view a demonstration of the mosaic creation on YouTube.

Part 1. Creating and exporting a mosaic for a drawn AOI¶

We will create a mosaic for an area in the Amazon basin. If any of the steps for creating a mosaic are unfamiliar, please revisit Module 1, particularly Exercise 1.2.

Navigate to the Process tab, then create a new optical mosaic by selecting Optical Mosaic on the Process menu.

Under Area of Interest:

  1. Å velge Draw Polygon from the dropdown list.

  1. Navigate using the map to the State of Rondonia (Brazil) and either draw a polygon around it or draw a polygon within the borders. A smaller polygon will export faster.

Now use what you have learned in Module 1 to create a mosaic with imagery from the year 2019 (whole year or part of year, your choice). Don’t forget to consider which satellites you would like to include and which scenes you would like to include (all, some).

Your preview should include imagery data across your entire area of interest. This is important for your classification. Try also to get a cloud-free mosaic, as this makes your classification easier.

Name your mosaic for easy retrieval. Try “Module2_Amazon”.

When you’re satisfied with your mosaic, Retrieve it to Google Earth Engine. Be sure to include the red, green, blue, nir, swir1, and swir2 layers. You may choose to add the greenness, etc. layers as well.

Part 2. Finding your Earth Engine Asset¶

For future exercises, you may need to know how to find your Earth Engine Asset.

Navigate to your Eiendeler tab in the left hand column.

Under Assets, look for the name of the mosaic you just exported.

You will see a window with information about your mosaic pop up.

Click on the two overlapping box icon to copy your asset’s location.


Syntaks

The coverage to be cleaned.

The coverage created by Clean. If the Input Coverage and the Output Coverage have the same name, the Input Coverage will be replaced. By default, the Input Coverage is replaced.

The minimum length allowed for dangling arcs in the Output Coverage. A dangling arc is an arc that has the same polygon internal number on its left and right sides and ends at a dangling node. Dangling arcs are removed for both the POLY and LINE options. If the Dangle Length is not provided, the dangle length is read from the coverage TOL file if the TOL file existsotherwise, dangle length is set to zero (the default).

The minimum distance between coordinates in each out_cover.

Specifies whether to create polygon topology and a PAT or arc–node topology and an AAT. POLY is the default option. If POLY is used on a coverage that has an existing AAT, Clean will also automatically rebuild the AAT.

  • POLY — Polygon topology and a PAT are created. If POLY is used on a coverage that has an existing AAT, Clean will also automatically rebuild the AAT. POLY is the default option.
  • LINE — Arc–node topology and an AAT are created.


Se videoen: Splitting POLYGONS by another polygon in ArcMap (September 2021).