Mer

Pakke ut spesifikt geometripunkt fra MultiPoint-geometri ved hjelp av PostGIS?


Jeg jobber med flerpunktsgeometrier i postgis og vil trekke ut geometripunktet assosiert med den største y-verdien av flerpunktsgeometrien. Hvordan kan jeg utføre en slik oppgave?

For eksempel hvis multipunktgeometrien min er definert som følger:

'MULTIPOINT (2 5, 3 1, 4 0)'

Så hvordan kan jeg samle geometripunktet knyttet til den største y-verdien?

Følgende spørsmål vil fortelle meg at den største y-verdien er 5:

VELG ST_ASTEXT (MP), ST_YMAX (MP) FRA (VELG ST_GeomFromText ('MULTIPOINT (2 5, 3 0.9, 4 1.2)') som MP) som foo;

Imidlertid vil jeg lage et spørsmål som returnerer'PUNKT (2 5)'i stedet for YMAX-verdien på 5.

noen tanker?


Kort sagt: bruk ST_Dump, som vil ødelegge dinMULTIPOINTinn i dens bestanddeler. Sorter deretter synkende etter ST_Y (geom) og få første rad.

Her er et spørsmål som fungerer på PostGIS:

VELG ST_AsText (geom) FRA ST_Dump (ST_GeomFromText ('MULTIPOINT (2 5, 3 1, 4 0)')) BESTILL AV ST_Y (geom) DESC LIMIT 1

Kapittel 6. Bruke PostGIS geometri: bygningsapplikasjoner

Minnesota MapServer er en internettkartleggingsserver på internett som er i samsvar med OpenGIS Web Mapping Server-spesifikasjonen.

MapServer-hjemmesiden er på http://mapserver.org.

6.1.1. Grunnleggende bruk

For å bruke PostGIS med MapServer, må du vite om hvordan du konfigurerer MapServer, som ligger utenfor omfanget av denne dokumentasjonen. Denne delen vil dekke spesifikke PostGIS-problemer og konfigurasjonsdetaljer.

For å bruke PostGIS med MapServer trenger du:

Versjon 0.6 eller nyere av PostGIS.

Versjon 3.5 eller nyere av MapServer.

MapServer får tilgang til PostGIS / PostgreSQL-data som alle andre PostgreSQL-klienter - ved hjelp av libpq-grensesnittet. Dette betyr at MapServer kan installeres på en hvilken som helst maskin med nettverkstilgang til PostGIS-serveren, og bruke PostGIS som en datakilde. Jo raskere forbindelsen mellom systemene, jo bedre.

Kompiler og installer MapServer, med de alternativene du ønsker, inkludert konfigurasjonsalternativet "--with-postgis".

Legg til et PostGIS-lag i MapServer-kartfilen. For eksempel:

I eksemplet ovenfor er PostGIS-spesifikke direktiver som følger:

For PostGIS-lag er dette alltid "postgis".

Databaseforbindelsen styres av en 'tilkoblingsstreng' som er et standard sett med nøkler og verdier som dette (med standardverdiene i & lt & gt):

bruker = & ltusername & gt passord = & ltpassord & gt dbname = & ltusername & gt hostname = & ltserver & gt port = & lt5432 & gt

En tom tilkoblingsstreng er fortsatt gyldig, og noen av nøkkel- / verdiparene kan utelates. Som et minimum vil du vanligvis oppgi databasenavn og brukernavn å koble til.

Formen på denne parameteren er "& ltgeocolumn & gt fra & ltablename & gt ved hjelp av srid = & ltsrid & gt ved hjelp av unik & ltprimary key & gt" der kolonnen er den romlige kolonnen som skal gjengis til kartet, SRID er SRID som brukes av kolonnen og primærnøkkelen er tabellens primære nøkkel (eller en hvilken som helst annen unik kolonne med en indeks).

Du kan utelate "bruk av srid" og "ved hjelp av unike" klausuler, og MapServer vil automatisk bestemme de riktige verdiene hvis mulig, men på bekostning av å kjøre noen ekstra spørsmål på serveren for hver karttegning.

Å sette inn en CLOSE_CONNECTION = DEFER hvis du har flere lag, bruker eksisterende tilkoblinger i stedet for å lukke dem. Dette forbedrer hastigheten. Se for MapServer PostGIS ytelsestips for en mer detaljert forklaring.

Filteret må være en gyldig SQL-streng som tilsvarer logikken som normalt følger nøkkelordet "WHERE" i et SQL-spørsmål. Så for eksempel, for å gjengi bare veier med 6 eller flere baner, bruk et filter med "num_lanes & gt = 6".

I den romlige databasen må du sørge for at du har bygget romlige (GiST) indekser for lagene du skal tegne.

Hvis du vil spørre lagene dine ved hjelp av MapServer, må du også bruke "bruker unik" klausul i DATA-setningen.

MapServer krever unike identifikatorer for hver romlige post når du gjør spørsmål, og PostGIS-modulen til MapServer bruker den unike verdien du spesifiserer for å gi disse unike identifikatorene. Det er best å bruke tabellens hovednøkkel.

6.1.2. Ofte stilte spørsmål

Når jeg bruker EXPRESSION i kartfilen min, returnerer tilstanden aldri som sant, selv om jeg vet at verdiene finnes i tabellen min.

I motsetning til formfiler, må PostGIS-feltnavn henvises til i EXPRESSIONS ved hjelp av små bokstaver .

FILTERET jeg bruker for Shape-filene mine fungerer ikke for PostGIS-tabellen min med de samme dataene.

I motsetning til formfiler bruker filtre for PostGIS-lag SQL-syntaks (de er lagt til SQL-setningen PostGIS-kontakten genererer for å tegne lag i MapServer).

Mitt PostGIS-lag trekker mye langsommere enn Shape-fillaget mitt, er dette normalt?

Generelt, jo flere funksjoner du tegner inn i et gitt kart, desto mer sannsynlig er det at PostGIS vil være tregere enn figurfiler. For kart med relativt få funksjoner (100-tallet) vil PostGIS ofte være raskere. For kart med høy funksjonstetthet (1000-tallet) vil PostGIS alltid være tregere.

Hvis du finner betydelige problemer med trekkytelse, er det mulig at du ikke har bygget en romlig indeks på bordet ditt.

Mitt PostGIS-lag tegner fint, men spørringene er veldig sakte. Hva er galt?

For at spørsmålene skal være raske, må du ha en unik nøkkel for den romlige tabellen, og du må ha en indeks på den unike nøkkelen.

Du kan spesifisere hvilken unik nøkkel for kortserver som skal brukes med USING UNIQUE-setningen i DATA-linjen:

Kan jeg bruke "geografi" -kolonner (ny i PostGIS 1.5) som kilde for MapServer-lag?

Ja! MapServer forstår geografisk kolonner som de samme som geometri kolonner, men bruker alltid en SRID på 4326. Bare vær sikker på å inkludere en "using srid = 4326" klausul i DATA-setningen. Alt annet fungerer nøyaktig det samme som med geometri.

6.1.3. Avansert bruk

Den BRUKENDE pseudo-SQL-setningen brukes til å legge til litt informasjon for å hjelpe kartserveren til å forstå resultatene av mer komplekse spørsmål. Mer spesifikt, når enten en visning eller et undervalg brukes som kildetabell (tingen til høyre for "FROM" i en DATA-definisjon), er det vanskeligere for kartserver å automatisk bestemme en unik identifikator for hver rad og også SRID for bordet. USING-klausulen kan gi kartserver disse to delene informasjon som følger:

MapServer krever en unik id for hver rad for å identifisere raden når du gjør kartspørringer. Normalt identifiserer den primærnøkkelen fra systemtabellene. Visninger og undervalg har imidlertid ikke automatisk en kjent unik kolonne. Hvis du vil bruke MapServers søkefunksjonalitet, må du sørge for at visningen eller undervalget inneholder en kolonne som er unikt verdsatt, og erklærer den med USING UNIQUE. For eksempel kan du eksplisitt velge en av tabellens primære nøkkelverdier for dette formålet, eller en hvilken som helst annen kolonne som garantert er unik for resultatsettet.

"Spørring av et kart" er handlingen ved å klikke på et kart for å be om informasjon om kartfunksjonene på det stedet. Ikke forveksle "kartspørringer" med SQL-spørringen i en DATA-definisjon.

PostGIS trenger å vite hvilket romlig referansesystem som brukes av geometriene for å returnere de riktige dataene til MapServer. Normalt er det mulig å finne denne informasjonen i "geometry_column" -tabellen i PostGIS-databasen, men dette er ikke mulig for tabeller som er opprettet i farten, for eksempel undervalg og visninger. Så USING SRID = -alternativet gjør at riktig SRID kan spesifiseres i DATA-definisjonen.

6.1.4. Eksempler

La oss starte med et enkelt eksempel og jobbe oss oppover. Vurder følgende MapServer-lagdefinisjon:

Dette laget vil vise alle veggeometriene i veitabellen som svarte linjer.

La oss si at vi bare vil vise motorveiene til vi zoomes inn til minst en skala fra 1: 100000 - de neste to lagene vil oppnå denne effekten:

Det første laget brukes når skalaen er større enn 1: 100000, og viser bare veiene av typen "motorvei" som svarte linjer. FILTER-alternativet fører til at bare veier av typen "motorvei" vises.

Det andre laget brukes når skalaen er mindre enn 1: 100000, og vil vise motorveier som dobbelt-tykke røde linjer, og andre veier som vanlige svarte linjer.

Så vi har gjort et par interessante ting ved å bare bruke MapServer-funksjonalitet, men DATA SQL-setningen har vært enkel. Anta at navnet på veien er lagret i en annen tabell (uansett grunn), og at vi må delta for å få det og merke veiene våre.

Dette merkelaget legger til grønne etiketter på alle veiene når skalaen kommer ned til 1: 20000 eller mindre. Den demonstrerer også hvordan du bruker en SQL-sammenkobling i en DATA-definisjon.


4 svar 4

Bruk ST_DumpPoints () for å dumpe polygonpunktene, og velg deretter fra den rekkefølgen ved ST_Distance til A-grense 2.?

(antar at dette er et indre valg der poly er polygonet, A er poenget å sammenligne med og geom er geom-kolonnen til et av punktene i poly som sammenlignes)

Det er generelt ikke noe nest nærmeste punkt på grensepolygonet, hvis du inkluderer linjene. Akkurat som det ikke er noe reelt tall som er nærmest null. Enten vil du bare vurdere punktene i hjørnene, slik Markus antyder. Eller du har bare ett nærmeste punkt.

1) Slags en ide fra venstre felt, men å finne sekund-næreste punkt til destinasjonen, hvorfor ikke finne det nærmeste punktet til det punktet du allerede har funnet?

2) Eller, mer germaine til ditt spesifikke spørsmål,

  • finn settet med punkter innenfor et rimelig område av punktet,
  • finn skjæringspunktet mellom det settet og settet med punkter som ligger på polygongrensen (som jeg antar kan være en annen PostGIS-funksjon som ikke har brukt postG på en stund, så jeg er ikke sikker)

3) Lengre inn i venstre felt, dump noe av datasettet ditt i Mongo og bruk $ near-funksjonen. http://docs.mongodb.org/manual/reference/operator/near/

Jeg antar at du vil finne kanten på polygonet som passerer nærmest det aktuelle punktet

For å oppnå avstanden 'd' av punktet 'C' fra linjen [A, B] Oversett først alle punktene slik at A er på 0,0

Normaliser deretter B så den har lengde 1.0

Finn lengde fra A som er i rett vinkel mot C

Ikke sikker på hvordan du gjør det i SQL. Du må gjøre ovenstående for hver kant på polygonet ditt, og deretter finne den minste verdien 'd'

Forresten vil tegnet på kryssproduktet til B og C nå fortelle deg om punktet er på innsiden av polygonet eller ikke


Hvordan gruppere etter å få MultiPoint / GeometryCollection i MySQL?

Når jeg prøver å gruppere kolonnen fix_geom til en MultiPoint (eller GeometryCollection) etter SubjectID, som:

Jeg får et bord med en flerpunktsgeometri, men den inneholder bare ett enkelt punkt i stedet for de mange jeg hadde likt å se der.

Kan noen fortelle meg hva jeg gjør galt?

Skål og mange takk på forhånd, Olaf


Dokumentasjon

ActiveRecord PostGIS-adapter

Activerecord-postgis-adapteren gir tilgang til funksjonene i PostGIS geospatiale database fra ActiveRecord. Den utvider standard postgresql-adapteren for å gi støtte til de geografiske datatypene og funksjonene som er lagt til av PostGIS-utvidelsen. Den bruker RGeo-biblioteket til å representere romlige data i Ruby.

Adapteren gir tre grunnleggende funksjoner:

For det første gir det romlige vandringer. Den utvider ActiveRecord-migrasjonssyntaksen for å støtte opprettelse av romtypede kolonner og romlige indekser. Du kan kontrollere de forskjellige PostGIS-attributtene som srid, dimensjon og geografisk vs geometrisk matematikk.

For det andre gjenkjenner den romlige typer og kaster dem riktig til RGeo-geometriobjekter. Adapteren kan konfigurere disse objektene automatisk basert på srid og dimensjon i databasetabellen, eller du kan be den om å konvertere dataene til en annen form. Du kan også angi attributtdata ved hjelp av WKT-format.

For det tredje lar den deg inkludere enkle romlige data i spørsmål. WKT-formatdata og RGeo-objekter kan legges inn i hvor klausuler.

Adapteren krever PostgreSQL 9.0+ og PostGIS 2.4+.

Her er vanlige metoder for å installere PostGIS, men mer detaljerte metoder finner du i installasjonsveiledningen.

PostGIS er sannsynligvis tilgjengelig som en valgfri pakke via Postgresql-installatøren. Hvis ikke, se installasjonsveiledningen.

JRuby-støtte for Rails 4.0 og 4.1 ble lagt til i versjon 2.2.0

Versjon 7.x støtter ActiveRecord 6.1

Versjon 6.x støtter ActiveRecord 6.0

Versjon 5.x støtter ActiveRecord 5.1 og 5.2

Versjon 4.x støtter ActiveRecord 5.0

Versjon 3.x støtter ActiveRecord 4.2

Versjon 2.x støtter ActiveRecord 4.0.x og 4.1.x

Hvis du bruker versjon 2.x, bør du lese versjon 2.x README

Versjon 0.6.x støtter ActiveRecord 3.x

Hvis du bruker versjon 0.6.x, bør du lese versjonen 0.6.x / 2.x README

Les PostGIS 1-merknader hvis du vil bruke adapteren med en eldre versjon av PostGIS.

Du må endre config / database.yml-filen for å bruke postgis-adapteren. I det minste må du endre adapterfeltet fra postgresql til postgis. Anbefalt konfigurasjon:

Hvis du har installert PostGIS-utvidelsen i et annet skjema enn offentlig, som er standard, legger du til skjemaet i schema_search_path:

Her er noen andre alternativer som støttes:

Denne adapteren bruker rgeo-perlen, som har flere avhengigheter. Se README-dokumentasjonen for rgeo for mer informasjon: https://github.com/rgeo/rgeo

Opprette en Spatial Rails-app

Denne delen dekker å starte et nytt Rails-program fra bunnen av. Hvis du trenger å legge til geospatiale evner til et eksisterende Rails-program (dvs. du må konvertere en ikke-romlig database til en romlig database), se avsnittet "Oppgradere en database med romlige funksjoner" nedenfor.

For å opprette et nytt Rails-program med activerecord-postgis-adapter, begynn med å bruke postgresql-adapteren.

Legg til adapterperlen i Gemfilen:

Når du har konfigurert databasekonfigurasjonen, kjører du:

for å lage utviklingsdatabasen din. Adapteren vil legge til PostGIS-utvidelsen i databasen din.

Når du har installert adapteren, kan du redigere config / database.yml som beskrevet ovenfor.

Oppgradere en eksisterende database

Hvis du har en eksisterende Rails-app som bruker Postgres, og du vil legge til geospatiale funksjoner, følger du disse trinnene.

Først legger du til activerecord-postgis-adapter-perlen i Gemfile, og oppdater pakken din ved å kjøre installasjonen av pakken.

Deretter endrer du config / database.yml-filen for å påkalle postgis-adapteren, som beskrevet ovenfor.

Når du har konfigurert databasekonfigurasjonene, kjører du:

Denne rakeoppgaven legger til PostGIS-utvidelsen i din eksisterende database.

For å lagre geodata, må du opprette en kolonne med en romlig type. PostGIS tilbyr en rekke romlige typer, inkludert punkt, linjestreng, polygon og forskjellige typer samlinger. Disse typene er definert i en standard produsert av Open Geospatial Consortium. Du kan spesifisere alternativer som indikerer koordinatsystemet og antall koordinater for verdiene du lagrer.

Activerecord-postgis-adapteren utvider ActiveRecords migrasjonssyntaks for å støtte disse romlige typene. Følgende eksempel oppretter fem romlige kolonner i en tabell:

Den første kolonnen, "form1", er opprettet med typen "geometri". Dette er en generell "baseklasse" for romlige typer kolonnen erklærer at den kan inneholde verdier av noen romlig type.

Den andre kolonnen, "form2", bruker en stenografisyntaks for samme type som form1-kolonnen. Du kan opprette en kolonne enten ved å påkalle kolonne eller påkalle navnet på typen direkte.

Den tredje kolonnen, "bane", har en bestemt geometrisk type, linjestreng. Den spesifiserer også en SRID (romlig referanse-ID) som indikerer hvilket koordinatsystem det forventer at dataene skal være i. Kolonnen har nå en "begrensning" på den, den aksepterer bare LineString-data, og bare data hvis SRID er 3785.

Den fjerde kolonnen, "lonlat", har st_point-typen, og godtar bare punktdata. Videre erklærer den kolonnen som "geografisk", noe som betyr at den godtar lengdegrad / breddata, og utfører beregninger som avstander ved hjelp av et sfæroidalt domene.

Den femte kolonnen, "lonlatheight", er et geografisk (lengdegrad / breddegrad) punkt som også inkluderer en tredje "z" -koordinat som kan brukes til å lagre høydeinformasjon.

Følgende er datatypene forstått av PostGIS og eksponert av activerecord-postgis-adapter:

  • : geometri - En hvilken som helst geometrisk type
  • : st_point - Punktdata
  • : line_string - LineString-data
  • : st_polygon - Polygondata
  • : geometry_collection - Enhver samlingstype
  • : multi_point - En samling poeng
  • : multi_line_string - En samling LineStrings
  • : multi_polygon - En samling polygoner

Følgende er alternativene som adapteren forstår:

  • : geografisk - Hvis satt til sant, opprett en PostGIS geografisk kolonne for lengdegrad / breddegradata over et sfæroidalt domene, ellers opprett en geometrisk kolonne i et flatt koordinatsystem. Standard er falsk. Impliserer også: srid satt til 4326.
  • : srid - Angi en SRID-begrensning for kolonnen. Standard er 4326 for en geografisk kolonne, eller -1 for en geometrisk kolonne. Merk at PostGIS for øyeblikket (fra versjon 2.0) krever at geografikolonner skal ha SRID 4326, så denne begrensningen er av begrenset bruk for geografikolonner.
  • : has_z - Angi at objekter i denne kolonnen inkluderer en Z-koordinat. Standard er falsk.
  • : has_m - Angi at objekter i denne kolonnen inkluderer en M-koordinat. Standard er falsk.

For å lage en romlig indeks for PostGIS, legg til ved hjelp av:: gist til indeksen din:

Modeller kan også definere attributter ved hjelp av datatypene og alternativene ovenfor.

centroid vil ikke ha en tilknyttet kolonne i spatial_models-tabellen, men ethvert geometriobjekt som er tilordnet centroid-attributtet, blir kastet til et geografisk punkt.

Pek- og polygontyper med ActiveRecord 4.2+

Før versjon 3 ble punkt- og polygontypene støttet. I ActiveRecord 4.2 la Postgresql-adapteren til støtte for de innfødte Postgresql-punktene og polygontypene, som er i konflikt med denne adapterens typer med samme navn. PostGIS-punkttypen må refereres til som st_point, og PostGIS-polygontypen må refereres til som st_polygon.

ActiveRecords nytte kommer fra måten den automatisk konfigurerer klasser basert på databasestruktur og skjema. Hvis en kolonne i databasen har et heltallstype, kaster ActiveRecord dataene automatisk til et Ruby Integer. På samme måte kaster activerecord-postgis-adapter automatisk romlige data til en tilsvarende RGeo-datatype.

RGeo tilbyr mer fleksibilitet i sitt typesystem enn det som kan tolkes bare ved å analysere databasekolonnen. For eksempel kan du konfigurere RGeo-objekter slik at de viser visse atferd knyttet til serialisering, validering, koordinatsystem eller beregning. Disse innstillingene er nedfelt i RGeo-fabrikken knyttet til objektet.

Du kan konfigurere adapteren til å bruke en bestemt fabrikk (dvs. en bestemt kombinasjon av innstillinger) for data tilknyttet hver type i databasen.

Her er et eksempel på en fabrikk fra Geos:

Standard romlig fabrikk for geografiske kolonner er RGeo :: Geographic.spherical_factory. Standard romlig fabrikk for kartesiske kolonner er RGeo :: Cartesian.preferred_factory. Du trenger ikke å konfigurere SpatialFactoryStore hvis disse standardene er i orden.

For mer forklaring på SpatialFactoryStore, se rgeo-activerecord README

I versjon 7.0.0+ blir attributtene i det andre argumentet i registeret analysert for å prøve å matche en av de forventede verdiene for hvert felt. Dette kan bryte eksisterende butikkonfigurasjoner.

Se rgeo-activerecord-dokumentene for en liste over forventede verdier for alle aksepterte felt.

Se wiki-oppføringen og koblet utgave for noen notater om Heroku-distribusjoner.

Merk: RGeo leter etter en Heroku-bruker for å hjelpe til med å formalisere / utvide wiki. Hvis du er interessert, kan du åpne en PR med en ny md-fil, som kan kopieres til wiki-en.

Arbeide med romlige data

Selvfølgelig bruker du denne adapteren fordi du vil jobbe med geospatial data i ActiveRecord-modellene dine. Når du har installert adapteren, konfigurert databasen og kjørt migrasjonene dine, kan du samhandle direkte med romlige data i modellene dine som RGeo-objekter.

RGeo er en Ruby-implementering av bransjestandarden OGC Simple Features-spesifikasjonen. Det er et sett med datatyper som kan representere en rekke geospatiale objekter som punkter, linjer, polygoner og samlinger. Det gir også standardsett med romlige analyseoperasjoner som beregning av kryss eller avgrensningsbokser, beregning av lengde eller areal og så videre. Vi anbefaler å bla gjennom RGeo-dokumentasjonen for å få en klarere forståelse av dens evner. For øyeblikket er det bare å merke seg at dataverdiene du vil jobbe med er alle RGeo-geometriobjekter.

Lese og skrive romlige kolonner

Når du får tilgang til et romlig attributt på ActiveRecord-modellen, blir den gitt til deg som et RGeo-geometriobjekt (eller null, for attributter som tillater nullverdier). Du kan da ringe RGeo-APIen på objektet. Tenk for eksempel på MySpatialTable-klassen vi jobbet med ovenfor:

RGeo-fabrikken for verdien bestemmes av hvordan du konfigurerte ActiveRecord-klassen, som beskrevet ovenfor. I dette tilfellet setter vi eksplisitt en sfærisk fabrikk for: lonlat-kolonnen:

Du kan angi et romlig attributt ved å oppgi et RGeo-geometriobjekt, eller ved å oppgi WKT-strengrepresentasjonen av geometrien. Hvis en streng er gitt, vil activerecord-postgis-adapteren forsøke å analysere den som WKT og angi verdien deretter.

Hvis WKT-parsering mislykkes, blir verdien for øyeblikket stille til null. I fremtiden vil dette imidlertid heve et unntak.

Hvis du setter verdien til et RGeo-objekt, må fabrikken matche fabrikken for attributtet. Hvis fabrikkene ikke stemmer overens, vil activerecord-postgis-adapter prøve å kaste verdien til riktig fabrikk.

Hvis du imidlertid prøver å sette verdien til feil type - for eksempel ved å sette en linjestrengattributt til en punktverdi, vil du få et unntak fra Postgres når du prøver å lagre posten.

Du kan lage enkle spørsmål basert på representasjonslikhet på samme måte som i en skalar kolonne:

Merk at disse spørsmålene bruker representasjonslikhet, noe som betyr at de returnerer poster der lonlat-verdien samsvarer nøyaktig med den gitte verdien. En 0,00001 graders forskjell vil ikke stemme overens, og heller ikke en annen representasjon av den samme geometrien (som et flerpunkt med et enkelt element). Likestillingsspørsmål er generelt ikke så nyttige i applikasjoner fra den virkelige verden. Vanligvis, hvis du vil utføre et romlig spørsmål, vil du se etter, for eksempel, alle punktene i et gitt område. For disse spørsmålene må du bruke de standard romlige SQL-funksjonene som tilbys av PostGIS.

For å utføre mer avanserte romlige spørsmål, kan du bruke det utvidede Arel-grensesnittet som er inkludert i activerecord-postgis-adapteren. Funksjonene godtar WKT-strenger eller RGeo-funksjoner.

Se rgeo-activerecord for mer informasjon om avanserte romlige spørsmål.

Hvis en romlig kolonne kobles sammen med en annen modell, blir ikke srid og geografisk utledet automatisk, og de vil som standard være 0 og falske. For å kunne utlede disse alternativene etter en sammenkobling, må et attributt opprettes på måltabellen.

En romlig database er en som inkluderer et sett med datatyper, funksjoner, tabeller og andre objekter relatert til geospatiale data. Når disse objektene er til stede i databasen din, kan du bruke dem til å lagre og spørre romlige objekter som punkter, linjer og polygoner.

PostGIS er en utvidelse for PostgreSQL som gir definisjoner for objektene du trenger å legge til i en database for å muliggjøre geospatiale muligheter.

Når du oppretter Rails-databasen som beskrevet ovenfor i avsnittet om installasjon og konfigurasjon, påkaller activerecord-postgis-adapter automatisk PostGIS for å legge til de riktige definisjonene i databasen. Du kan bestemme om databasen din inneholder de riktige definisjonene ved å prøve å påkalle funksjonen POSTGIS_VERSION:

Standard romlige databaser inkluderer også en tabell som heter spatial_ref_sys. Denne tabellen inkluderer et sett med "romlige referansesystemer", eller koordinatsystemer --- for eksempel WGS84 breddegrad og lengdegrad, eller Mercator-projeksjon. Romlige databaser inkluderer vanligvis også en tabell som heter geometri_kolonner, som inkluderer informasjon om hver databasekolonne som inkluderer geometriske data. I nyere versjoner av PostGIS er geometri_kolonner faktisk ikke en tabell, men en oversikt i systemkatalogene.

Bidrag er velkomne. Se CONTRIBUTING.md for instruksjoner.

Støtte er også tilgjengelig på rgeo-brukere google-gruppen på https://groups.google.com/group/rgeo-users

Daniel Azuma forfattet PostGIS-adapteren og dens støttende biblioteker (inkludert RGeo).


Denne parameteren kan settes til Encoded Polyline, Esri JSON, FME Binary, FME XML, Geo (Microformat), Geohash, GeoJSON, GeoRSS Simple Encoding, Geotagging GeoSMS (RFC 5870), GML, hexadecimal-encoded FME Binary, hexadecimal-encoded OGC Velkjent binær (wkbhex), ISO 6709 Geographic Point, KML, MGRS, Microsoft SQL Server Binary, OGC Open GeoSMS, OGC Velkjent binær (wkb), OGC Velkjent tekst (wkt), Parseable kodet FME XML, eller QlikMaps kodet Polyline .

Den mest effektive og ekte representasjonen av geometrien er FME Binary, og dette bør brukes i de fleste tilfeller. Alle FME-representasjonene kan imøtekomme alle aspekter av FME Enhanced Geometry, inkludert målinger og baner som består av flere lineære segmenter, men både FME XML og Hex Encoded FME Binære representasjoner pålegger noe overhead i oversettelse mellom den interne binære representasjonen og den ASCII-kodede representasjonen .

OGC-variantene er nyttige hvis det er nødvendig med interaksjon med andre OGC-støttende systemer. Imidlertid kan noen karakteristikker av geometrier ha gått tapt i disse modusene, for eksempel vil en hvilken som helst bane bli flatt til en enkelt linjering. For OGC velkjent tekst og OGC velkjent binær, hvis mål er spesifisert i kilden, vil de bli lagret som "standard" (ikke navngitt) mål på den genererte geometrien.

Ved konvertering fra WKT eller WKB, hvis det angitte attributtet har en tom verdi, vil funksjonens geometri bli uberørt, og en advarsel vil bli sendt ut. & # 160Dette er viktig å huske hvis en GeometryExtractor ble brukt til å generere et attributt som ble brukt i denne transformatoren, fordi transformatoren produserer en tom verdi når den møter en funksjon uten geometri.

Parseable Encoded FME XML-alternativet brukes til å ta geometrirepresentasjonen som brukes av Creator-transformatoren og sette geometrien ut fra det.

GeoJSON-, Esri JSON- og GeoRSS-koding bevarer kanskje ikke alle geometriegenskaper. For eksempel vil buer strykes til linjer, og ellipser strykes til polygoner. GeoJSON støtter ikke tiltak.

GML-kodingsalternativet brukes til å avserialisere GML-geometrier. Hvis mer enn en geometri er funnet i kildegeometrien, returneres et aggregat av geometriene.

Geohash-kodingsalternativet lagrer geometrien som en streng med tegn som kan dekodes som enten et punkt eller et rektangulært område.

OGC Open GeoSMS, Geotagging GeoSMS og Geo (Microformat) kodingsalternativer vil trekke ut et punkt fra det gitte formatet.

ISO 6709 Geographic Point-koding brukes til å de-serialisere ISO 6709 geografiske punkter til punktgeometrier. En flerpunktsgeometri opprettes hvis kildedataene inneholder flere geografiske punkter.

Den kodede polyline-kodingen er nyttig hvis du arbeider med Google Maps API og kan brukes til å representere punkter, linjer og polygoner.

QlikMaps Encoded Polyline-koding er som Encoded Polyline-koding, men den kan også brukes til å representere smultringer og flere områder.

MGRS-kodingen brukes til å konvertere MGRS-kode (Military Grid Reference System) til koordinater for lengdegrad og breddegrad. Geometrien til en inngangsfunksjon vil bli erstattet med et punkt på lengde- / breddegradene som er oppnådd fra MGRS-koden.

Microsoft SQL Server Binær koding brukes til å avserialisere geometrier fra det opprinnelige lagringsformatet som brukes i Microsoft SQL Server.

Den kodede representasjonen av geometrien som skal tilordnes funksjonen. Et attributt kan velges hvis en inneholder denne verdien, eller tekst kan legges inn direkte eller hentes fra en arbeidsområdeparameter.

Hvis denne parameteren er satt til Ja, blir attributtet som er spesifisert i Geometry Source fjernet fra den resulterende funksjonen. Denne parameteren har ingen effekt hvis et attributt ikke ble spesifisert.

Koding av spesifikke parametere

Du kan velge å dekode en geohash som enten et punkt eller et rektangulært område. Hvis det blir dekodet som et punkt, blir informasjonen om området lagret som attributter.

Hvis geometrisk koding er GML, kan denne parameteren brukes til å tvinge tolkning av & ltgml: pos & gt og & ltgml: posList & gt i en bestemt akserrekkefølge.

Ellipsoiden som ble brukt til konvertering. Dette kan være hvilket som helst ellipsoidnavn som støttes av FME.

Type bokstaver som brukes kan være WGS84 eller Bessel.

Hvis geometrisk koding er Microsoft SQL Server Binary, velger du om det er en seriell geometri eller geografi.

Hvis geometrisk koding er OGC kjent tekst, kan denne parameteren brukes til å kontrollere presisjonen som brukes når du konverterer numeriske strenger til flytende punkt.


Aksepterte forekomster

For en GeometryCollection for eksempel å bli akseptert, må den enten være tom GeometryCollection forekomst eller alle forekomster som omfatter GeometryCollection forekomst må være aksepterte forekomster. Følgende eksempel viser aksepterte forekomster.

Følgende eksempel kaster et System.FormatException fordi LinesString eksempel i GeometryCollection forekomst aksepteres ikke.

Gyldige forekomster

EN GeometryCollection forekomst er gyldig når alle forekomster som omfatter GeometryCollection forekomst er gyldig. Følgende viser tre gyldige GeometryCollection forekomster og en forekomst som ikke er gyldig.

@ g4 er ikke gyldig fordi Polygon eksempel i GeometryCollection forekomst er ikke gyldig.

For mer informasjon om aksepterte og gyldige forekomster, se Punkt, MultiPoint, LineString, MultiLineString, Polygon og MultiPolygon.


GeoDataFrame¶

En GeoDataFrame er en datastruktur i tabell som inneholder en GeoSeries.

Den viktigste egenskapen til en GeoDataFrame er at den alltid har en GeoSeries-kolonne som har en spesiell status. Denne GeoSeries blir referert til som GeoDataFrames “geometri”. Når en romlig metode blir brukt på en GeoDataFrame (eller et romlig attributt som område kalles), vil disse kommandoene alltid virke på kolonnen "geometri".

Kolonnen "geometri" - uansett navn - kan nås gjennom geometriattributtet (gdf.geometry), og navnet på geometri-kolonnen kan bli funnet ved å skrive gdf.geometry.name.

En GeoDataFrame kan også inneholde andre kolonner med geometriske (velformede) objekter, men bare en kolonne kan være den aktive geometrien om gangen. For å endre hvilken kolonne som er den aktive geometri-kolonnen, bruk metoden GeoDataFrame.set_geometry ().

Et eksempel som bruker verdens GeoDataFrame:

For tiden er kolonnen med navnet "geometri" med landegrenser den aktive geometri-kolonnen:

Vi kan også gi nytt navn til denne kolonnen til "grenser":

Nå lager vi sentroider og gjør det til geometrien:

Merk: A GeoDataFrame keeps track of the active column by name, so if you rename the active geometry column, you must also reset the geometry:

Note 2: Somewhat confusingly, by default when you use the read_file command, the column containing spatial objects from the file is named “geometry” by default, and will be set as the active geometry column. However, despite using the same term for the name of the column and the name of the special attribute that keeps track of the active column, they are distinct. You can easily shift the active geometry column to a different GeoSeries with the set_geometry() command. Further, gdf.geometry will always return the active geometry column, ikke the column named geometry . If you wish to call a column named “geometry”, and a different column is the active geometry column, use gdf['geometry'] , not gdf.geometry .

Attributes and Methods¶

Any of the attributes calls or methods described for a GeoSeries will work on a GeoDataFrame – effectively, they are just applied to the “geometry” GeoSeries .

However, GeoDataFrames also have a few extra methods for input and output which are described on the Input and Output page and for geocoding with are described in Geocoding .


Editing Transformer Parameters

Using a set of menu options, transformer parameters can be assigned by referencing other elements in the workspace. More advanced functions, such as an advanced editor and an arithmetic editor, are also available in some transformers. To access a menu of these options, click beside the applicable parameter. For more information, see Transformer Parameter Menu Options.

Defining Values

There are several ways to define a value for use in a Transformer. The simplest is to simply type in a value or string, which can include functions of various types such as attribute references, math and string functions, and workspace parameters. There are a number of tools and shortcuts that can assist in constructing values, generally available from the drop-down context menu adjacent to the value field.

Using the Text Editor

The Text Editor provides a convenient way to construct text strings (including regular expressions) from various data sources, such as attributes, parameters, and constants, where the result is used directly inside a parameter.

Using the Arithmetic Editor

The Arithmetic Editor provides a convenient way to construct math expressions from various data sources, such as attributes, parameters, and feature functions, where the result is used directly inside a parameter.

Conditional Values

Set values depending on one or more test conditions that either pass or fail.

Innhold

Expressions and strings can include a number of functions, characters, parameters, and more.

When setting values - whether entered directly in a parameter or constructed using one of the editors - strings and expressions containing String, Math, Date/Time or FME Feature Functions will have those functions evaluated. Therefore, the names of these functions (in the form @<function_name>) should not be used as literal string values.


Like @dstob mentioned, you can use ffprobe to get the I-frames and their associated information. ffprobe comes with some of the static builds on the download page and can be built from source as well.

This is assuming you're on Linux/Unix:

Extract frames and frame types

The grep command filters lines with I in them, and counts their index (using the -n option). The cut command selects the first column of the output only (the index). Note that this index is 1-based, not 0-based.

Rename output files based on index

You can actually pipe these indices to a list:

Then make a list of all the thumbnails too:

Then paste those two together:

The list now contains the name of the thumbnail and the index. Perform a rename based on that:

The above will rename thumbnail-01.jpeg to thumbnail-0.jpeg . Note that there is no zero-padding on the output index. If you want to zero-pad it to, say, 5 digits, use printf :

On Windows, you'd do the exact same with ffprobe but parse the output differently. No idea how to perform the renaming there though.


Se videoen: Analytisk Geometri - Bevis: Afstand fra Punkt til Linje y=ax+b version uden vektorregning (Oktober 2021).