Vairāk

Iegūt konkrētu ģeometrijas punktu no MultiPoint ģeometrijas, izmantojot PostGIS?


Es strādāju ar daudzpunktu ģeometrijām postgis un vēlētos iegūt ģeometrijas punktu, kas saistīts ar lielāko daudzpunktu ģeometrijas y vērtību. Kā es varu paveikt šādu uzdevumu?

Piemēram, ja mana daudzpunktu ģeometrija ir definēta šādi:

"DAUDZPAKALPOJUMS (2 5, 3 1, 4 0)"

Tad kā es varu savākt ģeometrijas punktu, kas saistīts ar vislielāko y vērtību?

Šis vaicājums man pateiks, ka lielākā y vērtība ir 5:

Atlasiet ST_ASTEXT (MP), ST_YMAX (MP) FROM (SELECT ST_GeomFromText ('MULTIPOINT (2 5, 3 0,9, 4 1,2)') kā MP) kā foo;

Tomēr es vēlētos izveidot vaicājumu, kas atgriežas"PUNKTS (2 5)"nevis YMAX vērtība 5.

Vai ir kādas domas?


Īsāk sakot: izmantot ST_Dump, kas salauzīs jūsuDAUDZPAKALPOJUMStā sastāvdaļās. Pēc tam kārtojiet dilstošā secībā pēc ST_Y (ģeom) un iegūstiet pirmo rindu.

Šis vaicājums darbojas manā PostGIS:

Atlasiet ST_AsText (geom) FROM ST_Dump (ST_GeomFromText ('MULTIPOINT (2 5, 3 1, 4 0)')) PASŪTĪT ST_Y (geom) DESC LIMIT 1

6. nodaļa. PostGIS ģeometrijas izmantošana: ēku lietojumi

Minesotas MapServer ir interneta tīmekļa kartēšanas serveris, kas atbilst OpenGIS Web Mapping Server specifikācijai.

MapServer mājas lapa atrodas vietnē http://mapserver.org.

6.1.1. Pamata lietojums

Lai izmantotu PostGIS kopā ar MapServer, jums būs jāzina, kā konfigurēt MapServer, kas ir ārpus šīs dokumentācijas darbības jomas. Šajā sadaļā tiks aplūkoti specifiski PostGIS jautājumi un konfigurācijas informācija.

Lai izmantotu PostGIS ar MapServer, jums būs nepieciešams:

PostGIS versija 0.6 vai jaunāka.

MapServer versija 3.5 vai jaunāka.

MapServer piekļūst PostGIS / PostgreSQL datiem tāpat kā jebkuram citam PostgreSQL klientam - izmantojot interfeisu libpq. Tas nozīmē, ka MapServer var instalēt jebkurā datorā ar tīkla piekļuvi PostGIS serverim un izmantot PostGIS kā datu avotu. Jo ātrāks savienojums starp sistēmām, jo ​​labāk.

Apkopojiet un instalējiet MapServer ar visām vēlamajām opcijām, ieskaitot konfigurācijas opciju "- ar-ar-postgis".

MapServer kartes failā pievienojiet PostGIS slāni. Piemēram:

Iepriekš minētajā piemērā PostGIS specifiskās direktīvas ir šādas:

PostGIS slāņiem tas vienmēr ir "postgis".

Datu bāzes savienojumu regulē “savienojuma virkne”, kas ir standarta šādu atslēgu un vērtību kopa (ar noklusējuma vērtībām & lt & gt):

user = & ltusername & gt password = & ltparole & gt dbname = & ltusername & gt resursdatora nosaukums = & ltserver & gt ports = & lt5432 & gt

Tukša savienojuma virkne joprojām ir derīga, un jebkuru no atslēgu / vērtību pāriem var izlaist. Vismaz jūs parasti norādīsit datubāzes nosaukumu un lietotājvārdu, ar kuru sazināties.

Šī parametra forma ir "& ltgeocolumn & gt from & lttablename & gt using srid = & ltsrid & gt using unique & ltprimary key & gt", kur kolonna ir telpiskā kolonna, kas jāattēlo kartē, SRID ir SRID, ko izmanto kolonna, un galvenā atslēga ir tabulas galvenā atslēga (vai jebkura cita unikāli novērtēta kolonna ar indeksu).

Jūs varat izlaist klauzulas “using srid” un “using unique”, un, ja iespējams, MapServer automātiski noteiks pareizās vērtības, taču par to, ka katrai kartes izlozei serveris izpildīs dažus papildu vaicājumus.

Ja jums ir vairāki slāņi, CLOSE_CONNECTION = DEFER ievietošana atkārtoti izmanto esošos savienojumus, nevis tos aizver. Tas uzlabo ātrumu. Detalizētāku skaidrojumu skatiet MapServer PostGIS veiktspējas padomos.

Filtram jābūt derīgai SQL virknei, kas atbilst loģikai, kas SQL vaicājumā parasti seko atslēgvārdam WHERE. Tā, piemēram, lai renderētu tikai ceļus ar 6 vai vairāk joslām, izmantojiet filtru “num_lanes & gt = 6”.

Telpiskajā datu bāzē pārliecinieties, vai ir izveidoti telpiskie (GiST) indeksi visiem slāņiem, kurus jūs zīmēsit.

Ja vaicāsit par slāņiem, izmantojot MapServer, DATA paziņojumā būs jāizmanto arī klauzula "using unique".

Veicot vaicājumus, MapServer katram telpiskajam ierakstam ir nepieciešami unikāli identifikatori, un MapServer modulis PostGIS izmanto unikālo jūsu norādīto vērtību, lai nodrošinātu šos unikālos identifikatorus. Labākā prakse ir tabulas primārās atslēgas izmantošana.

6.1.2. Bieži uzdotie jautājumi

Kad kartes failā izmantoju EXPRESSION, nosacījums nekad neatgriežas kā patiess, pat ja es zinu, ka tabulā pastāv vērtības.

Atšķirībā no formas failiem, uz PostGIS lauku nosaukumiem ir jāatsaucas EXPRESSIONS, izmantojot mazie burti .

FILTRS, kuru izmantoju Shape failiem, nedarbojas PostGIS tabulā ar tiem pašiem datiem.

Atšķirībā no formas failiem, PostGIS slāņu filtros tiek izmantota SQL sintakse (tie tiek pievienoti SQL priekšrakstam, ko PostGIS savienotājs ģenerē slāņu zīmēšanai MapServer).

Mans PostGIS slānis velk daudz lēnāk nekā mans Shape failu slānis, vai tas ir normāli?

Kopumā, jo vairāk iezīmju jūs iezīmējat noteiktā kartē, jo lielāka iespējamība, ka PostGIS būs lēnāks nekā Shape faili. Kartēm ar salīdzinoši mazām funkcijām (100 s) PostGIS bieži būs ātrāks. Kartēm ar lielu funkciju blīvumu (1000 s) PostGIS vienmēr būs lēnāks.

Ja atrodat būtiskas problēmas ar zīmēšanas veiktspēju, iespējams, ka uz galda neesat izveidojis telpisko rādītāju.

Mans PostGIS slānis ir lieliski izstrādāts, bet vaicājumi ir patiešām lēni. Kas vainas?

Lai vaicājumi būtu ātri, jums ir jābūt unikālai telpiskās tabulas atslēgai un šīs unikālās atslēgas indeksam.

Jūs varat norādīt, kādu unikālu atslēgu kartes serverim izmantot kopā ar klauzulu USING UNIQUE savā DATA rindā:

Vai es varu izmantot “ģeogrāfijas” slejas (jaunas PostGIS 1.5 versijā) kā MapServer slāņu avotu?

Jā! MapServer saprot, ka ģeogrāfijas kolonnas ir vienādas ar ģeometrijas kolonnām, taču vienmēr tiek izmantots SRID 4326. Vienkārši pārliecinieties, vai DATA paziņojumā ir iekļauta klauzula "using srid = 4326". Viss pārējais darbojas tieši tāpat kā ar ģeometriju.

6.1.3. Uzlabota lietošana

Pseido-SQL klauzula LIETOŠANA tiek izmantota, lai pievienotu kādu informāciju, lai palīdzētu karšu serverim saprast sarežģītāku vaicājumu rezultātus. Konkrētāk, ja skata vai apakšizvēlne tiek izmantota kā avota tabula (DATA definīcijā pa labi no “FROM”), karšu serverim ir grūtāk automātiski noteikt katras rindas unikālo identifikatoru un arī SRID par galdu. Klauzula LIETOŠANA var nodrošināt karšu serveri ar šīm divām daļām šādi:

MapServer katrai rindai ir nepieciešams unikāls ID, lai identificētu rindu, veicot kartes vaicājumus. Parasti tā identificē primāro atslēgu no sistēmas tabulām. Tomēr skatiem un apakšizlasēm automātiski nav zināma unikāla kolonna. Ja vēlaties izmantot MapServer vaicājumu funkcionalitāti, jums jāpārliecinās, vai jūsu skatā vai apakšizlasē ir unikāli novērtēta kolonna, un deklarējiet to ar USING UNIQUE. Piemēram, šim nolūkam varat skaidri atlasīt tabulas primāro atslēgu vērtības vai jebkuru citu kolonnu, kas tiek garantēta kā unikāla rezultātu kopai.

"Kartes pieprasīšana" ir darbība, noklikšķinot uz kartes, lai pieprasītu informāciju par kartes funkcijām šajā atrašanās vietā. Nejauciet "karšu vaicājumus" ar SQL vaicājumu DATA definīcijā.

PostGIS ir jāzina, kuru telpisko atsauču sistēmu ģeometrijas izmanto, lai pareizos datus atgrieztu MapServer. Parasti šo informāciju ir iespējams atrast PostGIS datu bāzes tabulā "geometry_columns", taču tas nav iespējams tabulām, kuras tiek veidotas lidojumā, piemēram, apakšizlasēm un skatiem. Tātad opcija USING SRID = ļauj DATA definīcijā norādīt pareizo SRID.

6.1.4. Piemēri

Sāksim ar vienkāršu piemēru un virzīsimies augšup. Apsveriet šādu MapServer slāņa definīciju:

Šajā slānī visu ceļu ģeometrija ceļu tabulā tiks parādīta kā melnas līnijas.

Tagad pieņemsim, ka mēs vēlamies parādīt tikai lielceļus, līdz mēs esam pietuvināti vismaz 1: 100000 mērogam - šo efektu sasniegs nākamie divi slāņi:

Pirmais slānis tiek izmantots, ja mērogs ir lielāks par 1: 100000, un kā melnās līnijas parāda tikai "šosejas" tipa ceļus. Izmantojot opciju FILTER, tiek parādīti tikai "šosejas" tipa ceļi.

Otro slāni izmanto, ja mērogs ir mazāks par 1: 100000, un šosejas tiks attēlotas kā dubultbiezas sarkanas līnijas, bet citi ceļi - kā parastas melnas līnijas.

Tātad, mēs esam paveikuši pāris interesantas lietas, izmantojot tikai MapServer funkcionalitāti, taču mūsu DATA SQL paziņojums ir palicis vienkāršs. Pieņemsim, ka ceļa nosaukums ir saglabāts citā tabulā (kāda iemesla dēļ), un mums ir jāveic savienojums, lai to iegūtu un iezīmētu mūsu ceļus.

Šis anotācijas slānis visiem ceļiem pievieno zaļās etiķetes, kad mērogs samazinās līdz 1: 20000 vai mazāk. Tas arī parāda, kā izmantot SQL savienojumu DATA definīcijā.


4 Atbildes 4

Izmantojiet ST_DumpPoints (), lai izmestu daudzstūra punktus, pēc tam atlasiet no šīs kārtības, izmantojot ST_Distance līdz A ierobežojumam 2.?

(pieņem, ka šī ir iekšēja atlase, kur poli ir daudzstūris, A ir punkts, ar kuru salīdzināt, un ģeom ir viena no salīdzināmā poli punkta ģeom kolonna)

Robežpoligonā parasti nav otra tuvākā punkta, ja iekļaujat līnijas. Tāpat kā nav reāla skaitļa, kas būtu vistuvāk nullei. Vai nu jūs vēlaties ņemt vērā tikai punktus pie stūriem, kā Markus iesaka. Vai arī jums ir tikai viens tuvākais punkts.

1) kreisā lauka idejas veids, bet, lai atrastu otrais- tuvākais punkts galamērķim, kāpēc gan neatrast tuvāko punktu jau atrastajam punktam?

2) Vai, vairāk germaine uz jūsu konkrēto jautājumu,

  • atrast punktu kopu kādā saprātīgā punkta diapazonā,
  • atrodiet šīs kopas krustpunktu ar punktu kopu, kas atrodas uz daudzstūra malas (kas, manuprāt, var būt vēl viena funkcija PostGIS, kādu laiku nav izmantojusi postG, tāpēc es neesmu pārliecināts)

3) Turpmāk kreisajā laukā izmetiet daļu datu kopas Mongo un izmantojiet funkciju $ near. http://docs.mongodb.org/manual/reference/operator/near/

Es pieņemu, ka vēlaties atrast daudzstūra malu, kas iet vistuvāk attiecīgajam punktam

Lai iegūtu punkta “C” attālumu “d” no līnijas [A, B], vispirms pārtulkojiet visus punktus, lai A būtu 0,0

Pēc tam normalizējiet B, lai tā garums būtu 1,0

Atrodiet garumu no A, kas ir taisnā leņķī pret C

Neesat pārliecināts, kā to izdarīt SQL. Jums būs jādara iepriekšminētais katrai poligona malai un pēc tam jāatrod mazākā vērtība 'd'

Starp citu, B un C šķērsprodukta zīme tagad jums pateiks, vai punkts atrodas daudzstūra iekšpusē, vai nē


Kā grupēt, lai MySQL iegūtu MultiPoint / GeometryCollection?

Mēģinot grupēt savu fix_geom kolonnu MultiPoint (vai GeometryCollection) pēc SubjectID, piemēram:

es saņemu tabulu ar daudzpunktu ģeometriju, bet tajā ir tikai viens punkts, nevis daudz to, ko vēlētos tur redzēt.

Vai kāds var man pateikt, ko es daru nepareizi?

Priekā un liels paldies jau iepriekš, Olaf


Dokumentācija

ActiveRecord PostGIS adapteris

Adapteris activerecord-postgis nodrošina ActiveGecord piekļuvi ģeotelpiskās datubāzes PostGIS funkcijām. Tas paplašina standarta postgresql adapteri, lai sniegtu atbalstu telpisko datu tipiem un funkcijām, ko pievieno PostGIS paplašinājums. Tas izmanto RGeo bibliotēku, lai attēlotu telpiskos datus rubīnā.

Adapteris nodrošina trīs pamata iespējas:

Pirmkārt, tas nodrošina telpiskās migrācijas. Tas paplašina ActiveRecord migrācijas sintaksi, lai atbalstītu telpiski ierakstītu kolonnu un telpisko indeksu izveidi. Jūs varat kontrolēt dažādus PostGIS piedāvātos atribūtus, piemēram, srid, dimension un geographic vs geometric math.

Otrkārt, tas atpazīst telpiskos tipus un pareizi tos met RGeo ģeometrijas objektos. Adapteris var automātiski konfigurēt šos objektus, pamatojoties uz srid un dimensiju datu bāzes tabulā, vai arī jūs varat pateikt, lai datus pārveidotu citā formā. Atribūtu datus var iestatīt arī, izmantojot WKT formātu.

Treškārt, tas ļauj vaicājumos iekļaut vienkāršus telpiskos datus. WKT formāta datus un RGeo objektus var iegult klauzulās.

Adapterim nepieciešamas PostgreSQL 9.0+ un PostGIS 2.4+.

Šeit ir izplatītas metodes PostGIS instalēšanai, bet detalizētākas metodes var atrast instalēšanas rokasgrāmatā.

PostGIS, iespējams, ir pieejams kā izvēles pakotne, izmantojot Postgresql instalētāju. Ja nē, skatiet instalēšanas rokasgrāmatu.

JRuby atbalsts Rails 4.0 un 4.1 tika pievienots versijā 2.2.0

7.x versija atbalsta ActiveRecord 6.1

Versija 6.x atbalsta ActiveRecord 6.0

5.x versija atbalsta ActiveRecord 5.1 un 5.2

4.x versija atbalsta ActiveRecord 5.0

Versija 3.x atbalsta ActiveRecord 4.2

Versija 2.x atbalsta ActiveRecord 4.0.x un 4.1.x

Ja izmantojat versiju 2.x, izlasiet versiju 2.x README

Versija 0.6.x atbalsta ActiveRecord 3.x

Ja izmantojat versiju 0.6.x, jums jāizlasa versija 0.6.x / 2.x README

Lūdzu, izlasiet PostGIS 1 piezīmes, ja vēlaties izmantot adapteri ar vecāku PostGIS versiju.

Lai izmantotu postgis adapteri, jums ir jāpārveido fails config / database.yml. Vismaz jums būs jāmaina adaptera lauks no postgresql uz postgis. Ieteicamā konfigurācija:

Ja PostGIS paplašinājumu esat instalējis shēmā, kas nav publiska, kas ir noklusējums, pievienojiet šo shēmu savam schema_search_path:

Šeit ir dažas citas atbalstītās opcijas:

Šis adapteris izmanto rgeo gem, kam ir papildu atkarības. Plašāku informāciju, lūdzu, skatiet README dokumentācijā: https://github.com/rgeo/rgeo

Telpisko sliežu lietotnes izveide

Šajā sadaļā ir aprakstīta jaunas Rails lietojumprogrammas sākšana no jauna. Ja jums ir jāpievieno ģeotelpiskās iespējas esošai Rails lietojumprogrammai (t.i., jums jāpārvērš telpiska datu bāze par telpisku datu bāzi), skatiet sadaļu "Datu bāzes jaunināšana ar telpiskām funkcijām".

Lai izveidotu jaunu lietojumprogrammu Rails, izmantojot activerecord-postgis-adapter, sāciet, izmantojot postgresql adapteri.

Pievienojiet Gemfile adaptera dārgakmeni:

Kad esat iestatījis datu bāzes konfigurāciju, palaidiet:

lai izveidotu savu attīstības datu bāzi. Adapteris pievienos PostGIS paplašinājumu jūsu datu bāzei.

Kad esat instalējis adapteri, rediģējiet config / database.yml, kā aprakstīts iepriekš.

Esošās datu bāzes jaunināšana

Ja jums jau ir lietotne Rails, kas izmanto Postgres, un vēlaties pievienot ģeotelpiskās funkcijas, rīkojieties šādi.

Vispirms pievienojiet gem activerecord-postgis-adapter Gemfile un atjauniniet paketi, palaižot paketes instalēšanu.

Pēc tam modificējiet savu config / database.yml failu, lai izsauktu postgis adapteri, kā aprakstīts iepriekš.

Kad esat iestatījis datu bāzes konfigurācijas, palaidiet:

Šis grābekļa uzdevums pievieno PostGIS paplašinājumu jūsu esošajai datu bāzei.

Lai saglabātu telpiskos datus, jāizveido kolonna ar telpisko tipu. PostGIS nodrošina dažādus telpiskos veidus, tostarp punktu, līnijpārvadājumu, daudzstūru un dažāda veida kolekcijas. Šie veidi ir definēti Open Geospatial Consortium izstrādātajā standartā. Varat norādīt opcijas, kas norāda jūsu saglabāto vērtību koordinātu sistēmu un koordinātu skaitu.

Activerecord-postgis-adapter paplašina ActiveRecord migrācijas sintaksi, lai atbalstītu šos telpiskos tipus. Šis piemērs tabulā izveido piecas telpiskās kolonnas:

Pirmā kolonna "shape1" ir izveidota ar tipu "geometry". Šī ir vispārēja "bāzes klase" telpiskajiem tipiem, uz kuriem kolonna paziņo, ka tajā var būt vērtības jebkurš telpiskais tips.

Otrajā kolonnā "shape2" tiek izmantota stenogrāfijas sintakse tam pašam tipam kā slejai shape1. Kolonnu var izveidot, izsaucot kolonnu vai tieši izsaucot tipa nosaukumu.

Trešajai kolonnai "ceļš" ir noteikts ģeometriskais tips line_string. Tas arī norāda SRID (telpiskās atsauces ID), kas norāda, kurā koordinātu sistēmā tā sagaida datus. Kolonnā tagad ir "ierobežojums", tā pieņems tikai LineString datus un tikai datus, kuru SRID ir 3785.

Ceturtajai kolonnai "lonlat" ir st_point tips un tā pieņem tikai Point datus. Turklāt kolonnu deklarē kā "ģeogrāfisku", kas nozīmē, ka tā pieņem garuma / platuma datus un veic aprēķinus, piemēram, attālumus, izmantojot sfērisko domēnu.

Piektā kolonna "lonlatheight" ir ģeogrāfisks (garuma / platuma) punkts, kurā ir iekļauta arī trešā "z" koordināta, kuru var izmantot, lai saglabātu informāciju par augstumu.

Šie ir datu tipi, kurus saprot PostGIS un kuri ir pakļauti activerecord-postgis-adapter:

  • : ģeometrija - jebkurš ģeometriskais tips
  • : st_point - punktu dati
  • : line_string - LineString dati
  • : st_polygon - daudzstūra dati
  • : geometry_collection - jebkura veida kolekcija
  • : multi_point - Punktu kolekcija
  • : multi_line_string - LineStrings kolekcija
  • : multi_polygon - Daudzstūru kolekcija

Tālāk ir norādītas iespējas, kuras saprot adapteris:

  • : geographic - ja iestatīts uz true, izveidojiet PostGIS ģeogrāfijas kolonnu garuma / platuma datiem pa sfērisku domēnu, pretējā gadījumā izveidojiet ģeometrijas kolonnu plakanā koordinātu sistēmā. Noklusējums ir nepatiesa. Tas nozīmē arī: srid iestatīts uz 4326.
  • : srid - kolonnai iestatiet SRID ierobežojumu. Noklusējums ir 4326 ģeogrāfijas kolonnai vai -1 ģeometrijas kolonnai. Ņemiet vērā, ka pašlaik PostGIS (sākot no 2.0 versijas) ģeogrāfisko kolonnu pieprasījumam ir jābūt SRID 4326, tāpēc šis ierobežojums ģeogrāfisko kolonnu gadījumā ir ierobežots.
  • : has_z - norādiet, ka šīs kolonnas objektos ir Z koordinātas. Noklusējums ir nepatiesa.
  • : has_m - norādiet, ka objektos šajā kolonnā ir M koordināta. Noklusējums ir nepatiesa.

Lai izveidotu PostGIS telpisko indeksu, pievienojiet savam indeksam, izmantojot:: gist:

Modeļi var arī definēt atribūtus, izmantojot iepriekš minētos datu tipus un opcijas.

centroid tabulā spatial_models nebūs saistītas kolonnas, bet visi ģeometrijas objekti, kas piešķirti centrroid atribūtam, tiks nodoti ģeogrāfiskā punktā.

Punktu un daudzstūru veidi ar ActiveRecord 4.2+

Pirms 3. versijas tika atbalstīti punktu un daudzstūru veidi. Programmā ActiveRecord 4.2 Postgresql adapteris pievienoja atbalstu vietējiem Postgresql punktu un daudzstūru tipiem, kas ir pretrunā ar šī adaptera vienādu nosaukumu tipiem. PostGIS punkta tipam jābūt atsaucei kā st_point, un PostGIS daudzstūra tipam jābūt atsaucei kā st_polygon.

ActiveRecord lietderība izriet no tā, kā tā automātiski konfigurē klases, pamatojoties uz datu bāzes struktūru un shēmu. Ja datu bāzes kolonnai ir vesela skaitļa tips, ActiveRecord automātiski apmaina datus uz rubīna skaitli. Tādā pašā veidā activerecord-postgis-adapter automātiski pārsūta telpiskos datus uz atbilstošo RGeo datu tipu.

RGeo piedāvā lielāku elastību sava tipa sistēmā, nekā to var interpretēt tikai, analizējot datu bāzes kolonnu. Piemēram, jūs varat konfigurēt RGeo objektus, lai parādītu noteiktas darbības, kas saistītas ar to sērijveidošanu, validāciju, koordinātu sistēmu vai aprēķinu. Šie iestatījumi ir ietverti RGeo rūpnīcā, kas saistīta ar objektu.

Varat konfigurēt adapteri, lai datiem, kas saistīti ar katru datu bāzes veidu, izmantotu noteiktu rūpnīcu (t.i., noteiktu iestatījumu kombināciju).

Lūk, piemērs, izmantojot Geos noklusējuma rūpnīcu:

Ģeogrāfisko kolonnu noklusējuma telpiskā rūpnīca ir RGeo :: Geographic.spherical_factory. Dekarta kolonnu noklusējuma telpiskā rūpnīca ir RGeo :: Cartesian.preferred_factory. Ja šie noklusējumi ir pareizi, jums nav jākonfigurē SpatialFactoryStore.

Lai iegūtu plašāku SpatialFactoryStore skaidrojumu, skatiet rgeo-activerecord README

Versijā 7.0.0+ reģistra otrā argumenta atribūti tiks parsēti, lai mēģinātu saskaņot vienu no katra lauka gaidāmajām vērtībām. Tas var izjaukt esošās veikala konfigurācijas.

Skatiet visu pieņemto lauku paredzamo vērtību sarakstu rgeo-activerecord docs.

Dažas piezīmes par Heroku izvietošanu skatiet wiki ierakstā un saistītajā izdevumā.

Piezīme: RGeo meklē Heroku lietotāju, kas palīdzētu formalizēt / paplašināt wiki. Ja jūs interesē, lūdzu, atveriet PR ar jaunu md failu, kuru var nokopēt wiki.

Darbs ar telpiskajiem datiem

Protams, jūs izmantojat šo adapteri, jo vēlaties darboties ar ģeotelpiskajiem datiem savos ActiveRecord modeļos. Kad esat instalējis adapteri, iestatījis datu bāzi un veicis migrēšanu, jūs varat tieši mijiedarboties ar telpiskajiem datiem savos modeļos kā RGeo objektus.

RGeo ir nozares standarta OGC vienkāršo funkciju specifikācijas Ruby ieviešana. Tas ir datu tipu kopums, kas var attēlot dažādus ģeotelpiskos objektus, piemēram, punktus, līnijas, daudzstūrus un kolekcijas. Tas nodrošina arī telpiskās analīzes operāciju standarta komplektu, piemēram, krustojumu vai norobežojošo lodziņu aprēķināšanu, garuma vai laukuma aprēķināšanu utt. Mēs iesakām pārlūkot RGeo dokumentāciju, lai skaidrāk izprastu tās iespējas. Pagaidām vienkārši ņemiet vērā, ka datu vērtības, ar kurām strādāsit, ir visi RGeo ģeometrijas objekti.

Telpisko kolonnu lasīšana un rakstīšana

Piekļūstot telpiskajam atribūtam savā ActiveRecord modelī, tas jums tiek piešķirts kā RGeo ģeometrijas objekts (vai nulle atribūtiem, kas pieļauj nulles vērtības). Pēc tam jūs varat izsaukt objekta RGeo api. Piemēram, ņemiet vērā MySpatialTable klasi, ar kuru mēs strādājām iepriekš:

Vērtības RGeo rūpnīcu nosaka tas, kā konfigurējāt ActiveRecord klasi, kā aprakstīts iepriekš. Šajā gadījumā mēs skaidri iestatījām sfērisku rūpnīcu šādai kolonnai: lonlat:

Telpisko atribūtu var iestatīt, sniedzot RGeo ģeometrijas objektu vai sniedzot ģeometrijas WKT virknes attēlojumu. Ja tiek sniegta virkne, activerecord-postgis-adapter mēģinās to parsēt kā WKT un attiecīgi iestatīs vērtību.

Ja WKT parsēšana neizdodas, pašreizējā vērtība klusībā tiks iestatīta uz nulli. Tomēr nākotnē tas radīs izņēmumu.

Ja iestatāt RGeo objekta vērtību, rūpnīcai jāatbilst atribūta rūpnīcai. Ja rūpnīcas nesakrīt, activerecord-postgis-adapter mēģinās nodot vērtību pareizajai rūpnīcai.

Tomēr, ja jūs mēģināt iestatīt vērtību nepareizam tipam, piemēram, iestatot līnijas līnijas atribūtu punkta vērtībai, mēģinot saglabāt ierakstu, jūs saņemsit izņēmumu no Postgres.

Jūs varat izveidot vienkāršus vaicājumus, pamatojoties uz pārstāvības vienlīdzību, tāpat kā skalārā kolonnā:

Ņemiet vērā, ka šajos vaicājumos tiek izmantota pārstāvības vienlīdzība, tas nozīmē, ka tie atgriež ierakstus, kur lonlat vērtība precīzi atbilst norādītajai vērtībai. Neatbilst 0,00001 grādu starpība, kā arī atšķirīgs vienas un tās pašas ģeometrijas attēlojums (piemēram, daudzpunkts ar vienu elementu). Vienlīdzības vaicājumi parasti nav tik noderīgi reālās pasaules lietojumprogrammās. Parasti, ja vēlaties veikt telpisku vaicājumu, jūs meklēsit, teiksim, visus punktus noteiktā apgabalā. Šiem vaicājumiem jums būs jāizmanto standarta telpiskās SQL funkcijas, ko nodrošina PostGIS.

Lai veiktu sarežģītākus telpiskos vaicājumus, varat izmantot paplašināto Arel saskarni, kas iekļauta activerecord-postgis-adapterī. Funkcijas pieņem WKT virknes vai RGeo funkcijas.

Plašāku informāciju par uzlabotiem telpiskajiem vaicājumiem skatiet vietnē rgeo-activerecord.

Ja telpiskā kolonna ir savienota ar citu modeli, srid un geographic netiek automātiski secināti, un pēc noklusējuma tie pēc noklusējuma ir 0 un false. Lai pareizi secinātu šīs opcijas pēc pievienošanās, mērķa tabulā ir jāizveido atribūts.

Telpiskā datu bāze ir tāda, kas ietver datu tipu, funkciju, tabulu un citu objektu kopu, kas saistīti ar ģeotelpiskajiem datiem. Kad šie objekti atrodas jūsu datu bāzē, varat tos izmantot, lai uzglabātu un pieprasītu tādus telpiskos objektus kā punkti, līnijas un daudzstūri.

PostGIS ir PostgreSQL paplašinājums, kas sniedz definīcijas objektiem, kas jāpievieno datu bāzē, lai iespējotu ģeotelpiskās iespējas.

Veidojot Rails datu bāzi, kā aprakstīts iepriekš sadaļā par instalēšanu un konfigurēšanu, activerecord-postgis-adapter automātiski izsauc PostGIS, lai pievienotu datu bāzei atbilstošās definīcijas. Mēģinot izsaukt funkciju POSTGIS_VERSION, varat noteikt, vai jūsu datu bāzē ir pareizas definīcijas.

Standarta telpiskajās datu bāzēs ir arī tabula ar nosaukumu spatial_ref_sys. Šajā tabulā ietilpst "telpisko atskaites sistēmu" vai koordinātu sistēmu kopa, piemēram, WGS84 platums un garums, vai Mercator projekcija. Telpiskās datubāzes parasti ietver arī tabulu, ko sauc par geometry_columns, kurā ir informācija par katru datu bāzes kolonnu, kas ietver ģeometriskos datus. Pēdējās PostGIS versijās geometry_columns faktiski nav tabula, bet skats sistēmas katalogos.

Piedāvājumi ir laipni gaidīti. Norādījumus skatiet sadaļā CONTRIBUTING.md.

Atbalsts ir pieejams arī vietējo lietotāju google grupā vietnē https://groups.google.com/group/rgeo-users

Daniels Azuma ir PostGIS adaptera un tā atbalstošo bibliotēku (ieskaitot RGeo) autors.


Šo parametru var iestatīt uz Encoded Polyline, Esri JSON, FME Binary, FME XML, Geo (Microformat), Geohash, GeoJSON, GeoRSS Simple Encoding, Geotagging GeoSMS (RFC 5870), GML, heksadecimāli kodētu FME bināru, heksadecimālu kodētu Labi pazīstams binārs (wkbhex), ISO 6709 ģeogrāfiskais punkts, KML, MGRS, Microsoft SQL Server binārs, OGC Open GeoSMS, OGC labi zināms binārs (wkb), OGC labi zināms teksts (wkt), parsējams kodēts FME XML vai QlikMaps kodēts polyline .

Visefektīvākais un patiesākais ģeometrijas attēlojums ir FME Binary, un tas ir jāizmanto vairumā gadījumu. Visos FME attēlojumos var iekļaut visus FME uzlabotās ģeometrijas aspektus, ieskaitot mērījumus un ceļus, kas sastāv no vairākiem lineāriem segmentiem, tomēr gan FME XML, gan Hex kodēti FME binārie attēlojumi uzliek zināmas papildu izmaksas tulkošanā starp iekšējo bināro attēlojumu un ASCII kodēto attēlojumu .

OGC varianti ir noderīgi, ja nepieciešama mijiedarbība ar citām OGC atbalsta sistēmām. Tomēr dažos ģeometrijas raksturlielumos šajos režīmos var būt pazaudētas, piemēram, jebkurš ceļš tiks saplacināts vienā līnijas gredzenā. Ja OGC labi pazīstamam tekstam un OGC labi zināmam bināram failam tiek norādīti pasākumi, tie tiks saglabāti kā "noklusējuma" (nenosaukts) pasākums ģenerētajā ģeometrijā.

Konvertējot no WKT vai WKB, ja norādītajam atribūtam ir tukša vērtība, objekta ģeometrija netiks ietekmēta un tiks parādīts brīdinājums. & # 160Šis ir svarīgi atcerēties, vai GeometryExtractor tika izmantots, lai izveidotu atribūtu, kas tika izmantots šajā transformatorā, jo šis transformators rada tukšu vērtību ikreiz, kad tas sastopas ar objektu bez ģeometrijas.

Opcija Parsable Encoded FME XML tiek izmantota, lai ņemtu transformatora Creator izmantoto ģeometrijas attēlojumu un no tā iestatītu ģeometriju.

GeoJSON, Esri JSON un GeoRSS kodējumi var nesaglabāt visus ģeometrijas raksturlielumus. Piemēram, loki tiks virzīti uz līnijām, bet elipses - uz daudzstūriem. GeoJSON neatbalsta pasākumus.

GML kodēšanas opciju izmanto GML ģeometriju de-serializēšanai. Ja avota ģeometrijā tiek atrasta vairāk nekā viena ģeometrija, tiek atgriezta ģeometriju kopa.

Kodēšanas opcija Geohash saglabā ģeometriju kā rakstzīmju virkni, kuru var dekodēt kā punktu vai taisnstūra laukumu.

OGC Open GeoSMS, Geotagging GeoSMS un Geo (Microformat) kodēšanas opcijas izvelk punktu no norādītā formāta.

ISO 6709 ģeogrāfisko punktu kodējumu izmanto, lai de-serializētu ISO 6709 ģeogrāfiskos punktus punktu ģeometrijās. Vairāku punktu ģeometrija tiek izveidota, ja avota datos ir vairāki ģeogrāfiski punkti.

Kodētā polilīna kodēšana ir noderīga, strādājot ar Google Maps API, un to var izmantot punktu, līniju un daudzstūru attēlošanai.

QlikMaps kodētā polilīna kodējums ir līdzīgs kodētajam polilīna kodējumam, taču to var izmantot arī, lai attēlotu virtuļus un vairākas zonas.

MGRS kodējumu izmanto, lai pārveidotu MGRS koda kodu garuma un platuma koordinātās. Ievades funkcijas ģeometrija tiks aizstāta ar punktu garuma / platuma vērtībās, kas iegūtas no MGRS koda.

Microsoft SQL Server bināro kodējumu izmanto ģeometriju de-serializēšanai no vietējā atmiņas formāta, kas tiek izmantots Microsoft SQL Server.

Kodētais ģeometrijas attēlojums, ko piešķirt objektam. Atribūtu var izvēlēties, ja tajā ir šī vērtība, vai tekstu var ievadīt tieši vai iegūt no darbvietas parametra.

Ja šis parametrs ir iestatīts uz Jā, ģeometrijas avotā norādītais atribūts tiks noņemts no iegūtās funkcijas. Šis parametrs neietekmē, ja atribūts nav norādīts.

Specifisko parametru kodēšana

Jūs varat izvēlēties atšifrēt ģeohash kā punktu vai taisnstūra laukumu. Ja dekodē kā punktu, informācija par apgabalu tiek saglabāta kā atribūti.

Ja ģeometrijas kodējums ir GML, šo parametru var izmantot, lai piespiestu interpretēt & ltgml: pos & gt un & ltgml: posList & gt noteiktā asu secībā.

Pārveidošanai izmantotais elipsoīds. Tas var būt jebkurš elipsoīda nosaukums, kuru atbalsta FME.

Izmantoto burtu veids var būt WGS84 vai Besels.

Ja ģeometrijas kodējums ir Microsoft SQL Server binārs, izvēlieties, vai tā ir sērijveida ģeometrija vai ģeogrāfija.

Ja ģeometrijas kodējums ir OGC labi pazīstams teksts, šo parametru var izmantot, lai kontrolētu precizitāti, kas tiek izmantota, pārveidojot skaitliskās virknes uz peldošo punktu.


Pieņemtie gadījumi

Priekš ĢeometrijaKolekcija piemēram, lai to pieņemtu, tam jābūt vai nu tukšam ĢeometrijaKolekcija vai visas instances, kurās ietilpst ĢeometrijaKolekcija instancei ir jāpieņem instances. Šis piemērs parāda pieņemtos gadījumus.

Šajā piemērā tiek parādīts System.FormatException, jo LinesString instancē ĢeometrijaKolekcija instance netiek pieņemta.

Derīgas instances

A ĢeometrijaKolekcija instance ir derīga, ja visi gadījumi, kas ietver ĢeometrijaKolekcija instances ir derīgas. Tālāk parādīti trīs derīgi ĢeometrijaKolekcija gadījumi un viens nederīgs gadījums.

@ g4 nav derīgs, jo Daudzstūris instancē ĢeometrijaKolekcija instance nav derīga.

Papildinformāciju par pieņemtajiem un derīgajiem gadījumiem skatiet sadaļā Punkts, MultiPoint, LineString, MultiLineString, Daudzstūris un Daudzpoligons


GeoDataFrame¶

GeoDataFrame ir tabulveida datu struktūra, kas satur GeoSeries.

Vissvarīgākais GeoDataFrame īpašums ir tas, ka tam vienmēr ir viena GeoSeries kolonna, kurai ir īpašs statuss. Šī GeoSeries tiek saukta par GeoDataFrame “ģeometriju”. Ja GeoDataFrame (vai tiek saukts tāds telpiskais atribūts kā apgabals) tiek izmantota telpiskā metode, šīs komandas vienmēr darbosies uz kolonnas “ģeometrija”.

Kolonnai “ģeometrija” - neatkarīgi no tās nosaukuma - var piekļūt, izmantojot ģeometrijas atribūtu (gdf.geometry), un ģeometrijas kolonnas nosaukumu var atrast, ierakstot gdf.geometry.name.

GeoDataFrame var saturēt arī citas kolonnas ar ģeometriskiem (formas) objektiem, bet tikai viena kolonna vienlaikus var būt aktīvā ģeometrija. Lai mainītu, kura kolonna ir aktīvā ģeometrijas kolonna, izmantojiet metodi GeoDataFrame.set_geometry ().

Piemērs, izmantojot pasaules GeoDataFrame:

Pašlaik kolonna ar nosaukumu “ģeometrija” ar valsts robežām ir aktīvā ģeometrijas kolonna:

Mēs varam arī pārdēvēt šo kolonnu par “apmales”:

Tagad mēs izveidojam centraīdus un padarām to par ģeometriju:

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

2. piezīme: 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, 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.

Saturs

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.


Skatīties video: PostgreSQL backup and restore database with Pgadmin4 (Septembris 2021).