Daha çox

PostGIS Kəsişməsi və Xüsusiyyətləri ümumiləşdirin


Mən ümumiyyətlə ArcGIS masa üstü istifadəçiyəm, amma PostGIS-dən daha çox istifadə etməyə başlamağı arzulayıram və çox az işləməliyəm. Hansı funksiyaları istifadə edəcəyinizə əmin deyiləm, inşallah kimsə kömək edə bilər.

Torpaq sahəsi / torpaq örtüyü təsnifatına (20 kateqoriya) əsaslanan bir çoxbucaqlı verilənlər bazasına (bir neçə milyon xüsusiyyət) sahibəm. Başqa bir verilənlər bazasında bir sıra bölgələrim var.

Bölgələrin hər biri üçün hər bir torpaq örtüyü təsnifatının sahəsini bilmək istərdim.

ArcGIS-də (daha kiçik bir verilənlər bazası olsaydı) əvvəlcə bölgəni birləşdirmə atribut cədvəlindəki çoxbucaqlıların hər birinə əlavə edəcəyini təsəvvür edərdim. Sonra bölgəyə və yerüstü təsnifata görə masada "ümumiləşdir" istifadə edin.

PostGIS / SQL-də bunu harada başlayacağınıza əmin deyiləm.

Yeniləmə:

Vay şükür ki, çox böyük kömək oldu.

Uzun müddətdir işləyir (44 saat!) İndi alıram:

DİQQƏT: TopologyException: (mövqe düzəliş edildi) LINESTRING (koordinatlar redaktə edildi) və LINESTRING (koordinatlar redaktə edildi) arasındakı noded olmayan kəsişmə tapıldı XATA: GEOS Kavşağı () səhv atdı! ********** Xəta ********** XATA: GEOS Kəsişməsi () bir səhv atdı! SQL vəziyyəti: XX000

Bunun orijinal məlumatlarda problem olduğunu düşünürəm - yalnız orijinal məlumatları nəzərdən keçirmək üçün bir vəziyyət və ya əvvəlcə bütün məlumat üçün topologiyanı necə yoxlaya bilərəm? Müəyyən səhvlərin qəbulu / emal toleransları ilə əlaqəli bir şey varmı?


Aşağıdakı cədvəl tərtibinə sahib olduğunuzu düşünsək

landcover (id, type, the_geom) region (id, name, the_geom)

Bölgə üzrə torpaq örtüyü tipinə görə sahə dəyərləri istifadə edilərək hesablana bilər

R.id, r.name, r.the_geom, l.type, Sum (ST_Area (ST_In qovşağı (l.the_geom, r.the_geom)))) SEÇİN l, the region r harada l.the_geom && r.the_geom GROUP .id, r.name, r.the_geom, l.type

ST_Intersection, qismən bir bölgə daxilində olan örtülü poliqonları hesablamaq üçün istifadə olunur.


Fəsil 4. PostGIS-dən istifadə: Məlumatların idarə edilməsi və sorğular

PostGIS tərəfindən dəstəklənən CİS obyektləri, OpenGIS Konsorsiumu (OGC) tərəfindən müəyyənləşdirilmiş "Sadə Xüsusiyyətlər" in üst hissəsidir. Versiya 0.9-dan etibarən, PostGIS OGC "SQL üçün sadə xüsusiyyətlər" spesifikasiyasında göstərilən bütün obyektləri və funksiyaları dəstəkləyir.

PostGIS, 3DZ, 3DM və 4D koordinatları dəstəyi ilə standartı genişləndirir.

4.1.1. OpenGIS WKB və WKT

OpenGIS spesifikasiyası məkan obyektlərini ifadə etməyin iki standart yolunu müəyyənləşdirir: Tanınmış Mətn (WKT) forması və Tanınmış İkili (WKB) forması. Həm WKT, həm də WKB, obyektin tipi və obyekti meydana gətirən koordinatlar haqqında məlumat ehtiva edir.

Xüsusiyyətlərin məkan obyektlərinin mətn təsvirlərinə (WKT) nümunələri aşağıdakılardır:

POLİGON ((0 0,4 0,4 ​​4,0 4,0 0), (1 1, 2 1, 2 2, 1 2,1 1))

ÇOX ÇOXLUK ((0 0,1 1,1 2), (2 3,3 2,5 4))

MULTIPOLİGON (((0 0,4 0,4 ​​4,0 4,0 0), (1 1,2 1,2 2,1 2,1 1)), ((-1 -1, -1 -2, -2 -2, -2 -1, -1 -1)))

GEOMETRİKOLTİKA (NÖQTƏ (2 3), LİNESTRİNQ (2 3,3 4))

OpenGIS spesifikasiyası, məkan obyektlərinin daxili yaddaş formatının məkan istinad sistemi identifikatorunu (SRID) ehtiva etməsini də tələb edir. Verilənlər bazasına daxil olmaq üçün məkan obyektləri yaradarkən SRID tələb olunur.

Bu formatların giriş / çıxışı aşağıdakı interfeyslərdən istifadə etməklə mümkündür:

Məsələn, bir OGC məkan obyekti yaratmaq və əlavə etmək üçün etibarlı bir insert ifadəsi belə olacaqdır:

4.1.2. PostGIS EWKB, EWKT və Kanonik Formalar

OGC formatları yalnız 2 ölçülü həndəsələri dəstəkləyir və əlaqəli SRID giriş / çıxış təsvirlərinə * heç vaxt * daxil edilmir.

PostGIS genişləndirilmiş formatları hazırda OGC birinin üst hissəsidir (hər bir etibarlı WKB / WKT etibarlı bir EWKB / EWKT), lakin bu gələcəkdə dəyişə bilər, xüsusən də OGC bizim uzantılarla ziddiyyət təşkil edən yeni bir formatla çıxsa. Beləliklə, bu xüsusiyyətə etibar etməməlisiniz!

PostGIS EWKB / EWKT əlavə 3dm, 3dz, 4d koordinatları dəstəyi və yerləşmiş SRID məlumatları.

Xüsusiyyətlərin genişləndirilmiş məkan obyektlərinin mətn təsvirlərinə (EWKT) nümunələr aşağıdakılardır.

SRID = 32632POINT (0 0) - SRID ilə XY

SRID = 4326MULTIPOINTM (0 0 0,1 2 1) - SRID ilə XYM

ÇOX ŞƏHƏRLİ ((0 0 0,1 1 0,1 2 1), (2 3 1,3 2 1,5 4 1))

POLİGON ((0 0 0,4 0 0,4 4 0,0 4 0,0 0 0), (1 1 0,2 1 0,2 2 0,1 2 0,1 1 0))

MULTIPOLİGON (((0 0 0,4 0 0,4 4 0,0 4 0,0 0 0), (1 1 0,2 1 0,2 2 0,1 2 0,1 1 0)), (( -1 -1 0, -1 -2 0, -2 -2 0, -2 -1 0, -1 -1 0)))

GEOMETRYCOLLECTIONM (POINTM (2 3 9), LINESTRINGM (2 3 4, 3 4 5))

MULTICURVE ((0 0, 5 5), DÖVRƏ (4 0, 4 4, 8 4))

POLİHEDRALSURFACE (((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)), ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), (( 0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)))

VÖEN (((0 0 0, 0 0 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 0 0 0)))

Bu formatların giriş / çıxışı aşağıdakı interfeyslərdən istifadə etməklə mümkündür:

Məsələn, bir PostGIS məkan obyekti yaratmaq və əlavə etmək üçün etibarlı bir daxiletmə ifadəsi belə olacaqdır:

Bir PostgreSQL tipli "kanonik formalar" sadə bir sorğu ilə əldə etdiyiniz (heç bir funksiya çağırışı olmadan) və sadə bir daxiletmə, yeniləmə və ya surət ilə qəbul edilməsinə zəmanət verilən təqdimatlardır. Postgis 'həndəsi' növü üçün bunlar:

Məsələn, bu bəyanat EWKT oxuyur və kanonik ascii giriş / çıxış prosesində HEXEWKB-nı qaytarır:

4.1.3. SQL-MM Bölüm 3

SQL Multimedia Proqramları Məkan spesifikasiyası bir sıra dairəvi interpolyasiya edilmiş əyriləri müəyyənləşdirərək SQL spesifikasiyası üçün sadə xüsusiyyətləri genişləndirir.

SQL-MM tərifləri 3dm, 3dz və 4d koordinatlarını əhatə edir, lakin SRID məlumatlarının yerləşdirilməsinə icazə vermir.

Tanınmış mətn uzantıları hələ tam dəstəklənmir. Bəzi sadə əyri həndəsələrin nümunələri aşağıda göstərilmişdir:

DÖVRƏ (0 0, 1 1, 1 0)

DÖVRƏ (0 0, 4 0, 4 4, 0 4, 0 0)

CIRCULARSTRING, xətti dünyadakı LINESTRING-ə bənzər əsas əyri növüdür. Tək bir seqment üçün üç nöqtə, başlanğıc və bitmə nöqtələri (birinci və üçüncü) və qövsdəki digər nöqtələr lazım idi. Bunun istisnası, başlanğıc və bitmə nöqtələrinin eyni olduğu qapalı bir dairə üçündür. Bu vəziyyətdə ikinci nöqtə qövsün mərkəzi, yəni dairənin əks tərəfi olmalıdır. Yayları bir-birinə bağlamaq üçün əvvəlki qövsün son nöqtəsi, LİNESTRING-dəki kimi, sonrakı qövsün ilk nöqtəsi olur. Bu o deməkdir ki, etibarlı dairəvi simli 1-dən çox yağlanmış nöqtələrin tək sayı olmalıdır.

QARŞI VURMA (DÖVRƏ (0 0, 1 1, 1 0), (1 0, 0 1))

Mürəkkəb əyri həm əyri (dairəvi) seqmentləri, həm də xətti seqmentləri olan tək, davamlı əyridir. Bu o deməkdir ki, yaxşı formalaşmış komponentlərə sahib olmaqla yanaşı, hər bir komponentin son nöqtəsi (sonuncusu xaricində) aşağıdakı komponentin başlanğıc nöqtəsi ilə üst-üstə düşməlidir.

CURVEPOLYGON (DÖVRƏ (0 0, 4 0, 4 4, 0 4, 0 0), (1 1, 3 3, 3 1, 1 1))

Bir döngə çoxbucağındakı nümunə birləşmə əyrisi: CURVEPOLYGON (COMPOUNDCURVE (CIRCULARSTRING (0 0,2 0, 2 1, 2 3, 4 3), (4 3, 4 5, 1 4, 0 0)), CIRCULARSTRING (1.7 1, 1.4 0.4, 1.6 0.4, 1.6 0.5, 1.7 1))

CURVEPOLYGON, xarici bir halqa və sıfır və ya daha çox daxili halqalı bir poliqona bənzəyir. Fərq ondadır ki, bir halqa dairəvi simli, xətti simli və ya mürəkkəb simli forma ala bilər.

PostGIS 1.4-dən etibarən PostGIS bir əyri çoxbucaqlı mürəkkəb əyriləri dəstəkləyir.

MULTICURVE ((0 0, 5 5), DÖVRƏ (4 0, 4 4, 8 4))

MULTICURVE, xətti simlər, dairəvi simlər və ya qarışıq simləri əhatə edə bilən döngələr toplusudur.

ÇOKLUKLU (CURVEPOLYGON (DÖVRƏ (0 0, 4 0, 4 4, 0 4, 0 0), (1 1, 3 3, 3 1, 1 1))), ((10 10, 14 12, 11 10, 10 10 ), (11 11, 11.5 11, 11 11.5, 11 11)))

Bu (xətti) çoxbucaqlı və ya əyri çoxbucaqlı ola bilən səthlər toplusudur.

1.4-dən əvvəl PostGIS bir döngə çoxbucağındakı qarışıq əyriləri dəstəkləmir, lakin PostGIS 1.4 və yuxarıdan yuxarı bir döngə çoxbucağında Qarışıq əyrilərin istifadəsini dəstəkləyir.

SQL-MM tətbiqetməsindəki bütün üzən nöqtə müqayisələri, hazırda 1E-8 olaraq təyin edilmiş bir tolerantlıq səviyyəsində aparılır.


Aşağıda verilmiş funksiyalar SQL / MM 3 standartına uyğun PostGIS funksiyalarıdır

SQL-MM bütün həndəsə konstruktorlarının standart SRID-i 0 olaraq təyin edir.

    - İki 3D həndəsi müəyyən bir 3D məsafədədirsə, doğru qayıdır Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM? - Proqnozlaşdırılan vahidlərdə iki həndəsə arasındakı 3D kartezyen minimum məsafəni (məkan ref əsasına əsasən) qaytarır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM? - İki həndəsə 3-də fəza şəklində kəsişirsə, geriyə qayıdır - yalnız nöqtələr, linestrings, çoxbucaqlılar, polyhedral səth (sahə) üçün. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3:? - Yeni bir kənar əlavə edin və əgər bir üzü bölərsə, orijinal üzü dəyişdirin və yeni bir üz əlavə edin. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM: Topo-Geo və Topo-Net 3: Rutin Təfərrüatlar: X.3.13 - Yeni bir kənar əlavə edin və əgər bir üzü bölərsə, orijinal üzünü silin və iki yeni üz ilə əvəz edin. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM: Topo-Geo və Topo-Net 3: Rutin Təfərrüatlar: X.3.12 - Mövcud iki təcrid olunmuş qovşaq anodu və başqa bir düyünü birləşdirən topologiyaya həndəsə ilə müəyyənləşdirilmiş təcrid olunmuş kənar əlavə edir və yeni kənarın kənar id-ini qaytarır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM: Topo-Geo və Topo-Net 3: Rutin Təfərrüatlar: X.3.4 - Bir topologiyada üzə təcrid olunmuş bir düyün əlavə edir və yeni düyünün nodeidini qaytarır. Üz boşdursa, qovşaq yenə də yaradılır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM: Topo-Net Rutinlər: X + 1.3.1 - Çoxbucaqlı həndəsənin sahəsini qaytarır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 8.1.2, 9.5.3 - SRID meta məlumatları olmadan həndəsə / coğrafiyanın tanınmış ikili (WKB) təqdimatını qaytarın. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 5.1.37 - SRID meta məlumatları olmadan həndəsə / coğrafiyanın tanınmış mətni (WKT) təqdimatını qaytarın. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 5.1.25 - Həndəsənin sərhədini qaytarır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 5.1.14 - Həndəsədən müəyyən bir məsafədə olan bütün nöqtələri əhatə edən bir həndəsi qaytarır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 5.1.17 - Həndəsənin həndəsi mərkəzini qaytarır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 8.1.4, 9.5.5 - Topoloji quruluşuna təsir etmədən kənarın formasını dəyişdirir. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM: Topo-Geo və Topo-Net 3: Rutin X.3.6 - A-nın xaricində heç bir B nöqtəsi qalmırsa və B-nin iç hissəsinin ən azı bir hissəsi içəridədirsə, həqiqəti qaytarır. of A. Bu metod SQL / MM spesifikasiyasını tətbiq edir. SQL-MM 3: 5.1.31 - Həndəsənin qabarıq gövdəsini hesablayır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 5.1.16 - Həndəsənin koordinat ölçüsünü qaytarın. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 5.1.3 - Verilmiş boş topologiyaya həndəsələr toplusunu əlavə edir və uğuru izah edən bir mesaj göndərir. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM: Topo-Geo və Topo-Net 3: Rutin Təfərrüatlar - X.3.18 - İki həndəsənin hamısı deyil, ümumiyyətlə daxili nöqtələri varsa, doğru qayıdır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 5.1.29 - Döngələri ehtiva edən həndəsəni xətti həndəsəyə çevirir. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 7.1.7 - Həndəsənin A həndəsəsi ilə kəsişməyən hissəsini təmsil edən bir həndəsəni qaytarır. Bu metod SQL / MM spesifikasiyasını tətbiq edir. SQL-MM 3: 5.1.20 - Həndəsənin topoloji ölçüsünü qaytarır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 5.1.2 - İki həndəsənin məkan kəsişməməsi halında (ortaq nöqtələri yoxdur) doğru qayıdır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 5.1.26 - İki həndəsə və ya coğrafiya dəyəri arasındakı məsafəni qaytarır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 5.1.23 - LineString və ya CircularLineString-in son nöqtəsini qaytarır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 7.1.4 - Həndəsənin hüdud qutusunu təmsil edən bir həndəsi qaytarır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 5.1.15 - İki həndəsə fəzada eyni nöqtələr qrupunu daxil edərsə, doğru qayıdır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 5.1.24 - Bir çoxbucaqlının xarici halqasını təmsil edən bir LineString qaytarır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 8.2.3, 8.3.3 - GML təqdimatından müəyyən bir ST_Geometry dəyərini qaytarın. Bu ST_GeomFromGML üçün bir təxəllüs adıdır Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 5.1.50 (əyri dəstəyi xaricində). - Verilən SRID ilə WKT kolleksiyasından Həndəsə kolleksiyası hazırlayır. SRID verilmədiyi təqdirdə, 0-a bərabərdir. Bu metod SQL / MM spesifikasiyasını tətbiq edir. - Tanınmış Mətn nümayəndəliyindən (WKT) müəyyən bir ST_Geometry dəyərini qaytarın. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 5.1.40 - Tanınmış ikili həndəsə təsvirindən (WKB) və isteğe bağlı SRID-dən həndəsə nümunəsi yaradır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 5.1.41 - Tanınmış Mətn təqdimatından (WKT) müəyyən bir ST_Geometriya dəyərini qaytarın. Bu, ST_GeomFromText üçün təxəllüs addır Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 5.1.40 - Həndəsə kolleksiyasının N-ci həndəsə elementini qaytarın. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 9.1.5 - Həndəsənin SQL-MM tipini mətn kimi qaytarır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 5.1.4 - Səthi bağlayan bir sıra sifarişli kənarları qaytarır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3 Topo-Geo və Topo-Net 3: Rutin Təfərrüatlar: X.3.5 - Verilən topologiyadakı poliqonu göstərilən üz id ilə qaytarır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3 Topo-Geo və Topo-Net 3: Rutin Təfərrüatlar: X.3.16 - Yeni bir topoloji şeması yaradır və bu yeni şemanı topology.topology cədvəlində qeyd edir və prosesin təfərrüatları. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3 Topo-Geo və Topo-Net 3: Rutin Təfərrüatlar: X.3.17 - Bir çoxbucaqlının N-ci daxili halqasını (çuxurunu) qaytarır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 8.2.6, 8.3.5 - A və B həndəsələrinin paylaşılan hissəsini təmsil edən bir həndəsi qaytarır. Bu metod SQL / MM spesifikasiyasını tətbiq edir. SQL-MM 3: 5.1.18 - İki Həndəsə / Coğrafiya məkan baxımından 2B-də kəsişdikdə (ən azı bir ümumi nöqtəyə sahib olduqda) doğru qayıdır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 5.1.27 - LineStrings-in başlanğıc və bitmə nöqtələrinin üst-üstə düşdüyünü yoxlayır. Bağlıdırsa (həcmli) bir PolyhedralSurface testləri üçün. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 7.1.5, 9.3.3 - Həndəsənin boş olub olmadığını yoxlayır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 5.1.7 - LineString-in qapalı və sadə olduğunu yoxlayır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 7.1.6 - Həndəsənin öz-özünə kəsişmə və ya öz-özünə toxunma nöqtələrinin olmadığını test edir. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 5.1.8 - Həndəsənin 2B-də yaxşı formalaşdığını yoxlayır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 5.1.9 - Xətti həndəsənin 2D uzunluğunu qaytarır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 7.1.2, 9.3.4 - Verilən SRID ilə WKT təsvirindən həndəsə edir. SRID verilmədiyi təqdirdə, 0-a bərabərdir. Bu metod SQL / MM spesifikasiyasını tətbiq edir. SQL-MM 3: 7.2.8 - Verilən SRID ilə WKB-dən LINESTRING edir Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 7.2.9 - Verilən SRID ilə WKB-dən həndəsə edir. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 7.2.9 - Nöqtənin M koordinatını qaytarır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. - WKT nümayəndəliyindən müəyyən bir ST_MultiLineString dəyərini qaytarın. Bu metod SQL / MM spesifikasiyasını həyata keçirir.SQL-MM 3: 9.4.4 - Verilən SRID ilə WKT-dən Həndəsə edir. SRID verilmədiyi təqdirdə, 0-a bərabərdir. Bu metod SQL / MM spesifikasiyasını tətbiq edir. SQL-MM 3: 9.2.4 - Verilən SRID ilə WKT-dən MultiPolygon Geometry edir. SRID verilmədiyi təqdirdə, 0-a bərabərdir. Bu metod SQL / MM spesifikasiyasını tətbiq edir. SQL-MM 3: 9.6.4 - İki kənarı birləşdirən qovşağı silməklə, ilk kənarı dəyişdirərək ikinci kənarı silməklə sağaldır. Silinmiş düyünün kimliyini qaytarır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM: Topo-Geo və Topo-Net 3: Rutin Təfərrüatlar: X.3.9 - Mövcud bir kənar boyunca yeni bir qovşaq yaradaraq, orijinal kənarı dəyişdirərək yeni bir kənar əlavə edərək bir kənarı bölün. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM: Topo-Geo və Topo-Net 3: Rutin Təfərrüatlar: X.3.9 - Topologiyada təcrid olunmuş bir düyünü bir nöqtədən digərinə keçirir. Bir qovşaq kimi yeni məqam həndəsi mövcuddursa, səhv atılır. Hərəkətin təsvirini qaytarır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM: Topo-Net Rutinlər: X.3.2 - İki kənarı birləşdirən qovşağı silməklə, hər iki kənarı da silmək və istiqaməti verilən ilk kənarla eyni olan bir kənarla əvəz etməklə sağaldır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM: Topo-Geo və Topo-Net 3: Rutin Təfərrüatlar: X.3.9 - Mövcud bir kənar boyunca yeni bir qovşaq yaradaraq, orijinal kənarı silməklə və iki yeni kənarla əvəz etməklə bir kənarı bölün. Yeni kənarları birləşdirən yaradılan yeni düyünün kimliyini qaytarır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM: Topo-Net Rutinlər: X.3.8 - Həndəsə kolleksiyasındakı elementlərin sayını qaytarır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 9.1.4 - Bir çoxbucaqlının daxili üzüklərinin (deliklərinin) sayını qaytarır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 8.2.5 - Polyhedral Səthdəki üz sayını qaytarın. Polyhedral olmayan həndəsələr üçün sıfır qayıdır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3:? - LineString və ya CircularString-də xal sayını qaytarır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 7.2.4 - İki həndəsə eyni həndəsi təmsil edirsə və nöqtələri eyni istiqamət qaydasında olarsa, doğru qayıdır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 5.1.43 - İki həndəsənin kəsişdiyi və eyni ölçüyə sahib olduğu, lakin bir-birinə tamamilə daxil olmadığı təqdirdə doğru qayıdır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 5.1.32 - PolyhedralSurface-in N-ci həndəsəsini (üzünü) qaytarır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3:? - Çoxbucaqlı həndəsə və ya coğrafiyanın sərhəd uzunluğunu qaytarır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 8.1.3, 9.5.4 - Verilmiş koordinat dəyərləri ilə bir nöqtə yaradır. ST_MakePoint üçün taxma adlar. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 6.1.2 - Verilən SRID ilə WKT-dən nöqtə Həndəsə edir. SRID verilmirsə, standart olaraq bilinmir. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 6.1.8 - Verilmiş SRID ilə WKB-dən həndəsə edir Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 6.1.9 - Birinci həndəsədəki ilk LineString və ya dairəvi LineStringdəki N nöqtəni qaytarır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 7.2.5, 7.3.5 - Çoxbucaqlı və ya həndəsə üzərində yerləşməsinə zəmanət verilən nöqtəni qaytarır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 8.1.5, 9.5.6. Xüsusiyyətlərə görə, ST_PointOnSurface səth həndəsələri üçün işləyir (POLYGONS, MULTIPOLYGONS, CURVED POLYGONS). Buna görə PostGIS, spesifikasiyanın burada imkan verdiyini genişləndirir. Əksər məlumat bazaları Oracle, DB II, ESRI SDE, bu funksiyanı yalnız səthlər üçün dəstəkləyir. PostGIS kimi SQL Server 2008, bütün ümumi həndəsələri dəstəkləyir. - Müəyyən edilmiş bir SRID ilə LineString-dən çoxbucaq yaradır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 8.3.2 - Verilən SRID ilə WKT-dən Həndəsə edir. SRID verilmədiyi təqdirdə, 0-a bərabərdir. Bu metod SQL / MM spesifikasiyasını tətbiq edir. SQL-MM 3: 8.3.6 - İki həndəsənin müəyyən bir kəsişmə matrisi nümunəsinə uyğun bir topoloji əlaqəsi olub olmadığını yoxlayır və ya onların kəsişmə matrisini hesablayır Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 5.1.25 - Bir kənarı çıxarır və çıxarılan kənar iki üzü ayırırsa, onlardan birini silin və digərinin hər ikisinə yer ayırması üçün dəyişdirin. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM: Topo-Geo və Topo-Net 3: Rutin Təfərrüatlar: X.3.15 - Bir kənarı çıxarır və çıxarılan kənar iki üzü ayırırsa, orijinal üzləri silin və yeni bir üz ilə əvəz edin. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM: Topo-Geo və Topo-Net 3: Rutin Təfərrüatlar: X.3.14 - Təcrid olunmuş kənarı silir və hərəkət təsvirini qaytarır. Kenar təcrid edilmirsə, istisna atılır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM: Topo-Geo və Topo-Net 3: Rutin Təfərrüatlar: X + 1.3.3 - Təcrid olunmuş bir qovluğu silir və hərəkət təsvirini qaytarır. Düyün təcrid olunmasa (kənarın başlanğıcı və ya sonudur), istisna atılır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM: Topo-Geo və Topo-Net 3: Rutin Təfərrüatlar: X + 1.3.3 - ST_Geometry üçün kosmik istinad identifikatorunu spatial_ref_sys cədvəlində təyin olunduğu kimi qaytarır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 5.1.5 - LineString-in ilk nöqtəsini qaytarır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 7.1.3 - A və B həndəsələrin kəsişməyən hissələrini təmsil edən bir həndəsi qaytarır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 5.1.21 - İki həndəsənin ən azı bir nöqtəsi varsa, lakin içləri kəsişməsə doğru qayıdır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 5.1.28 - Koordinatları fərqli bir məkan istinad sisteminə çevrilmiş yeni bir həndəsəni qaytarın. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 5.1.6 - Giriş həndəsələrinin nöqtə dəsti birləşməsini təmsil edən bir həndəsi qaytarır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 5.1.19 çoxbucaqlıların cəlb edildiyi zaman z indeksi (yüksəklik). - Tanınmış ikili nümayəndəlikdən (WKB) müəyyən bir ST_Geometry dəyərini qaytarın. Bu, heç bir srid qəbul etməyən ST_GeomFromWKB üçün bir taxma addır Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 5.1.36 - Tanınmış Mətn təqdimatından (WKT) müəyyən bir ST_Geometriya dəyərini qaytarın. Bu, ST_GeomFromText üçün təxəllüs addır Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 5.1.34 - Həndəsə A həndəsənin tamamilə içərisindədirsə doğru qayıdır B Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 5.1.30 - Bir nöqtənin X koordinatını qaytarır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 6.1.3 - Nöqtənin Y koordinatını qaytarır. Bu metod SQL / MM spesifikasiyasını həyata keçirir. SQL-MM 3: 6.1.4 - Nöqtənin Z koordinatını qaytarır. Bu metod SQL / MM spesifikasiyasını həyata keçirir.

Şərhlərdə st_join istifadə edə biləcəyinizi qeyd etdim. Ancaq bu sizə istədiyiniz nəticəni verməyə bilər. Sf kitabxanasında? St_intersects kimi həndəsi ikili predikatlar və? St_intersection kimi həndəsi əməliyyatlar mövcuddur.

Predatlar, x-nin hər həndəsəsinin h həndəsəsi ilə kəsişməsini izah edən seyrək (standart) və ya sıx bir matris qaytarır. Bunu st_join daxilində istifadə etsəniz, seyrək matrisdən daha çox kəsişən (orijinal) həndəsələri qaytaracaqdır.

Əməliyyatlar (məsələn st_intersection) kəsişməni hesablayacaq və yeni həndəsələri qaytaracaq.

Nümunə istifadə

Predatlar (st_intersects) st_join içərisində istifadə edilə bilər və onlar 'kəsişən' orijinal həndəsələri qaytaracaqlar.

Bu vəziyyətdə bu tək bir obyekt növü verir

Ancaq st_intersect nəticəsinin arxasınca gəldiyinizə və ya st_intersection tərəfindən verilən yeni həndəsələrə ehtiyacınız olub olmadığına qərar verməlisiniz.

Əlavə oxu

hər birləşmə haqqında məlumat sf blogundadır.

fəzalı predikatlar və fərqli əməliyyatların vikipediyada olduğu nümunələri (yaxşı təsvirlərlə)

St_intersect və st_intersection arasındakı fərqə dair şərhləri üçün @lbussett istifadəçisinə kredit


3 - PostGIS Raster istifadə

PostGIS "həndəsə" tipi kimi, PostGIS "raster" növü də yeni bir PostgreSQL tipidir. Bu, hər bir raster və ya raster plitənin bir PostgreSQL verilənlər bazası cədvəlində bir sıra məlumatlar kimi saxlanıldığı anlamına gəlir. Rastrın özü haqqında məlumatları (genişlik, hündürlük, zolaq sayı, hər zolaq üçün piksel növü və hər zolaq üçün nodata dəyəri) coğrafi yerləşmə (piksel ölçüsü, sol üst piksel mərkəzi, fırlanma və SRID) ilə birlikdə daxil edən kompleks bir növdür.

3.1.1 - PostGIS Raster Əsaslandırması

PostGIS Raster, saysız-hesabsız verilənlər bazası strukturlarını və tətbiqetmələrin müxtəlifliyini təmin etmək üçün bir çox məqsədlə dizayn edilmişdir:

Məqsəd 1: Sadəlik, Tamamlayıcılıq və İşlevlilik - PostGIS Raster, mövcud PostGIS vektorlu "həndəsə" tipini tamamlayan bir "raster" növü təqdim edir. Bu yeni uzantı, mövcud həndəsə tipində mövcud olanlara bənzər operatorlar və funksiyalar təklif edir. Eyni istifadəçi dostu şəkildə işləyirlər, lakin rastrların istifadəsini dəstəkləmək üçün matrisial bir coğrafi məlumat quruluşu ilə əlaqələndirilir. PostGIS Raster ayrıca bir çox raster formatını verilənlər bazasına gətirmək üçün sadə bir yükləyici də daxildir.

Məqsəd 2: PostGIS həndəsə növü ilə sorunsuz inteqrasiya - PostGIS Raster, PostGIS operatorlarının və funksiyalarının həm raster, həm də həndəsə növləri üzrə problemsiz işləməsini təmin edir, beləliklə istifadəçilər:

  • SQL sorğularını hazırlayarkən ümumiyyətlə PostGIS və həndəsə növü operatorları və funksiyaları barədə əvvəlcədən biliklərindən istifadə edə bilərlər
  • Bu operatorlardan və funksiyalardan məlumatlarının vektor və ya matris şəklində olmasına fikir vermədən raster tipli istifadə edərkən oxşar davranışlar gözləyin
  • mövcud tətbiqlərin (bir çox) dəyişiklik etmədən (müəyyən bir konseptual həddə) rasters kimi yüklənmiş yeni məlumatlarla işləməsini gözləyin.

Bu, PostGIS Raster-i yalnız raster formatı (GDAL kimi) və ya vektor formatı (OGR kimi) üzərində deyil, daha çox ümumiyyətlə yerleşim sənayesində ən çox istifadə olunan iki məlumat strukturu (raster və vektor) üzərində bir soyutlama səviyyəsinə çevirir. Bir vektor obyekti üzərində aparılan bir çox əməliyyatın (məsələn, yalnız LINESTRING həndəsələrində işləyən bütün funksiyaların) raster obyektlərə tətbiq edilməsi həqiqətən mümkün olmasa da və bəzi rastrlara xas funksiyalar (məsələn ST_Resample () və ya ST_SetBandNoDataValue ()) olmasa da vektor obyektləri üzərində işləyirik və gələcəkdə PostGIS Raster-i genişləndirərkən əksər əməliyyatların həm raster, həm də vektor aləmlərində öz ekvivalentinə sahib olduğunu nümayiş etdirəcəyik (məsələn ST_Intersections (), ST_Accum (), ST_Area (), ST_MapAlgebra ()) ), ilk baxışdan açıq görünməsə də.

Düşünürük ki, həm rasterlər, həm də vektorlarla işləmək üçün tək bir paradiqma (SQL) təqdim etmək, inkişaf etdiricilərə qrafik istifadəçi interfeyslərini sadələşdirərək və öyrənmə əyrilərini yumşaldaraq daha yaxşı CİS tətbiqetmələri yazmağa imkan verməlidir. Geliştiricilər, raster və vektor məlumatları ilə işləmək üçün unikal bir qrafik istifadəçi interfeysi qurmağı bacarmalı, istifadəçiləri vektor məlumatları və raster məlumatları ilə işləmək üçün iki operator əvəzinə yalnız bir sıra operatorlar öyrənməli olmalıdırlar. Hesab edirik ki, bu, ümumiyyətlə istifadəçilərin coğrafi məkan tətbiqetmələrindəki təcrübələrini genişləndirməli və məlumat formatları və strukturları ilə mübarizə aparmaq əvəzinə həqiqi coğrafi problemlərə diqqət yetirmələrinə imkan verməlidir.

Biz də bu yanaşmanın bir əhatə dairəsinin təmsil oluna biləcəyi ISO 19123 "Əhatə Həndəsi və Funksiyaları üçün Abstrakt Xüsusiyyət Şeması" spesifikasiyasına (OCG Veb Əhatə Xidməti ilə qarışdırılmaması) uyğun olduğunu düşünürük (ən azı fəlsəfədə). nöqtə təbəqəsi, bir çoxbucaqlı qat, bir VÖEN qat və ya bir raster təbəqəsi və əhatə dairəsinin hər hansı bir mövqe dəyərinə əsaslandığı məlumatların strukturunu bilmədən əldə edilə bilər.

Məqsəd 3: Saxlama rahatlığı (in-db & amp out-db storage) - PostGIS Raster, istifadəçiyə məlumat dəyərlərini verilənlər bazasına yükləmədən fayl sistemində saxlanılan şəkillərin əsas metaməlumatlarını (piksel növü, hündürlüyü, georeference və s.) Sadəcə "qeydiyyatdan" keçirməyə imkan verir. Bu şəkildə veb və ya masa üstü tətbiqlər:

  • məlumatları verilənlər bazasından götürmək məcburiyyətində deyilsiniz, əksinə birbaşa fayl sistemindən əldə edə bilərsiniz (məsələn, JPEG sənədləri kimi)
  • buna baxmayaraq əksər PostGIS Raster operatorlarını və bu rasterlərdəki funksiyaları şəffaf şəkildə istifadə edə bilər.

Bu daha təbii "in-db" anbarın əksinə "out-db" anbardır.

Məqsəd 4: Birlikdə işləmək - PostGIS Raster, GDAL-dan (http://www.gdal.org/) raster fayllarını fayl sistemi üçün əsas bağlayıcı kimi istifadə edir. GDAL, rasterləri verilənlər bazasına yükləyərkən (yükləyicidən istifadə edərək) və out-db rasterlərlə işləyərkən iştirak edir. PostGIS Raster-in təxminən yüz fərqli fayl formatı ilə işləməsini təmin edir. (Dəstəklənən fayl formatlarının tam siyahısı üçün http://www.gdal.org/formats_list.html baxın). (GDAL bəzi raster işləmə funksiyalarını həyata keçirmək üçün də istifadə olunur, lakin bu başqa bir mövzudur.)

Hədəflər 2 və 3, ən çox müzakirə olunan fikrə cavab verir ki, "rasterlərin verilənlər bazasında saxlanılması daha yavaş və xüsusi verilənlər bazası xüsusiyyətlərindən faydalanmazsa faydasızdır". Məqsəd 2, PostGIS Raster-i sadə məlumat formatından kənara çıxaraq analitik bir alət dəsti halına gətirir. Məqsəd 3 istifadəçilərə saxlama rahatlığını, axtarış səmərəliliyini və şəffaflığı təmin edir. Hər iki hədəf də verilənlər bazasında raster məlumatlarının indeksləşdirilməsindən xeyli faydalanır.

İnanırıq ki, bu əlavə funksiyalar (verilənlər bazasında mövcud olan digər raster tətbiqetmələr üzərində) PostGIS Raster-i yeni bir raster formatından daha çox, həm də PostGIS-in zəruri bir tamamlayıcısı halına gətirir.

3.1.2 - PostGIS Raster Tətbiqi

Bu hədəfləri yerinə yetirmək üçün PostGIS Raster minimalist, lakin tam bir raster məlumat quruluşunu tətbiq edir və sadə tək tipli və tək cədvəlli bir əlaqələndirmə şeması qəbul edir. Bu məlumat quruluşu PostGIS həndəsə vektor növü quruluşuna çox oxşayır və məsələn Oracle Spatial SDO_GEORASTER və SDO_RASTER raster tiplərindən çox fərqlidir.

  • Tək bir raster növü - PostGIS Raster-də raster və onun raster plitələri və ya bir şəkil və təsvir plitələri kimi bir şey yoxdur. Tək raster atributları bir örtük plitəsi və ya bir görüntünün plitəsi hesab oluna bilsə də, hər hansı bir tip raster atributu tam və özünə yetərli dərəcədə georeferanslı bir rasterdir. Mütləq eyni cədvəldəki digər rasterlərlə əlaqəli deyil və mütləq müəyyən bir şəbəkədə yerləşməməlidir. Bu seçim hər şeyi çox sadə və çevik edir, istifadəçilərin və tətbiqetmələrin məlumatlarını necə qurduqlarına və raster elementlərini (rasters, şəkillər, bitmap, bloklar, plitələr və s.) Necə adlandırdıqlarına qərar verməyə imkan verir.
  • Tək bir cədvəl münasibət şeması - Similarly, in PostGIS Raster there is not one table for storing the raster data (like Oracle Spatial SDO_RASTER) and another table for storing the georeference and the metadata (like Oracle Spatial SDO_GEORASTER). Everything is stored in a single raster attribute, and raster attributes composing a table are not necessarily related to each other to form a significant coverage.

These choices make the PostGIS raster structure very similar to the existing PostGIS vector structure in which a layer can be geometrically topological or not, depending on the user data and their choices of application.

This also means, contrary to most raster formats, that raster attributes from the same table:

  • may be of different size. Məs. one raster can be 256 pixels wide and 256 pixels high while another can be 64 pixels wide and 64 pixels high.
  • may "snap" to different grid. Məs. the upper left corner of a raster with a pixel size of 10m can be at 0,0 in a coordinate system with a map unit in meters, and the upper left corner of another raster with the same pixel size in the same coordinate system can be at 0,1.25. This means that pixels of different raster attributes are not necessarily grid aligned.
  • may overlap, like polygons in a vector layer may overlap. This is fundamental to implementing meaningful vector to raster conversions in which all attributes accompanying a vector feature are conserved in the resulting raster table. Məs. 10 lake vector features with attributes like "name, type, area, perimeter, etc…" are converted to 10 lake raster features with the same attributes. In this case, even if the vector features and the “withdata values” part of the resulting raster features do not necessarily overlap, the "nodata values" of the raster features will overlap.

These characteristics enable easy integration with vectors, but the flexibility also allows the loading of raster assemblages that are not necessarily suitable for geoanalysis. As with vector layers, you are responsible to ensure that your layer meets the minimum topological requirements for analysis. The ideal case is when all the raster tiles of a continuous layer are the same size, snap to the same grid and do not overlap.

Hence, a single attribute of type raster can store:

  • a "complete image" (e.g. Landsat),
  • an image "tile",
  • a "raster object" a new kind of raster object introduced by PostGIS Raster resulting from the rasterization of a vector feature.

All these objects are different terminologies and concepts related to the general concept of "raster". We will use the latter term throughout the rest of this documentation.

Similarly, a table with a column of type raster may be seen, depending on the structure and the relationships between the raster objects it contains, as storing (Table 1 provides a summary of the characteristics inherent to each arrangement, and figure 1 provides a corresponding graphical representation of each one.):

a) an image warehouse of untiled and (possibly) unrelated images. These images may or may not overlap since every image has its own georeference. They may also have no georeference at all.

b) an irregularly tiled raster coverage. It might not necessarily be rectangular, there might be some missing tiles, and they might be different sizes. Tiles should not overlap.

c) a regularly tiled raster coverage. It might not necessarily be rectangular, there might be some missing tiles, and the tiles should be the same size. Tiles should not overlap.

d) a rectangular regularly tiled raster coverage. It is necessarily rectangular, there are no missing tiles, they are all the same size and they do not overlap.

e) a tiled image. It is necessarily rectangular, there are no missing tiles, they are all the same size, and they do not overlap. This type is different from type d) in that it does not represent a complete coverage other images forming the rest of the coverage are stored as other tables of tiled images. This structure is not very practical from a GIS analytical point of view since any operations applied to the coverage must also be applied to every table.

f) a raster object coverage resulting from the rasterization of a vector coverage. Each vector feature becomes a small raster with the same extent as the original vector feature. This type of coverage is not necessarily complete, nor rectangular tiles should be of different sizes and might overlap. It all depends on the characteristics of the vector layer being rasterized. An exhaustive (or continuous) layer of mutually exclusive geometries (without gaps or holes like a forest cover) would result in a raster object coverage in which significant pixels (withdata values) would not overlap, but non-significant pixels (nodata values) would. On the other end of the spectrum, a discontinuous layer of mutually exclusive geometries (like a lake or building layer) would result in a coverage of mostly disjoint raster objects.

Table 1 - Characteristics of different possible raster table arrangements in PostGIS Raster

Arrangement Global shape of
composing raster
Missing tiles
mümkündür
Same size
plitələr
Tile overlap
mümkündür
Form a
coverage?
a) image warehouse of untiled and unrelated images hər hansı no tiles no tile yes Yox
b) irregularly tiled raster coverage hər hansı yes no no yes
c) regularly tiled raster coverage hər hansı yes yes no yes
d) rectangular regularly tiled raster coverage strictly rectangular no yes no yes
e) tiled image strictly rectangular no yes no not as a single table
f) raster object coverage hər hansı no real tiles no real tiles yes yes

Figure 1 - Different possible raster table arrangements in PostGIS Raster

All these arrangements are possible, and as for a geometry layer which can be implicitly topological or not, PostGIS Raster does not impose one over the other (even though types c) and d) and f) are the most practical for a GIS analyst). The fact that users of a database might (contrary to a raster file format) add or delete rows (or “tiles”) in a table, along with the fact that we must support variable-sized tiles (for vector to raster conversion), makes it very difficult to enforce a certain type of configuration.

Regularly Blocked Table

You can inform PostGIS that the raster layer you are loading meets certain useful criteria by adding the –k option to the gdal2wktraster.py Python loader. This will set the "regular_blocking" attribute of the raster_columns table to true. It implies that:

  • All loaded tiles have the same width and height,
  • All tiles do not overlap and their upper left corners follow a regular block grid,
  • The global extent of the layer is rectangular and not rotated.

Some blocks (or tiles) can be missing in a regularly blocked table. Missing tiles are assumed to be filled with the proper nodata value for each band as determined in the raster_columns table.

This regular tiling (or regular blocking) is expected from arrangements c) d) and e) in figure 1. PostGIS Raster provides this mechanism because raster applications are often optimized to deal with these arrangements. There is, however, no mechanism to enforce (constrain) these criteria and, as mentioned above, adding, modifying or deleting a row from the table might break this regular blocking, and the regular_blocking attribute will not be automatically updated.

Structure of the "raster" Type

Like the geometry type, the raster type is a complex PostgreSQL type composed of many attributes accessible using various functions. A raster attribute may be composed of many bands sharing a common size, pixel size and georeference. Each band has a pixel type and may have a nodata value.

Table 2 summarizes the composition of a raster type.

Table 2 - Structure of a raster type

Atribut Təsvir Storage Accessible with function.
version WKB format version (now 0). unsigned 16 bit integer Not accessible.
number of bands Number of raster bands stored in the raster. unsigned 16 bit integer ST_NumBands()
width Width of the raster. unsigned 16 bit integer ST_Width()
height Height of the raster. unsigned 16 bit integer ST_Height()
Georeference information
pixelsizex Pixel size in the x-direction in the same map units as the coordinate system. Same as parameter A in a world file. 64 bit double ST_PixelSizeX()
pixelsizey Pixel size in the y-direction in the same map units as the coordinate system. Same as parameter E in a world file. 64 bit double ST_PixelSizeY()
upperleftx X-coordinate of the center of the upper left pixel. Same as parameter C in a world file. 64 bit double ST_UpperLeftX()
upperlefty Y-coordinate of the center of the upper left pixel. Same as parameter F in a world file. 64 bit double ST_UpperLeftY()
rotationx Rotation about x-axis. Same as parameter B in a world file. 64 bit double ST_RotationX()
rotationy Rotation about y-axis. Same as parameter D in a world file. 64 bit double ST_RotationY()
srid Spatial reference id. 32 bit integer ST_SRID()
Band information (one set per band)
isoffline Flag specifying if the band data is stored in the database or as a file in the file system. 1 bit If ST_BandPath() return an empty string, the data is stored in the database.
hasnodatavalue Flag specifying if the stored nodatavalue is significant or not. 1 bit ST_BandHasNoDataValue()
pixeltype Pixel type for this band. 4 bits ST_BandPixelType()
nodatavalue Nodata value for the band. Depend on band pixel type. ST_BandNodataValue()
Band data (one set per band) for in-db raster
values[] Value of each pixel. Depends on band pixel type. ST_ Value()
Band data (one set per band) for out-db raster
bandnumber Number of the out-db band. unsigned 8 bit integer Not accessible yet.
path Path to the out-db raster file. string ST_BandPath()

  • "unsigned 8 bits integer" are 0 and 255.
  • "unsigned 16 bits integer" are 0 and 65535.
  • "32 bits integer" are -2 147 483 648 and 2 147 483 647.
  • "64 bits double" are -1.7*10-308 and 1.7*10308.

PostGIS Raster is expressed in different forms, depending on the level at which it is referred:

  • WKT - "Well Known Text" refers to the human readable text format used when inserting a raster with ST_RasterFromText() (not yet implemented) and retrieving a raster with ST_AsText() (not yet implemented). This format can result in the loss of precision when used with floating point values. This is why the HEXWKB form is preferred when importing/exporting in textual form.
  • WKB - "Well Known Binary" refers to the binary equivalent of the WKT. It is used when inserting a raster using ST_RasterFromWKB() and retrieving a raster using ST_AsBinary().
  • HEXWKB - "Hexadecimal WKB" is an exact hexadecimal representation of the WKB form. It is also called the "canonical" form. It is what you get from the loader (gdal2wktraster.py), what is accepted by the raster type input function (ST_Raster_In), and what you get when outputting the value of a raster field without conversion (e.g. SELECT rast FROM table).
  • Serialized - The "serialized" format is what is written to the filesystem by the database. It differs from WKB in that it does not have to store the endianness of the data and that it must be aligned. Serializing is the action of writing data to the database file, deserializing is the action of reading this data.

The raster_columns Table

Like the PostGIS "geometry_column" table, the PostGIS Raster "raster_columns" table is a way for applications to get a quick overview of which tables have a raster column, and to get the main characteristics (metadata) of the rasters stored in these columns. Applications should maintain this table using the AddRasterColumn() and DropRasterColumn() functions, as there is no automatic mechanism in the database to keep this table up to date with every raster column created or deleted.

Table 3 summarizes the attributes of the raster_columns table.

Atribut PostgreSQL Type Təsvir
r_table_catalog character varying(256) Name of the catalog containing the table. This attribute exists only to follow the geometry_column table schema. It is generally left empty.
r_table_schema character varying(256) Name of the schema containing the table. Generally equal to “public”.
r_table_name character varying(256) Name of the table containing a column of type raster.
r_column character varying(256) Name of the raster column in the table.
srid integer ID of the spatial reference system used for the raster column in this table. It is a foreign key reference to the PostGIS spatial_ref_sys table.
pixel_types array[varchar] Array of pixel types one for every band. Index for first band is 1. Types are expressed as varchar (string) values:
"1BB" = 1-bit boolean
"2BUI" = 2-bit unsigned integer
"4BUI" = 4-bit unsigned integer
"8BSI" = 8-bit signed integer
"8BUI" = 8-bit unsigned integer
"16BSI" = 16-bit signed integer
"16BUI" = 16-bit unsigned integer
"32BSI" = 32-bit signed integer
"32BUI" = 32-bit unsigned integer
"32BF" = 32-bit float
"64BF" = 64-bit float
out_db array[boolean] Array of flags for in-db or out-db storage one per band. True when raster data is not stored in the database but resides as files in the filesystem. Paths to these files (one per row) are determined by ST_BandPath(). Index for first band is 1.
regular_blocking boolean Flag specifying that the regular blocking constraint is enforced for this table.
nodata_values array[double] Array of nodata values one for each band. Each nodata value is stored as a double (even when the pixel type is integer). Index for first band is 1.
pixelsize_x double Pixel size of the raster in the x-direction. In the units of the coordinate system determined by srid.
pixelsize_y double Pixel size of the raster in the y-direction. In the units of the coordinate system determined by srid.
blocksize_x integer Width of a block of raster data when regular_blocking is set to true. NULL otherwise.
blocksize_y integer Height of a block of raster data when "regular_blocking" is set to true. NULL otherwise.
extent geometry Polygon geometry encompassing all raster rows of this table. NULL if predefined bounds are not known. When "regular_blocking" is set to true this polygon is a simple rectangle. In other cases it might be an irregular polygon.

3.1.3 - Storing in-db raster or registering out-db raster?

One of the major PostGIS Raster features is the ability to store raster data in the database or merely register them as external files residing in the filesystem. When registering a raster, only the raster metadata are stored in the database (width, height, number of band, georeference and path to the actual raster file), not the values associated with the pixels. Registering is done via the loader’s –R option.

Out-db raster is targeted at read-only applications. It has the following advantages:

  • Access Speed - Speeds up the reading (and transmission) of web-ready rasters (JPEG, GIF, PNG) files for web applications as there is no need to convert them from the PostGIS raster type to a web friendly format.
  • Seemless SQL Operators and Functions – All the operators and functions (except those involving write operations to the raster like ST_SetValue()) work seamlessly with out-db rasters.
  • Simplified Backup – Rasters residing in the filesystem can be backed up once forever since they are not expected to be edited.
  • Faster Database Loading – Initial table creation is faster since data do not have to be loaded/copied in the database.

In-db raster is targeted at editing and analysis applications. It has the following advantages:

  • Fast Analysis – Analysis operations involving pixel per pixel interpretation (ST_AsPolygon(), ST_Intersections(), etc…) are faster on in-db rasters since there is no need to read and extract the actual data from a JPEG or a TIFF format.
  • Single storage solution – Provide a single vector/raster datasets storage solution. There is no need to backup the raster datasets separately from the vector datasets.
  • Multi-Users Edition – The database handles concurrent editing on raster only for in-db rasters.

NEVER, EVER use Debezium versions between 1.2.2 and 1.3.0. Those versions come with a bug which is hard to understand for anoyne who isn’t a Postgres expert, but its consequences are simple and dangerous : using such buggy Debezium version will take the master database down sooner or later. This is because Debezium will consume data changes, but won’t confirm the consumption to the database server. The server will retain all WAL segments since replication slot creation, and you will eventually run out of disk space (or money, if you use some pay-as-you-go storage like Amazon EFS or keep adding new disks).

When Debezium fails to connect, it returns a “Could not obtain encoding for database …” error message. Usually it has NOTHING to do with encoding, it just means that it couldn’t connect. Check the Postgres log for details – it might be a wrong password or no pg_hba.conf rule. If the database log is clean, look for network issues.


Discussion

Conceptually, this study offers a new way of examining and aggregating individual GPS trajectories. First, this platform supports research that examines individual’s travel trajectories. By focusing on daily activity places instead of the arbitrary residential neighborhood, this approach represents improvements in capturing the environmental exposure associated with behavioral and health outcomes. Moreover, based on the collected positioning points, we computed a continuous probability surface to quantify the likelihood of individuals being at certain locations.

Another methodological contribution of this study is to tie multi-dimensional attributes, e.g. the step and duration surfaces with travel patterns. In human–environment research, methods have been proposed to delineate the contextual areas to which individuals expose based on GPS points, but limited attention has been paid to identifying walking behavior and recording the duration of activities in specific environmental context. As a result, the entire activity space is usually given equal consideration when analyzing the environmental associates of behavior. However, as we know from previous research, the health and behavioral outcomes vary based on type of activity, intensity, and duration [2]. Our approach provides data regarding steps and duration of activity in the different tiles that could be examined in relation to different environmental characteristics.

Also, the aggregation process helps safeguard the privacy issue associated with personal location data. Researchers and individual users can select to release data at the level where private information cannot be traced, which is particularly useful in generating visualizations to show the spatial patterns of travel behavior.

Finally, this proposed platform combines a number of GPS data collection, visualization and analysis functionalities for research and everyday use. The technical issues regarding transforming and converting data across platforms present challenge for researchers and limits the use of GPS tracking in a variety of research. Our platform, however, supports processes that involves the collection of individual data, aggregation based on specific research goals and analytical needs.

There are several limitations in this study. First, because the possible tiles that connect origin and destination were interpolated based on the consecutive location points, locations where the signal is weak or the participant is sedentary were not recorded. Therefore, the data has to be cleaned and incorrect trajectory records needed to be removed. In future studies, we will incorporate the road network data and map matching methods to address such situations. Second, the comprehensiveness of OSM data varies in different cities. When analyzing the activities along with OSM data, the richness of the findings rely heavily on detailed information regarding POIs. In the future, we can combine geographic data from multiple sources to increase the coverage of POIs in cities. Third, because our focus of this project was to develop the functionality to capture multi-dimensional attributes of activities, we did not deploy our application to a larger group of participants. Instead, we only obtained a test dataset by running the app for 5 days. The application was able to capture useful information at multiple scales. We also demonstrated the captured information could be used in projects in measuring physical activities and environmental exposure. In the future, we plan to conduct a comprehensive assessment. We will recruit participants and invite them to use the app for an extended period. Along with the app, we will also use pedometers and accelerometers and self-reported activity diaries to validate the app-based step and duration measures. We also plan to apply the proposed system in empirical studies investigating issues regarding the human–environment interaction, such as crime risk modeling and food exposure analysis.


4 Example Applications

The power of APIs is that they allow data to be accessed using a common protocol but analyzed and displayed in many different ways. Several mobile and web applications that use the Macrostrat API are now publicly available, including the iOS and Android application Flyover Country and the iOS application Mancos, each developed by third parties. Here we briefly describe the Rockd mobile application developed by the Macrostrat group.

Rockd (https://rockd.org) is built using the Ionic framework and it leverages Macrostrat's geologic map data as well as lithostratigraphic nomenclature, lithologies, paleogeographic reconstructions, and more. One of the fundamental questions that Rockd aims to help users answer is, “what rock am I standing on, and where and when did it form?” Finding the answer to such a question previously required either knowledge and direct observation or searching for a scale-appropriate geological map, viewing the map, and then estimating a location on that map relative to landmarks or a GPS device's coordinates. Then, once a geological age and context was acquired from a map or other published source, a user would still typically have to locate and consult other sources for a reconstructed paleogeographic position at the time of the rock's formation.

Macrostrat's data infrastructure allows users to answer the “what am I standing on” question in real time anywhere in the world, with levels of detail that vary regionally but using a platform that continually improves. This same data infrastructure also allows users to obtain their current elevation using digital elevation models (ETOPO1 and SRTM1) instead of the elevation reported by their device's GPS chip, which is prone to large errors in vertical position (GPS-specific and device-specific uncertainty in horizontal position still occurs and will affect elevation estimates precision of the GPS-supplied latitude-longitude estimate is reported in Rockd). Additionally, by retrieving data from a web API wrapper of GPlate's (Wright et al., 2013 ) PyGPlates Python package, users are automatically given their paleoposition for any time going back to 750 Ma. Global paleogeographic reconstructions and the user's paleoposition are then shown on paloegeographic reconstructions from C. R. Scotese (Scotese, 2016 ). Reliance on Macrostrat's API (and Rockd's own API) allows the application to be continually updated without any user intervention (e.g., a new geological map added to Macrostrat will be accessible without requiring installation of a new version of the application).

In addition to providing local geological context, Rockd allows registered users to record their own field observations and to make them public on Macrostrat servers. User observations can leverage existing geological knowledge, such as stratigraphic names, lithologies, and taxonomic names that are known to occur around the observation's location. Providing this type of location-specific information can speed up the data acquisition process and improve the quality of data by reducing the need to type text. Delivering local geological context also, in principle, encourages users to focus their efforts on making observations that might supply new information or that complements or revises existing information, thereby enhancing local geological knowledge and ultimately improving rock unit descriptions. In keeping with REST principles, Rockd photos, observations and locations are assigned URLs that, when made public by a user, can be shared (e.g., https://rockd.org/checkin/1727) and commented on by other registered users, offering a mechanism to label locations with alternative interpretations and encourage a learning dialogue. User-contributed checkins (Rockd's term for a location with one or more observations) can also help streamline field work and the planning of field trips. The ability to create custom, ordered groupings of locations that can be named and identified by a single URL is forthcoming and will serve as the organized “field trip” component of Rockd.

Rockd is a mobile app that draws on Macrostrats API for data exploration and visualization purposes, but the Macrostrat data service can also be used in geoscientific applications. Figure 6 shows output from one such scientific application. In this example, unit data in either JSON or CSV format are first retrieved from the Macrostrat API using the URL above. These data are then parsed and for each time increment of interest (here 0–541 Ma) and the number of units with overlapping ages are then counted by looping over all units in the response. If the fields with the continuous-time age estimate for each unit are used (“b_age” and “t_age”), then this estimate can be a time “interval-free” summarization of rock quantity through geologic time. Other parameters, such as rock area and volume can be summarized in the same capacity, although the latter requires the user to make decisions about how to include proportional lithological abundances and the maximum and minimum thickness estimates that accompany each unit.


An effective guide to geographic information systems and remote sensing analysis using Python 3

  • Construct applications for GIS development by exploiting Python
  • This focuses on built-in Python modules and libraries compatible with the Python Packaging Index distribution system - no compiling of C libraries necessary
  • This practical, hands-on tutorial teaches you all about Geospatial analysis in Python

If you are a Python developer, researcher, or analyst who wants to perform Geospatial, modeling, and GIS analysis with Python, then this book is for you. Familarity with digital mapping and analysis using Python or another scripting language for automation or crunching data manually is appreciated.

  • Automate Geospatial analysis workflows using Python
  • Code the simplest possible GIS in 60 lines of Python
  • Mold thematic maps with Python tools
  • Get hold of the various forms that geospatial data comes in
  • Produce elevation contours using Python tools
  • Create flood inundation models
  • Apply Geospatial analysis to find out about real-time data tracking and for storm chasing

Geospatial Analysis is used in almost every field you can think of from medicine, to defense, to farming. This book will guide you gently into this exciting and complex field. It walks you through the building blocks of geospatial analysis and how to apply them to influence decision making using the latest Python software.

Learning Geospatial Analysis with Python, 2nd Edition uses the expressive and powerful Python 3 programming language to guide you through geographic information systems, remote sensing, topography, and more, while providing a framework for you to approach geospatial analysis effectively, but on your own terms. We start by giving you a little background on the field, and a survey of the techniques and technology used. We then split the field into its component specialty areas: GIS, remote sensing, elevation data, advanced modeling, and real-time data.

This book will teach you everything you need to know about, Geospatial Analysis from using a particular software package or API to using generic algorithms that can be applied. This book focuses on pure Python whenever possible to minimize compiling platform-dependent binaries, so that you don't become bogged down in just getting ready to do analysis. This book will round out your technical library through handy recipes that will give you a good understanding of a field that supplements many a modern day human endeavors.

This is a practical, hands-on tutorial that teaches you all about Geospatial analysis interactively using Python.


Playing with data

Reading & writing GIS data

Programmatic data munging

Pure Python, reads (and writes) shapefile data. That's all.

For more complicated things

GDAL/OGR: Massive library of raster & vector GIS tools.

  • (Can be) a pain in the #%! to install/config
  • Docs & features can be overwhelming
  • Chaining commands gets cumbersome
  • Native Python bindings are nasty

GDAL/OGR: command line tools

ogrinfo: get summary info on a given spatial dataset or run SQL queries on the fly - accepts any* file type

ogr2ogr: transform any* vector GIS filetype into any other type, optionally filtering by arbitrary SQL query

*Almost hər hansı

Good news: We speak Python

Caveat: Many Python libs still require GDAL/OGR installations and headers. Worth it, but can be a bumpy ride the first time around.

GIS I/O + Python

(Use THIS - yox GDAL/OGR's vanilla API s )

Supports every format OGR supports (not just shapefiles), makes reading/munging/writing GIS data a breeze.

For Rasters.

The Fun Stuff

  • Create buffers around vector elements
  • Visualize things like convex hulls, unions, intersections, centroids.
  • Find (geometric) differences between elements

Combine Fiona + Shapely to chain reading, converting, and analysing GIS data:


Videoya baxın: Using QGIS with PostGIS (Oktyabr 2021).