Vairāk

PostgreSQL PostGIS ST_Point_Inside_Circle () rādiuss metros


Vispirms es gribētu teikt, ka man ir ļoti maz zināšanu un izpratnes par ĢIS (neskatoties uz plašo pieredzi ar Google Maps API). Šķiet, ka PostGIS pati par sevi ir pilnīgi jauna bumbas spēle.

Es nesen instalēju PostGIS (v2.1.5) ar savu PostgreSQL (v9.4) instanci, lai sāktu uzglabāt un strādāt ar ĢIS datiem. Pašlaik es izmantoju Google Maps API v3 DrawingManager, lai zīmētu daudzstūrus, apļus, taisnstūrus un marķierus, kas ir jāglabā datu bāzē un vēlāk jāielādē, lai daudzkārtņus atkal parādītu pakalpojumā Google Maps; Šīs formas tiks izmantotas arī dažādiem apkopotiem vaicājumiem.

Pašlaik man ir divi galdi. To sauc par “atrašanās vietām”, kurās tiks saglabāti daudzstūri, apļi un taisnstūri, kas izveidoti, izmantojot Google Maps zīmēšanas pārvaldnieku. Otrajā, ko sauc par "rawdata", būs ierakstu kopa ar POINT (lat, long) iekšpusē.

Pirmkārt, es pilnībā nesaprotu projekciju jēdzienu un to, kā tās darbojas, taču, pamatojoties uz tiešsaistē lasīto, aprēķini un precizitāte var ievērojami atšķirties. Es saprotu, ka Google Maps darbojas ar Web Mercator projekciju, kas, manuprāt, ir oficiāli pazīstama kā EPSG: 3857 projekcija (vai DRS), bet vēlamā metode ģeometrijas () formu saglabāšanai un apstrādei PostGIS ir EPSG: 4326. Tāpēc, atsaucoties uz tālāk norādītajiem tabulas izveides paziņojumiem, esmu izvēlējies saglabāt savus ģeometrijas datus EPSG: 4326 tabulās.

Vienkāršāka metode būtu saglabāt manu ģeometriju jaunākā ģeogrāfiskā formātā, taču es nevēlos uzspiest šos veiktspējas un funkcionalitātes trūkumus, jo strādāšu ar ievērojamu datu apjomu (simtiem tūkstošu, ja ne miljoniem ierakstu) ).

Es mēģinu pārbaudīt funkciju ST_Point_Inside_Circle (), taču šķiet, ka tā ir neprecīza, un es varu tikai tā pieņemt, jo funkcija sagaida grādus kā rādiusa parametru, tomēr Google Maps man sniedz rādiusu metros. Atsaucoties uz vietni http://resources.arcgis.com/en/help/main/10.1/index.html#//009t0000004v000000, esmu mēģinājis skaitītājus pārvērst grādos, reizinot skaitītājus ar 0,00001. Tomēr, jo lielāks rādiuss metros, jo neprecīzāks tas šķiet. Ko es varu darīt, lai sasniegtu precīzu rezultātu?

SELECT ST_Point_Inside_Circle (ST_SetSRID (ST_MakePoint (28.239418677985668, -25.75443387513752), 4326), 28.241967111825943, -25.759674774140656, (583 * 0.00001));

Google Maps ziņo par attālumu metros starp diviem punktiem (apļa centru un punktu) kā 637 metrus, tomēr ST_Point_Inside_Circle parāda patiesību, mēģinot pārvērst 583 par grādiem. Tas noved pie pieņēmuma, ka metrus nevar pārvērst grādos, izmantojot 0.00001.

Kā pareizi noteikt rādiusu ar skaitītājiem?


Neizlasot visas detaļas, es domāju:

Tā vietā jums vajadzētu izmantot ST_DWithin

Jums vajadzētu apraidīt pēc ģeogrāfijas veida vai vienkārši izmantot ģeogrāfijas veidu, nevis ģeoemtry veidu, kas liek ST_D darboties ar skaitītājiem, nevis grādiem

Tātad jūsu vaicājums būs aptuveni šāds:

SELECT ST_DWithin (ST_GeogFromText ('POINT (28.239418677985668 -25.75443387513752)'), ST_GeogFromText ('POINT (28.241967111825943 -25.759674774140656)'), 583);

Varat arī pārbaudīt attālumu, piemēram:

SELECT ST_Distance (ST_GeogFromText ('POINT (28.239418677985668 -25.75443387513752)'), ST_GeogFromText ('POINT (28.241967111825943 -25.759674774140656)');

Grādus nevar pārvērst metros, izmantojot tikai koeficientu. 1 lon grāds ir ļoti precīzs 0 metri pie poliem, bet aptuveni 40000/360 kilometri līdz ekvatoram.


Kartes ar React Native, Rails un PostgreSQL

Railsware ir uzņēmums, kas nodarbojas ar daudziem uzdevumiem un idejām, kas saistītas ar tīmekļa un mobilo ierīču izstrādi. Mūsu inženieri vienmēr meklē labāko risinājumu, lai optimizētu veiktspēju un budžetu. Railswarians galvenais redzējums ir liesa pieeja.

Šajā pārskatā mēs pārskatīsim ģeogrāfiskās atrašanās vietas meklēšanas funkcijas attīstību lietotāja pašreizējā atrašanās vietā. React Native tika izvēlēts kā ietvars, lai izveidotu vienotu lietojumprogrammu abām populārākajām operētājsistēmām tirgū, proti, iOS un Android. Aizmugures daļa tika ieviesta caur Rails kā tīmekļa ietvaru un PostgreSQL kā datu bāzi. Vai esat gatavs uzzināt detaļas un īpatnības, kā izmantot šādu pieeju mobilo lietotņu izstrādei? Laipni lūdzam lasīt mūsu pieredzi.

Sāksim mūsu publikāciju ar galvenajiem punktiem, kas saistīti ar frontend izstrādi. Tātad, izmantojot React Native, tiek atvērta lieta.


PostGIS 20, sākums

Šodien pirms divdesmit gadiem tika nosūtīts pirmais e -pasts postgis lietotāju adresātu sarakstā (tajā laikā tika mitināts vietnē yahoogroups.com), paziņojot par pirmo numurēto PostGIS laidienu.

PostGIS agrīnā vēsture bija cieši saistīta ar konsultāciju uzņēmumu, kuru es sāku pirms dažiem gadiem, Refractions Research. Mani pirmie līgumi beidzās ar Britu Kolumbijas (BC) provinču valdības vadītājiem, kuri savu īpatnējo iemeslu dēļ nevēlējās strādāt ar ESRI programmatūru, un tā rezultātā mūsu uzņēmums uzkrāja prasmes un pieredzi, kas pārsniedz lielāko daļu “ĢIS uzņēmumu” biznesam bija.

Mums labi pārvalda datu bāzes un FME. Mums izdevās Perl un galu galā Java. Mēs bijām vietējie eksperti vietēji izstrādātā (un tagad vairs nederīgā) datu analīzes rīkā ar nosaukumu Facet, kas bija mūsu uzņēmuma gaļa apmēram pirmos četrus gadus.

Šis Facet rīks bija galvenā daļa no “ūdensšķirtnes analīzes atlanta”, ko BC valdība pasūtīja Facet deviņdesmito gadu beigās. Mēs strādājām kā apakšuzņēmēji, veidojot analītiskās rutīnas, kas iesūc desmitiem vides slāņu, sasmalcina tos pa ūdensšķirtni un izspļauj kārtīgas tabulas un kartes, pa vienai katrai ūdensšķirtnei. Ņemot vērā laikmeta skaitļošanas jaudu, mums bija jāizmanto vairākas Sun darbstacijas, lai veiktu galīgo analīzi visā provincē, lai pārvaldītu darba rindu un izsekotu starpposma rezultātiem, mēs tos visus ievietojām PostgreSQL tabulās.

Sasmalcināto telpisko datu gabalu ievietošana kā lāses PostgreSQL iedvesmoja PostGIS. Šķita patiešām acīmredzami, ka mums ir iespējas izveidot interaktīvu reāllaika analīzes dzinēju ar visiem šiem apstrādātajiem datiem datu bāzē, ja mēs varētu tikai darīt vairāk ar lāsēm, nevis tikai tās iebāzt un izvilkt.


Izveidojiet vienkāršu Tableau karti ar PostgreSQL datiem

Kartes izveide Tableau ir vienkārša. Mēs varam pievienot telpisko kolonnu tukšai darblapai, un Tableau automātiski izveidos karti.

Pirmajā piemērā mēs apskatīsim ūdens apgabalu katrā apgabalā. Lai to vizualizētu, mēs izveidosim choropleth karti, kurā mēs mainīsim daudzstūra aizpildījuma krāsu, pamatojoties uz ūdens apgabalu. Šī ir klasiska ģeotelpiskā metode, lai ātri vizualizētu mūsu datu modeļus. Jums būs jāsadala daudzstūri, pievienojot vienu no identifikācijas izmēriem, piemēram, apgabala nosaukumu vai apgabala FIPS kodu. Varat arī izslēgt apkopotos pasākumus, lai jūs varētu mijiedarboties ar katru daudzstūri atsevišķi. Šajā piemērā izslēgsim apkopotos pasākumus, atverot izvēlni Analīze un noņemot atzīmi no Apkopotie pasākumi.

Tagad velciet Geom Measure uz detaļu plauktu, un pēc tam, voila, jums ir karte visiem ASV apgabaliem!

Domājat, no kurienes nāk fona karte? Ir lielisks Tableau emuāra ieraksts par Tableau vektoru flīzēm.

Ejam uz priekšu un krāsojam daudzstūrus pēc apgabala ūdens platības. Velciet ūdens apgabala (“Ūdens”) kolonnu uz krāsu plaukta, un jums vajadzētu redzēt, kā visa karte maina krāsu, bet lielākā daļa apgabala daudzstūru ir vienā krāsā.

Apskatot leģendu labajā pusē, jūs varat redzēt, ka ūdens diapazons ir no 0 līdz> 26 000 000 000. Ja paskatāmies uz “awater” histogrammu, mēs arī redzam, ka tai ir izteikti pa labi izliekts sadalījums (ņemiet vērā, ka X ass ir logaritmēta).

Lai pielāgotos šai šķībībai, mēs varam izveidot pielāgotu krāsu rampu, kas pārvieto krāsu rampas centru uz kaut ko ievērojami mazāku par vidējo. Tagad mums ir jauka karte, kurā redzami visi novadi, kas robežojas ar okeāniem un lielajiem ezeriem, kā arī tie, kuros ir daudz ezeru un upju. Līdz šim šī ir diezgan standarta kartēšana tabulā. Pāriesim pie dažiem interesantākiem lietošanas gadījumiem, izmantojot PostGIS un Tableau.


2.5. Bieži sastopamās problēmas instalēšanas laikā

Ir jāpārbauda vairākas lietas, ja instalēšana vai jaunināšana nenotiek tā, kā gaidījāt.

Pārbaudiet, vai esat instalējis PostgreSQL 9.6 vai jaunāku versiju un vai apkopojat to pašu PostgreSQL avota versiju, kas darbojas PostgreSQL versijā. Sajaukšanās var notikt, ja jūsu (Linux) izplatītājs jau ir instalējis PostgreSQL, vai arī esat citādi instalējis PostgreSQL un aizmirsis to. PostGIS darbosies tikai ar PostgreSQL 9.6 vai jaunāku versiju, un, ja izmantosit vecāku versiju, tiks parādīti dīvaini, negaidīti kļūdu ziņojumi. Lai pārbaudītu PostgreSQL versiju, kas darbojas, izveidojiet savienojumu ar datu bāzi, izmantojot psql, un izpildiet šo vaicājumu:

Ja izmantojat uz RPM balstītu izplatīšanu, varat pārbaudīt, vai nav iepriekš instalētu pakotņu, izmantojot apgr./min komandu šādi: apgr./min -qa | grep postgresql

Ja jaunināšana neizdodas, pārliecinieties, vai atjaunojat datu bāzē, kurā jau ir instalēta PostGIS.

Pārbaudiet arī, vai configure ir pareizi noteikusi PostgreSQL, Proj4 bibliotēkas un GEOS bibliotēkas atrašanās vietu un versiju.

Konfigurācijas izvade tiek izmantota, lai ģenerētu failu postgis_config.h. Pārbaudiet, vai mainīgie POSTGIS_PGSQL_VERSION, POSTGIS_PROJ_VERSION un POSTGIS_GEOS_VERSION ir iestatīti pareizi.


Skatīties video: How to Fix the Postgres Error: Role Does Not Exist for Rails Applications (Oktobris 2021).