Daha çox

PostGIS ilə məkan qruplaşması?

PostGIS ilə məkan qruplaşması?


PostGIS effektiv verilənlər bazasında nöqtə xüsusiyyətləri üçün istifadə etmək üçün məkan klasterləşdirmə alqoritmi axtarıram. Giriş ilə eyni qrup içərisində nöqtələr arasındakı məsafəni götürən plpgsql funksiyası yazacağam. Çıxış funksiyasında klasterlər seriyası qaytarılır. Ən bariz həll xüsusiyyət ətrafında tampon zonaları müəyyən edilmiş məsafəni qurmaq və bu tamponda xüsusiyyətləri axtarmaqdır. Əgər bu cür xüsusiyyətlər mövcuddursa, ətraflarında bir tampon yaratmağa davam edin və s. Belə xüsusiyyətlər yoxdursa, klaster quruluşunun tamamlandığı deməkdir. Bəlkə ağıllı həll yolları var?


PostGIS üçün ən azı iki yaxşı klaster üsulu var: k- deməkdir (vasitəsiləkmeans-postgresqluzadılması) və ya eşik məsafədə klaster həndəsələri (PostGIS 2.2)


1) k- deməkdirkmeans-postgresql

Quraşdırma: Bunu mənbə kodundan tərtib edib quraşdırmalısınız, bunu Windows-dan daha çox * NIX-də etmək daha asandır (haradan başlayacağımı bilmirəm). Paketlərdən PostgreSQL quraşdırılmışsa, inkişaf paketlərinə də sahib olduğunuzdan əmin olun (məsələn,postgresql-develCentOS üçün).

Yükləyin, çıxarın, qurun və quraşdırın:

wget http://api.pgxn.org/dist/kmeans/1.1.0/kmeans-1.1.0.zip unzip kmeans-1.1.0.zip cd kmeans-1.1.0 / make USE_PGXS = 1 sudo make install

Bir verilənlər bazasında uzantını aktivləşdirin (psql, pgAdmin və s. İstifadə edərək):

GENİŞLENDİRMƏ kmeans;

İstifadə / Nümunə: Bir yerdə bal cədvəlinə sahib olmalısan (QGIS-də bir dəstə yalançı təsadüfi nöqtə çəkdim). İşdə etdiyim bir nümunə:

SEÇİN kmeans, say (*), ST_Centroid (ST_Collect (geom)) AS geom FROM (SEÇİN kmeans (ARRAY [ST_X (geom), ST_Y (geom)], 5) OVER (), geom FROM rand_point) AS ksub GROUP BY kmeans SİFARİŞ ilə kmeans;

the5İkinci arqumentində təmin etdimkmeanspəncərə funksiyası K beş qrup yaratmaq üçün tam ədəd. Bunu istədiyiniz tam ədədə dəyişə bilərsiniz.

Aşağıda çəkdiyim 31 yalançı təsadüfi nöqtə və hər dəstədəki sayını göstərən etiketi olan beş sentroid var. Bu, yuxarıdakı SQL sorğusundan istifadə edərək yaradılmışdır.


ST_MinimumBoundingCircle ilə bu qrupların harada olduğunu göstərməyə də cəhd edə bilərsiniz:

SEÇİN kmeans, ST_MinimumBoundingCircle (ST_Collect (geom)) AS dairəsi FROM (SEÇİN kmeans (ARRAY [ST_X (geom), ST_Y (geom)], 5) OVER (), geom FROM rand_point) AS ksub GROUP BY kmeans ORDER BY kmeans;


2) ilə bir eşik məsafədə klasterləşdirməST_ClusterWithin

Bu məcmu funksiya PostGIS 2.2-ə daxil edilir və bütün komponentlərin bir-birindən məsafədə olduğu bir sıra GeometryCollections qaytarır.

100.0 məsafəsinin 5 fərqli qruplaşma ilə nəticələnən bir eşik olduğu bir nümunə istifadə budur:

Row_number () over () AS id, ST_NumGeometries (gc), gc AS geom_collection, ST_Centroid (gc) AS centroid, ST_MinimumBoundingCircle (gc) AS circle, sqrt (ST_Area (ST_MinimumBoundingCircle (gc)) / pi ()) SEÇİN (SEÇİLMİŞDİR (ST_ClusterWithin (geom, 100)) gc FROM rand_point) f;

Ən böyük orta dəstə, 65.3 vahid və ya eşikdən daha böyük olan 130 ətraf mühitin dairəvi radiusuna malikdir. Bunun səbəbi, üzv həndəsələr arasındakı fərdi məsafələrin eşikdən az olmasıdır, buna görə də onu daha böyük bir qrup kimi bir-birinə bağlayır.


Xüsusiyyət qruplarını aralarındakı məsafəyə əsasən hesablayan və bu xüsusiyyətlər üzərində qabarıq gövdə quran funksiya yazdım:

FUNKSİYANI YARATIN VƏ DƏYİŞDİN get_domains_n (lname varchar, geom varchar, gid varchar, radius rəqəmli) SETOF qeydini $$ OLDUĞUNU QAYDADI lid_new integer; dmn_sayı tam ədədi: = 1; outr qeyd; innr qeyd; r qeyd; MÖVCUD OLDUĞUNDA DAMLA CƏDVƏLƏ BAŞLA tmp; 'SEÇİM OLARAQ UCUZUCU CƏDVƏL tmp yaradın' || gid || ',' || geom || ' FROM '|| lname; DƏYİŞMƏ CƏDVƏLİ tmp SÜTUN ƏLAVƏ et dmn tam ədəd; Dəyişdirmək CƏDVƏLİ tmp SÜTUN ƏLAVƏ et chk boolean DEFAULT FALSE 'YENİLƏNİB tmp SET dmn =' || dmn_number || ', chk = FALSE WHERE' || gid || ' = (SEÇİN MIN ('|| gid ||') FROM tmp) '; EXECUTE 'SELECT' || gid || 'üçün outr üçün LOOP LOOP AS gid, '|| geom ||' AS geom FROM tmp WHERE dmn = '|| dmn_number ||' VƏ chk 'INCRECE INNR FOR LOOP IN EXECECE' SELECT '|| gid ||' AS gid, '|| geom ||' AS geom FROM tmp WHERE dmn NULL 'LOOP IF ST_DWithin (ST_Transform (ST_SetSRID (outr.geom, 4326), 3785), ST_Transform (ST_SetSRID (innr.geom, 4326), 3785), radius) THEN --IF ST_DWithin ( .geom, innr.geom, radius) ONDA 'YENİLƏNİN tmp SET DMN =' || dmn_number || ', chk = FALSE WHERE' || gid || ' = '|| innr.gid; SONDUR; SON DÖNGÜ; 'YENİLƏNİB tmp SET chk = DOĞRU HARADA' || gid || ' = '|| outr.gid; SON DÖNGÜ; Tmp-dən HARADA r dmn-dən SEÇİN dmn = dmn_number və chk LIMIT 1 DEYİL; BULMADIĞINDA ÇIKIŞ; SON DÖNGÜ; Dmn-nin NULL LİMİT 1 olduğu Tmp-dən ROM-a SEÇİN; BUNDA BULSA dmn_number: = dmn_number + 1; 'YENİLƏNİB tmp SET dmn =' || dmn_number || ', chk = FALSE WHERE' || gid || ' = (MIN ('|| gid ||') tmp'DEN DMN NULL LIMIT 1 olduğu yerdən SEÇİN ')'; Başqa çıxış; SONDUR; SON DÖNGÜ; QUERY EXECUTE 'SELECT ST_ConvexHull (ST_Collect (' || geom || ')) FROM tmp GROUP by dmn'; QAYIT; END $$ DİL plpgsql;

Bu funksiyadan istifadə nümunəsi:

SEÇİN * FROM get_domains_n ('poi', 'wkb_geometry', 'ogc_fid', 14000) AS g (gm həndəsə)

'poi' - təbəqənin adı, 'wkb_geometry' - həndəsə sütununun adı, 'ogc_fid' - cədvəlin əsas açarı, 14000 - klaster məsafəsi.

Bu funksiyadan istifadənin nəticəsi:


İndiyə qədər tapdığım ən ümidverici bir pəncərə funksiyası kimi K-vasitələri klasterləşdirmə üçün bu uzantıdır: http://pgxn.org/dist/kmeans/

Lakin hələ uğurla qura bilməmişəm.


Əks təqdirdə, əsas şəbəkə qruplaşdırma üçün SnapToGrid istifadə edə bilərsiniz.

Array_agg (id) AS ids, SEÇ (mövqe) AS sayı, ST_AsText (ST_Centroid (ST_Collect (mövqe))) AS mərkəz, SEÇİN mytable GROUP BY ST_SnapToGrid (ST_SetSRID (mövqe, 4326), 22.25, 11.125) SİFARİŞ BY say DES;

Post_gis-də mövcud olan ST_ClusterKMeans metodu ilə Kmeans həllini daha asanlıqla 2.3 Nümunədən istifadə edə bilərsiniz:

SEÇİN kmean, count (*), ST_SetSRID (ST_Extent (geom), 4326) bbox FROM (SELECT ST_ClusterKMeans (geom, 20) OVER () AS kmean, ST_Centroid (geom) as geom FROM sls_product) tsub GROUP BY kmean;

Xüsusiyyətlərin məhdudlaşdırıcı qutusu yuxarıdakı nümunədə çoxluq həndəsi kimi istifadə olunur. Birinci şəkil orijinal həndəsələri göstərir, ikincisi isə yuxarıdakı seçimin nəticəsidir.


Postgisdə maksimum diametrli nöqtələr buludundan dinamik bir sorğu tələb etməyən tək bir klaster əldə etmək üçün altdan yuxarı qruplaşdırma həlli.

Növü pt AS YARAT (hid xarakteri dəyişir (32), the_geom həndəsəsi (Point))

və klaster id ilə bir növü

TİPİ YARADIN clustered_pt AS (gid xarakteri dəyişir (32), the_geom geometry (Point) cluster_id int)

Bundan sonra alqoritm funksiyası

FUNKSİYANI YARATIN VƏ DƏYİŞDİN buc (nöqtələr pt [], radius tam ədədi) RETURNS SETOF clustered_pt AS $ BODY $ DECLARE srid int; qoşulmuş_clusters int []; BAŞLAYIN - Yalnız 1 nöqtə varsa, döngə ilə narahat olmayın. Array_length (nöqtələr, 1) <2 Sonra QUERY SELECT qayıt, the_geom, 1 FROM unnest (bal); QAYIT; SONDUR; VAR OLMADIĞINDA UCUZUCU CƏDVƏL YARADIN, KOMİTET DAMLA ÜÇÜN bal 2 (pt kimi) BAŞLA DƏYİŞDİRMƏ CƏDVƏLİ nöqtələri2 SÜTUN ƏLAVƏ et cluster_id serial; Dublikat_sütun ONDA İSTİSNA - heç nə etməyin. Bu funksiyanı bir neçə dəfə END istifadə edərkən istisna yaranır; XALQALAR 2; - INSERT INTO points2 (gid, the_geom) -ə bal əlavə etmək (SELECT (unnest (points)). *); - Sonra nöqtələri yenidən çevirmək üçün srid'i saxlayın, bütün nöqtələrin eyni SRID srid olduğuna inanır: = ST_SRID (the_geom) FROM points2 LIMIT 1; YENİLƏNİN nöqtələri2 - nöqtələrin UTM koordinat sisteminə çevrilməsi, məsafələrin metrlərlə hesablanacağı. SET the_geom = ST_TRANSFORM (the_geom, 26986); - Məkan indeksinin əlavə edilməsi İNDEKSİNİ yaradın nöqtələr_indeks ON2 bal istifadə edərək əsas (the_geom); Xalları təhlil2; LOOP - İki qrup arasındakı ən kiçik maksimum məsafə istənilən klaster radiusundan 2x-dən çox olarsa, daha çox IF (SELECT ST_MaxDistance (ST_Collect (a.the_geom), ST_Collect (b.the_geom))) nöqtələrindən 2 a, puan2 b HARADA a.cluster_id <> b.cluster_id QRUPUNU A.cluster_id, b.cluster_id SİFARİŞ EDİN ST_MaxDistance (ST_Collect (a.the_geom), ST_Collect (b.the_geom)) LIMIT 1)> 2 * radius THEN EXIT; SONDUR; join_clusters: = ARRAY [a.cluster_id, b.cluster_id] FROM2 a, points2 b WHERE a.cluster_id <> b.cluster_id GROUP BY a.cluster_id, b.cluster_id SİFARİŞ EDİN ST_MaxDistance (ST_Collect (a_the) b.the_geom)) SINIR 1; GÜNCELLEME nöqtələri2 SET cluster_id = join_clusters [1] WHERE cluster_id = join_clusters [2]; --Yalnız 1 klaster qalıbsa, döngədən IF çıxın (SELECT COUNT (DISTINCT cluster_id) FROM points2) <2 THEN EXIT; SONDUR; SON DÖNGÜ; QUERY SELECT GID, ST_TRANSFORM (the_geom, srid) :: geometry (point), cluster_id FROM points2; SON; $ BODY $ LANGUAGE plpgsql

İstifadəsi:

Subq AS ilə (SEÇİN ARRAY_AGG ((gid, the_geom) :: pt) AS nöqtələrindən məlumat GROUP BY collection_id) SELECT (klasterlar). * FROM (SELECT buc (nöqtələr, radius) AS qruplardan AS sub) y;

@MikeT cavabını tamamlayır…

MS Windows üçün:

Tələblər:

  • Bunun kimi hər hansı bir Visual C ++ Express versiyası
  • Kmeans-postgresql modulu.

Nə edəcəksən:

  • Kmeans funksiyasını bir DLL-ə ixrac etmək üçün mənbə kodunu düzəldin.
  • Mənbə kodunu ilə tərtib edincl.exeilə bir DLL yaratmaq üçün kompilyatorkmeansfunksiya.
  • Yaradılan DLL-ni PostgreSQL lib qovluğuna qoyun.
  • Sonra SQL əmri vasitəsilə UDF-ni PostgreSQL-ə "yarada" (bağlaya) bilərsiniz.

Addımlar:

  1. Tələbləri yükləyin və quraşdırın / çıxarın.
  2. Açınkmeans.chər hansı bir redaktorda:

    1. Sonra# daxil edinsatırlar DLLEXPORT makrosunu aşağıdakılarla təyin edir:

      #if tanımlı (_WIN32) # DLLEXPORT'u təyin et __declspec (dllexport) #else #define DLLEXPORT #endif
    2. QoyDLLEXPORTbu sətirlərin hər birindən əvvəl:

      PG_FUNCTION_INFO_V1 (kmeans_with_init); PG_FUNCTION_INFO_V1 (kmeans); extern Datum kmeans_with_init (PG_FUNCTION_ARGS); extern Datum kmeans (PG_FUNCTION_ARGS);
  3. Visual C ++ Command Line açın.

  4. Komanda xəttində:

    1. Çıxarılanlara gedinkmeans-postgresql.
    2. POSTGRESPATH-ı qurun, məsələn, mənim:POSTGRESPATH SET = C: Program Files PostgreSQL 9.5
    3. Qaç

      cl.exe / I "% POSTGRESPATH%  include" / I "% POSTGRESPATH%  include  server" / I "% POSTGRESPATH%  include  server  port  win32" / I "% POSTGRESPATH%  include  server  port  win32_msvc "/ I" C:  Program Files (x86)  Microsoft SDKs  Windows  v7.1A  Include "/ LD kmeans.c"% POSTGRESPATH%  lib  postgres.lib "
  5. Kopyalayınkmeans.dllüçün% POSTGRESPATH% lib

  6. İndi funksiyanı "CREATE" etmək üçün verilənlər bazanızdakı SQL əmrini çalıştırın.

    FUNKSİYANI YARATIN kmeans (float [], int) RETURNS int '' libdir / kmeans 'LANGUAGE c DƏVƏLLİ STRICT WINDOW; FUNKSİYANI YARATIN kmeans (float [], int, float []) RETURNS int '$ libdir / kmeans', 'kmeans_with_init' DİL C DƏYİŞMƏSİZ QALIŞ Pəncərə;

QGIS-də bu anwser-də 2) -də verilən PostGIS sorğusunun nəticəsini göstərmək üçün bir yol

QGIS eyni həndəsə sütununda nə həndəsə kolleksiyalarını, nə də fərqli məlumat tiplərini idarə etmədiyindən, biri qruplar üçün, digəri isə kümelenmiş nöqtələr üçün iki qat yaratdım.

Əvvəlcə qruplar üçün yalnız poliqonlara ehtiyacınız var, digər nəticələr yalnız nöqtələrdir:

SEÇİN id, countfeature, dairə FROM (SELECT row_number () over () AS id, ST_NumGeometries (gc) as countfeature, ST_MinimumBoundingCircle (gc) AS circle FROM (SELECT unnest (ST_ClusterWithin (the_geom, 100)) gc FROM rand_point) a) Harada ST_GeometryType (dairə) = 'ST_Polygon'

Sonra çoxluqlu nöqtələr üçün həndəsi kolleksiyaları çox nöqtədə çevirməlisiniz:

Row_number () üzərində () AS id, ST_NumGeometries (gc) kimi countfeature olaraq seçin, ST_CollectionExtract (gc, 1) AS çox nöqtəli FROM (SELECT unnest (ST_ClusterWithin (the_geom, 100)) gc FROM rand_point) f

Bəzi nöqtələr eyni koordinatlarda olduğu üçün etiket qarışıq ola bilər.


PostGIS

PostGIS, PostgreSQL obyekt ilə əlaqəli verilənlər bazasına coğrafi obyektlər üçün dəstək əlavə edir. Əslində, PostGIS & # 8220spatially olaraq PostgreSQL serverini təmin edir və ESRI & # 8217s SDE ya da Oracle & # 8217s Spatial extension kimi coğrafi informasiya sistemləri (CBS) üçün bir məkan bazası bazası kimi istifadə edilməsinə imkan verir. PostGIS, SQL & # 8221 üçün OpenGIS & # 8220Sadə Xüsusiyyətlər Xüsusiyyətini izləyir.

1. Ubuntu-da quraşdırma

Synaptic Package Manager istifadə edərək aşağıdakı paketi yükləyin və quraşdırın:

1.1. postgis

coğrafi obyektlər PostgreSQL & # 8212 ümumi faylları dəstəkləyir. Bu paket, PostGIS istifadəçi ərazisi ikili sənədlərini, ümumi sənədləri və sənədləri ehtiva edir.

1.2. postgressql-8.4-postgis

PostgreSQL 8.4 üçün coğrafi obyektlər dəstəyi. Bu paket PostgreSQL 8.4 dəstəkləyir.

1.3. libpostgis-java

PostgreSQL & # 8212 JDBC dəstəyi üçün coğrafi obyektlər dəstəyi. Bu paketdə PostGIS üçün JDBC dəstəyi var.


Djangoda GeoDjango və PostGIS istifadə

Mekansal məlumatlar, çaylar, sərhədlər, şəhərlər və ya təbii əlamətlər kimi yerlə əlaqəli məlumatları ehtiva edən hər hansı bir coğrafi məlumatdır. Bu xüsusiyyətlərin konturlarını, topologiyasını, ölçüsünü və formasını təsvir edir. Xəritələr, ümumiyyətlə vektor və ya raster formada təmsil olunan məkan məlumatlarını görselləşdirmək üçün yayılmış bir üsuldur.

Bu yazıda sizi PostgreSQL və Django-dakı məkan məlumatları ilə tanış edəcəyəm. Python veb tətbiqində coğrafi məlumatları (həm raster, həm də vektor) yaratmaq, saxlamaq və idarə etmək üçün PostGIS və GeoDjango'dan necə istifadə edəcəyinizi görəcəksiniz. Yolda, bir proqram inkişaf etdiricisi olaraq qarşılaşacağınız məkan məlumatları üçün bir neçə istifadə vəziyyətini görəcəksiniz.

Vektor məlumatları və raster məlumatları

Vektor məlumatları nöqtələr, xətlər və çoxbucaqlardan istifadə edərək yerin bir təmsilçisidir. Bir nöqtə “x” və “y” koordinatından istifadə edərək kiçik, ayrı sahələri təmsil etmək üçün istifadə olunur. Bağlı nöqtələr yollar, axınlar və şəbəkələri təsvir etmək üçün istifadə edilə bilən xətlər yaradır. Çoxbucaqlar xətlərin qapalı bir birləşməsindən əmələ gəlir və binalar, adalar və sərhədlər kimi qapalı bir sahəsi olan xüsusiyyətləri təmsil edir. Rektorlu məlumatlardan daha çox əlaqəli verilənlər bazasında vektor məlumat növləri daha çox yayılmışdır.

Raster məlumatlarıdigər tərəfdən, coğrafi məlumatların piksel şəklində göstərilməsidir. Tipik olaraq hava peyklərindən götürülmüş yerin görüntülərinə aiddir. Ümumiyyətlə, ölçmə və qətnamə kimi müvafiq metadata malik satırlar və sütunlar şəbəkəsində saxlanılır. Rastr məlumatlarının yaradılması vektor məlumat növlərindən daha sürətli və daha ucuzdur.

PostGIS ilə Postgres-də məkan məlumatları

Coğrafi mühitinizlə bağlı & quot; Xəstəxana nə qədərdir? ”,“ Ən yaxın mağaza haradadır? ”,“ O göydələn nə qədər hündürdür? ”Və ya & quot; Ən sürətli marşrut hansıdır?” Kimi sualları cavablandırmanız lazım olduqda. məkan məlumatlarının işə düşmə ehtimalı böyükdür.

Mekansal məlumatlar da elementlər arasındakı əlaqələri və əlaqələri analiz etmək üçün statistikada istifadə olunur. Məsələn, bir coğrafi ərazidə bir xəstəliyin yayılmasını təhlil edərkən, isti bölgələr məkan məlumatları istifadə edərək müəyyən edilə və karantinaya qoyula bilər. Bu məlumatlar epidemiyanın mənbəyini, şəhərlərin rayonlaşdırılmasını və daha çoxunu müəyyən etmək üçün istifadə edilə bilər. Daha çox proqram tətbiqi məkandan asılı olduğundan məkan məlumatlarını idarə etmə və saxlama tərziniz hər zamankindən daha vacibdir.

PostgreSQL, öz-özünə, məkan məlumatlarının saxlanması üçün dəstək vermir. PostGIS'in daxil olduğu yer. PostGIS, PostgreSQL verilənlər bazalarına məkan məlumatları qabiliyyəti əlavə edən pulsuz, açıq mənbəli bir uzantıdır. PostGIS sizə imkan verir məkan məlumatlarını saxlamaq və funksiyalar kitabxanasından istifadə etmək manipulyasiya etmək. PostGIS ilə bir verilənlər bazası coğrafi koordinatları, xətləri və formaları saxlaya və məkan funksiyalarından istifadə edərək sorğu edə bilər.

Amazon RDS və ya Google Cloud SQL kimi bir Verilənlər Bazası-Xidmət təminatçınızdan istifadə edirsinizsə, PostGIS-in artıq quraşdırılmış olması ehtimalı var. Öz serverinizi işlədirsinizsə, ətraflı məlumat üçün PostGIS veb saytına baxın). Qurulduqdan sonra PostGIS-i aktivləşdirmək aşağıdakı kimi sadədir:

İndi Django'da yerleşim verileri ilə necə işləyə biləcəyimizi görək.

Djangoda məkan məlumatları üçün GeoDjango'dan istifadə

GeoDjango, coğrafi tətbiqetmələr yaratmaq üçün istifadə edilən bir Django moduludur. Python'da bir məkan verilənlər bazasını idarə etmək üçün istifadə edilə bilər. Django ilə inteqrasiya olunur, lakin ayrıca bir çərçivə kimi də istifadə edilə bilər. Məkan əsaslı veb tətbiqetmələr yaratmağı mümkün qədər asanlaşdırmağı hədəfləyir.

Növbəti hissələrdə GeoDjango üçün dörd fərqli istifadə vəziyyətini görəcəksiniz. Bunlar, PostGIS istifadə edən bir Postgres verilənlər bazası ilə dəstəklənən bir Django tətbiqetməsində məkan məlumatlarını necə yarada, saxlaya və ala biləcəyinizi izah edəcəkdir. Fəzada iki yer arasındakı məsafəni tapmaq kimi ümumi əməliyyatlar üçün məkan məlumatlarının necə istifadə ediləcəyini də görəcəksiniz.

GEOSGeometry istifadə edərək poliqonlara qənaət

Çoxbucaqlı bir vektor məlumat növüdür: qapalı bir forma əmələ gətirən nöqtələrin əlaqəsi. GEOSGeometry istifadə edərək Djangoda bir məkan bazasına bir çoxbucaq əlavə edə bilərsiniz.

GEOSGeometry sinfi GEOS API-dən gəlir. İki arqument tələb olunur, birinci arqument qeyd olunan həndəsəni əks etdirən simli giriş və ikinci istəyə görə arqument, SRID (məkan istinad identifikatoru) nömrəsi. SRID, hansı koordinat sistemindən istifadə etmək istədiyinizi müəyyənləşdirən və məlumatların real yerlərə necə çevriləcəyini təsvir edən unikal bir identifikatordur. Məsafə və sahə məlumatlarını tapmaq kimi coğrafi funksiyaları yerinə yetirərkən, düzgün nəticəni təmin etmək üçün verilənlər bazasında istifadə edilənlə eyni SRID olan məlumatlardan istifadə etmək vacibdir.

GEOSGeometry istifadə edərək bir çoxbucağı məkan verilənlər bazasına saxlamaq üçün modelinizdə bir çoxbucaqlı sahənin təyin olunduğundan əmin olun. Fərz edək ki, müəyyən bir bank filialının fiziki real həyat sərhədini və formasını əks etdirən bir PolygonField (poly) olan bir dövlətdəki bütün bankları təmsil edən bir Bank modeliniz var:

GEOSGeometry ilə belə bir sahədə məlumatları saxlamaq üçün aşağıdakıları edə bilərsiniz:

GEOSGeometry sinifindən istifadə edərək Texasın San Antonio şəhərində müəyyən bir Suntrust bankının konturunu əks etdirən bir Poliqon obyekt yaratmısınız. POLYGON parametrinə verilən hər bir koordinat binanın konturunun “küncünü” müəyyənləşdirir.

GDALRaster istifadə edərək raster sahələri olan modellərə qənaət

Raster məlumatları ilə işləyərkən, bir rasterin saxlanması üçün istifadə olunan sahəyə ehtiyacınız var (RasterField adlanır). Raster funksionallığı həmişə PostGIS-in bir hissəsi olmuşdur, lakin PostGIS 3.0-dan etibarən raster uzantısı ayrı bir uzantıya ayrılmışdır. Quraşdırıldıqdan sonra uzantının işə salınaraq verilənlər bazanızda effektiv olduğundan əmin olun.

İndi fərz edək ki, üzərində raster sahəsi olan Elevation adlı bir modeliniz var. Elevation modeli fərqli səthlərin şaquli və üfiqi ölçüsünü təmsil edəcək və üzərindəki RasterField (rast, aşağıda göstərildiyi kimi) yüksəkliyi təsvir edən mücərrəd bir raster obyektini alan bir sahə olacaqdır. Məsələn, bir təpənin ərazisinin peyklə xəritələnməsi ola bilər:

RasterField bir GDALRaster obyektini saxlayır. GDALRaster, raster faylları kimi məkan formatı oxumasını dəstəkləyən bir obyektdir. Bu ilə əlaqələndirilə bilər iki giriş. İlk parametr ola bilər ya bir fayl yolunu və ya lüğəti təmsil edən bir sətir və ya rasteri təmsil edən bir bayt obyekti. İkinci parametr rastrın “yazma rejimində” açılmalı olub olmadığını müəyyənləşdirir. Yazma rejimindən istifadə etmirsinizsə, raster məlumatlarını dəyişdirə bilməzsiniz.

Aşağıda, GDALRaster raster.tif sənədini alır, bir fayl obyekti olaraq oxuyur və modelin RasterField-da saxlanıla bilən bir GDALRaster obyektinə köçürür:

Bu şəkildə, Fuji dağının ərazisini təmsil edən bir raster .tif şəkil sənədini saxlaya bilərsiniz.

Ölçüsü, ölçüsü, mənşəyi və srid parametrlərini ehtiva edən bir Python lüğətindəki xam məlumatlardan istifadə edərək yeni bir raster də yaradıla bilər. Aşağıda, eni və hündürlüyü 10 piksel olan bir kanyonu və rasterdəki bir məlumat qatını təmsil edən lentləri təsvir edən yeni bir rasterin necə təyin ediləcəyini görə bilərsiniz:

Həndəsə axtarışlarından istifadə edərək kosmosda nöqtələrin axtarışı

Həndəsə axtarışları başqa bir həndəsə daxilində nöqtələr, xətlər və çoxbucaqlar tapmağa kömək edir. Məsələn, nöqtənin bir çoxbucaqlının səthində olub olmadığını müəyyən etmək üçün həndəsə axtarışlarından istifadə edə bilərsiniz.

Əvvəlcə aşağıdakı kimi müəyyənləşdirilmiş bir Ölkə modeli yaradın:

Ölkə dünya ölkələrinin sərhədlərini saxlayan bir masanı təmsil edir. Daha sonra, verilənlər bazasındakı ölkələrdən birində müəyyən bir nöqtə koordinatının bir mpoly sahəsində saxlanıldığını yoxlamaq üçün GeoDjango istifadə edə bilərsiniz:

Bir nöqtənin müəyyən bir ölkənin içində olub olmadığını təyin etmək üçün məkan axtarışı da edə bilərsiniz. San Marino, Valdagrone'da bir yeri təmsil edən bir Nöqtə obyektini təyin etmək üçün aşağıdakı kodu çalıştırın. Sonra, ehtiva edən metoddan istifadə edərək bu nöqtəni axtara bilərsiniz:

Xallar arasındakı məsafənin hesablanması

Nəhayət, GeoDjango iki nöqtə arasındakı məsafəni hesablamaq üçün istifadə edilə bilər. İki nöqtə koordinatlarını bildiyinizi və aralarındakı məsafəni tapmaq istədiyinizi düşünərək Python qabığınızda aşağıdakıları işlədə bilərsiniz:

Bu nümunə, nöqtə koordinatlarını enlik / Boylam ondalık dərəcələrindən metrik məsafəyə çevirmək üçün çevirmə metodundan istifadə edir.

Daha çox Djangoya xas bir nümunə göstərmək üçün ABŞ-ın şəhərləri üçün belə bir model yarada bilərsiniz:

Şəhərlər arasındakı məsafəni hesablamaq üçün Point HopePoint Lay, bu kimi modellərdən istifadə edə bilərsiniz:

GeoDjango ayrıca distance_lt, distance_lte, distance_gt, distance_gte və dwithin kimi bəzi məsafədən axtarış funksiyaları təmin edir. Misal üçün:

Bu şəkildə, yer nöqtələri olan iki model və ya iki xam nöqtə obyekti arasındakı məsafəni tapmaq üçün GeoDjango istifadə edə bilərsiniz. Bu metodu yollar haqqında vektor və ya raster məlumatlarla birləşdirərək tətbiqetmə içərisində sürmək, gəzmək və ya velosiped sürmək üçün kompleks məsafə hesablamaları qura bilərsiniz.

Mekansal məlumatların bir çox mühüm real istifadə vəziyyətləri var. Bu yazıda PostGIS və GeoDjango-nun məkan məlumatlarını istifadə edən veb tətbiqetmələr yaratmaq üçün məkan verilərindən istifadə etməyinizə necə kömək edə biləcəyini gördünüz, lakin mövzu haqqında öyrənmək üçün hələ çox şey var. Daha çox məlumat və nümunə üçün PostGIS Giriş Sənədləri və GeoDjango API-yə baxdığınızdan əmin olun.

Bu məqaləni paylaşın: Bu məqaləni bəyəndinizsə, həmyaşıdlarınıza tweet göndərmək istəyə bilərsiniz.


PostGIS ilə məkan qruplaşması? - Coğrafi İnformasiya Sistemləri

PostGIS layihəsi svn-in işçi çəngəli (http://svn.osgeo.org/postgis/)

Veb URL istifadə edərək SVN ilə Git və ya ödəmə istifadə edin.

Rəsmi CLI ilə sürətli işləyin. Daha ətraflı.

GitHub Desktop-un işə salınması

Heç bir şey olmazsa, GitHub Desktop-ı yükləyin və yenidən cəhd edin.

GitHub Desktop-un işə salınması

Heç bir şey olmazsa, GitHub Desktop-ı yükləyin və yenidən cəhd edin.

Xcode işə salınır

Heç bir şey olmazsa, Xcodu yükləyin və yenidən cəhd edin.

Visual Studio Kodunun işə salınması

Kod məkanınız hazır olduqdan sonra açılacaqdır.

Kod məkanınızı hazırlamaqda problem oldu, xahiş edirəm yenidən cəhd edin.


Kursun xülasəsi

Gün 1

  1. Xoş gəlmisiniz
  2. Giriş
    • Məkan bazalarının, PostgreSQL və PostGIS-in tarixi və tarixi
    • Əlaqəli verilənlər bazası idarəetmə sistemlərinin izahı
    • verilənlər bazasının shapefiles kimi fayllardan üstünlüyü
    • PostGIS-i dəstəkləyən tətbiqetmələr
    • PostGIS-in real tətbiqləri
    • mülkiyyət məkan verilənlər bazası həlləri ilə müqayisə
  3. PostgreSQL, pgAdmin, PostGIS və QGIS-in quraşdırılması
    • Windows, Linux və ya OS X-də
  4. Məkan bazası yaradılması
    • yeni bir verilənlər bazası yaradın və onu PostGIS ilə kosmik olaraq təmin edin
  5. Məkan məlumatları yüklənir
    • PostGIS shapefile yükləmə vasitəsi
    • QGIS DBManager
    • digər alətlər
  6. Məşq məlumatlarına ümumi baxış
  7. Sadə SQL
    • PostGIS-də hər şey SQL (strukturlaşdırılmış sorğu dili) ilə edilir, belə ki, heç birini bilmirsinizsə, bu sizə əsasları verəcəkdir. Bütün verilənlər bazaları SQL-dən istifadə edir, buna görə vacib bir bacarıqdır
  8. Sadə SQL çalışmaları
    • Əsas SQL təcrübəsi
  9. Həndəsələr
    • OGC sadə xüsusiyyət həndəsələrini və bunları verilənlər bazasında necə saxlayacağınızı və idarə edəcəyinizi başa düşmək
  10. Həndəsə çalışmaları
    • Həndəsə funksiyalarını tətbiq etmək
  11. Məkan münasibətləri
    • Bərabərlər, kəsişmələr, daxilində və s. Kimi əlaqələri yoxlamaq və təsvir etmək funksiyaları. Əgər siz CİS etdinizsə, bunları masa üstü CBS-də necə edəcəyinizi bilirsiniz - indi onları verilənlər bazasında edin!
  12. Məkan münasibətləri çalışmaları
    • Məkan əlaqəsi funksiyalarını tətbiq etmək
  13. Məkan Qoşulmaları
    • bir GIS-də əsas qabiliyyətlərdən biri, bir verilənlər bazasında məkan birləşmələri etmək inanılmaz dərəcədə çevik və güclüdür.
  14. Mekansal məşqlərə qoşulur
    • Məkan birləşmələrini tətbiq etmək
  15. Məkan indeksləşdirmə
    • məkan indeksləşdirmə məkan məlumatlarının sorğularını sürətləndirir

Gün 2

  1. Layihə məlumatları
    • Fərqli koordinat istinad sistemləri arasında həndəsələrin çevrilməsi.
  2. Proyeksiya çalışmaları
  3. Coğrafiya
    • məlumatlarınızı uzun müddətli (proqnozlaşdırılmamış) olaraq saxlayın, lakin sferik həndəsədən istifadə edərək çox dəqiq məkan əməliyyatları aparın (WGS84 sferasında)
  4. Həndəsə qurma funksiyaları
    • Yeni həndəsələr ilə nəticələnən funksiyalar, məs.
    • Bufer
    • Centroid
    • Kəsişmə
    • Birlik (aka həll etmək və ya birləşdirmək)
  5. Daha Məkan Qoşulmaları
    • məkan birləşmələrinə daha dərin baxış, ilk məkan birləşmə hissəsindən bəri əhatə olunan digər funksiyaların birləşdirilməsi
    • yükləmə və məkan olmayan masalarla birləşmə
  6. Etibarlılıq
    • Həndəsələrin etibarlılığının yoxlanılması
  7. Bərabərlik
    • həndəsələr arasındakı bərabərliyin nə demək olduğunu daha dərindən araşdırmaq
  8. Xətti İstinad
    • x, y və ya qütb koordinatları istifadə etmək əvəzinə bir xətt boyunca mövqelərinə əsaslanan istinad xüsusiyyətləri.
  9. Ölçülü genişlənmiş 9 qovşaqlı model
    • həndəsələr arasındakı bütün mümkün əlaqələri anlamaq, sınaqdan keçirmək və istismar etmək
  10. İndekslər üzrə qruplaşdırma
    • verilənlər bazası kümelenmesi, fiziki olaraq əlaqəli məlumatları diskdə bir-birinə yaxınlaşdıran bir performans artırıcı vasitədir
  11. 3-D
    • PostGIS-də 3D həndəsələr ilə işləmək
  12. Ən Yaxın Qonşu Axtarılır
    • məsafəni heç düşünməyin, ən yaxın nədir? Düşündüyünüzdən daha mürəkkəbdir. PostGIS bunu səliqəli şəkildə həll edir
  13. Tetikleyiciler istifadə edərək Düzəliş Tarixinin İzlənməsi
    • bir qeyd yaradan / redaktə edən / silənlərin qeydlərini aparmaq üçün standart PostgreSQL tetikleyicilərindən istifadə edin
  14. Ətraflı Həndəsə Konstruksiyaları
    • bəzi çətin problemləri həll etmək üçün bəzi inkişaf etmiş SQL funksiyaları və yanaşmalarını öyrənin
  15. Mekansal üçün PostgreSQL-in tənzimlənməsi
    • Bir RDBMS olaraq PostgreSQL ola bilər və hər hansı bir şeyi saxlamaq üçün istifadə olunur, bu səbəbdən standart konfiqurasiya ümumi performans üçündür. Məkan məlumatları özünəməxsus problemlər yaradır - verilənlər bazasını optimal performans üçün necə quracağınızı öyrənin
  16. PostgreSQL Təhlükəsizliyi
    • Verilərinizin və verilənlər bazanızın bütövlüyünü və təhlükəsizliyini necə qorumaq olar
    • identifikasiya və rollar
    • verilənlər bazası əlaqələri
    • şifrələmə
  17. PostgreSQL Şemaları
    • sxemlər qovluq kimidir - sxemləri necə və niyə istifadə etmək
  18. PostgreSQL Yedəkləmə və Geri Yükləmə
    • çox vacib!
  19. Proqram yeniləmələri
    • PostgreSQL və ya PostGIS yükseltmelerini necə idarə etmək olar

Qiymətləndirmə tədris modulları arasında yerləşmiş məşqlərin uğurla başa çatmasına əsaslanır.

QGIS, nəticələr görüntüləmək, SQL müştəri (DB Meneceri vasitəsilə) və PostGIS-ə məlumat yükləmək üçün kurs boyunca geniş şəkildə istifadə olunur. pgAdmin və digər müştərilər də təqdim olunur. Kurs müddətində yazılan SQL əmrləri tələbə tərəfindən bir istinad olaraq qeyd olunur və beləliklə sorğuları evdə və ya işdə nəzərdən keçirə və ya yenidən istifadə edə bilər.

Tələbələri öz məlumatlarını gətirməyə təşviq edirik ki, kurs zamanı və bacarıqları varsa, öz məlumatları ilə kursda öyrəndikləri bacarıqları tətbiq edə bilsinlər və hətta məkan bazası istifadə etməyə hazır bir ofisə qayıtsınlar. .


BuntDB - Xüsusi indeksləşdirmə və yerleşim dəstəyi ilə Go üçün quraşdırıla bilən, yaddaşda olan açar / dəyər bazası

BuntDB, təmiz Go-da aşağı səviyyəli, yaddaşda olan bir açar / dəyər deposudur. Diskdə qalır, ACID uyğun gəlir və birdən çox oxucu və tək bir yazıçı üçün kilidləmə istifadə edir. Xüsusi indeksləri və yerleşim məlumatlarını dəstəkləyir. Etibarlı bir verilənlər bazasına ehtiyacı olan və məlumatların ölçüsünə görə sürətə üstünlük verən layihələr üçün idealdır. BuntDB yaratmaq istəyi, Tile38 və SummitDB üçün yeni bir daxilolma verilənlər bazası ehtiyacından qaynaqlanır.


PostGIS-də SSURGO Məlumatlarının Təhlili: Baxış

Xəbərlər
NCSS-in əsas verilənlər bazasına veb əsaslı, SQL interfeysi qurduğu görünür. Bu yeni vasitə yaxınlarda NCSS Bülleteninin 40-cı nömrəsində vurğulandı və yaxşı sənədləri olan perspektivli yeni bir vasitə kimi görünür. NCSS tərəfindən təklif olunan "veb xidmətlərin" siyahısı bu səhifədə təqdim olunur.

Baxış
SSURGO məlumatlarının təhlili məkan və atribut məlumatları arasındakı bir sıra iyerarxik, birdən çox cədvəl əlaqələri ilə çətinləşir. SSURGO verilənlər bazasının quruluşunu anlamaq, torpaq xüsusiyyətlərinin düzgün təfsiri və toplanması üçün vacibdir. Hər hansı bir SSURGO əsaslı təhlildən əvvəl, istifadə olunan məhsullar, minimum xəritəçəkmə ölçüləri və digər vacib detallar daxil olmaqla məhsulun təfərrüatları ilə məşhur olmaq üçün bir az vaxt ayırın. Bundan əlavə, SSURGO meta məlumatları ilə məşhur olmaq mütləqdir. Metadata səhifəsində cədvəl quruluşunun ətraflı təsviri, sütun adları və bölmələri, habelə SSURGO verilənlər bazasına daxil edilmiş cədvəlli məlumatların çoxunun mənbələri barədə mühüm məlumatlar yer alır.

SSURGO məlumatları anket sahəsi ilə The Soil Datamart-dan yüklənə bilər, məkan məlumatları shapefile formatında və atribut məlumatları düz mətn şəklində çatdırılır. Təəssüf ki, bir M.S. SSURGO atribut məlumatlarını Torpaq Datamartından göndərildiyi kimi istifadə etmək üçün giriş verilənlər bazası şablonu tələb olunur. Bu prosedurda kömək üçün xahiş edirəm NRCS SSURGO səhifəsinə baxın. Bu yanaşmadan istifadə edərək SSURGO-nun ən çox təhlili bir CBS mühitində sorğu-sorğu edilməlidir. Ümumi təlimatlar üçün bu sənədə baxın.

Bir neçə onlayn tətbiqetmə, GIS və ya RDBMS məlumatlarına ehtiyac olmadan SSURGO verilənlər bazası ilə sadə qarşılıqlı əlaqəyə imkan verir. Bəzi nümunələrə aşağıdakılar daxildir:

    CA, AZ və NV torpaq məlumatlarına onlayn interfeysimiz. Nümunə qarşılıqlı fəaliyyət burada, burada və burada. NRCS tətbiqi ilə təmin edilmişdir

SSURGO-ya Açıq Mənbə Yanaşması
138 tədqiqat sahəsi üçün bütün məkan və cədvəl məlumatlarını saxlamaq üçün məşhur və açıq mənbəli əlaqəli verilənlər bazası idarəetmə sisteminin Postgresql-in məkan cəhətdən effektiv bir versiyası olan PostGIS istifadə edərək SSURGO məlumatları ilə işləməyə alternativ bir yanaşma hazırladıq. Bu yanaşma, yarım milyondan çox torpaq poliqonunun sürətli girişini, analizini və toplanmasını asanlaşdırır. SQL (strukturlaşdırılmış sorğu dili) həm torpaq məkan, həm də atribut məlumatları ilə birbaşa əlaqə qurmaq üçün istifadə olunur. PostGIS-ə digər məkan məlumatları (məsələn, torpaq örtüyü, iqlim məlumatları və s.) İdxal olunursa, demək olar ki, bütün məkan və atribut təhlili tamamilə PostGIS-dən edilə bilər. Ümumi vəzifələri əks etdirən bir sıra nümunələr sonrakı səhifələrdə təqdim olunacaq.

SSURGO ilə işləmək üçün ümumi yanaşma (bu sənəddə də göstərilmişdir) (xəritə vahidi tərkibi haqqında daha çox fikir)

  1. Bəzi analizlərə daxil edilməli olan torpaq xüsusiyyətlərini müəyyənləşdirin
  2. Üfüqləri ümumiləşdirmək üçün istifadə ediləcək uyğun toplama formasına qərar verin
    • dərinlik ağırlığında (yəni üfüqlər boyunca orta hesabla gil hesablamaq)
    • üst 1m (yəni torpağın üst qatının azalma-şişmə qabiliyyətini ümumiləşdirmək)
    • üst üfüq (yəni səthi üzvi karbonun xülasəsini vermək)
    • profil cəmi (yəni ümumi su tutma qabiliyyətini hesablamaq)
    • ən məhdudlaşdırıcı (yəni torpaq profili içərisində ən məhdud hidravlik keçiriciliyi hesablamaq)
  3. Ümumi üfüq məlumatları: sonra NULL dəyərlərini və ağırlıqlarını süzmək
  4. Komponentləri ümumiləşdirmək üçün istifadə ediləcək uyğun toplama formasına qərar verin
    • komponent faiz ağırlığında (yəni, hər bir vahidin təxmin edilən faiz nisbətləri ilə ölçülən hər bir komponentdən məlumatlar daxil ediləcəkdir)
    • ən böyük komponent (yəni ümumiyyətlə bu 'dominant' komponentin seçilməsi ilə nəticələnir, lakin eyni təxmin faiz nisbətlərinə sahib çoxsaylı komponentlər olduqda)
    • böyük komponent bayrağı (yəni NRCS tərəfindən 'əsas komponent' olaraq qeyd olunan komponentlər bir xəritə vahidi içərisində dominant torpaq növlərini təmsil edir. bəzən 'əsas komponentlər' olaraq qeyd olunan birdən çox komponentin olduğunu unutmayın.)
    • dominant şərt (yəni bu, ümumiyyətlə hidrik şərtlər kimi qəti məlumatlar üçün istifadə olunur. toplama bir xəritə vahidi içərisində ən çox görülən vəziyyət seçilərək həyata keçirilir)
  5. Komponent məlumatlarının cəmlənməsi: sonra NULL dəyərlərini və ağırlıqlarını süzmək
  6. yuxarıdakı ümumi məlumatları (üfüq məlumatları üçün 2x toplama prosesi) xəritə vahid poliqonlarına qoşun
  7. See the diagram at the bottom of this page for a graphical summary

Notes on the Format of SSURGO


PostGIS

The primary spatial-data extension is PostGIS. PostGIS (Geographic Information Systems) is an open-source extension of the PostgreSQL database that lets you work with geographic objects that integrate directly with your database. With PostGIS, geographic and spatial data can be treated as first-class objects in your database.

By adding the PostGIS extension to your PostgreSQL database, you can work seamlessly with geospatial data without having to convert that data from the format that the rest of your application is working with to use with your database. You can also determine relationships between that spatial data with the extension, such as the distance between two objects in your database. You can also use PostGIS to render visualizations of this data.

Working with data such as cities and geometry data is as simple as something like:

SELECT superhero.name

FROM city, superhero

WHERE ST_Contains(city.geom, superhero.geom)

AND city.name = 'Gotham'

PostGIS includes:

The hierarchy of these spatial-focused type (from Introduction to PostGIS) is below:

  • Spatial-Indexing
  • Efficiently index spatial relationships
  • Spatial-Functions
  • For querying spatial properties, and the relationships between them
  • Functions for analyzing geometric components, determining spatial relationships, and manipulating geometries

In most databases, data is stored in rows and columns. With PostGIS, you can actually store data in a geometry column. This column stores data in a spatial coordinate system that’s defined by an SRID (Spatial Reference Identifier). This allows your database structure to reflect the spatial data that’s stored in the database.


Movement data in GIS: issues & ideas

Since I’ve started working, transport and movement data have been at the core of many of my projects. The spatial nature of movement data makes it interesting for GIScience but typical GIS tools are not a particularly good match.

Dealing with the temporal dynamics of geographic processes is one of the grand challenges for Geographic Information Science. Geographic Information Systems (GIS) and related spatial analysis methods are quite adept at handling spatial dimensions of patterns and processes, but the temporal and coupled space-time attributes of phenomena are difficult to represent and examine with contemporary GIS. (Dr. Paul M. Torrens, Center for Urban Science + Progress, New York University)

It’s still a hot topic right now, as the variety of related publications and events illustrates. For example, just this month, there is an Animove two-week professional training course (18–30 September 2016, Max-Planck Institute for Ornithology, Lake Konstanz) as well as the GIScience 2016 Workshop on Analysis of Movement Data (27 September 2016, Montreal, Canada).

Space-time cubes and animations are classics when it comes to visualizing movement data in GIS. They can be used for some visual analysis but have their limitations, particularly when it comes to working with and trying to understand lots of data. Visualization and analysis of spatio-temporal data in GIS is further complicated by the fact that the temporal information is not standardized in most GIS data formats. (Some notable exceptions of formats that do support time by design are GPX and NetCDF but those aren’t really first-class citizens in current desktop GIS.)

Most commonly, movement data is modeled as points (x,y, and optionally z) with a timestamp, object or tracker id, and potential additional info, such as speed, status, heading, and so on. With this data model, even simple questions like “Find all tracks that start in area A and end in area B” can become a real pain in “vanilla” desktop GIS. Even if the points come with a sequence number, which makes it easy to identify the start point, getting the end point is tricky without some custom code or queries. That’s why I have been storing the points in databases in order to at least have the powers of SQL to deal with the data. Even so, most queries were still painfully complex and performance unsatisfactory.

So I reached out to the Twitterverse asking for pointers towards moving objects database extensions for PostGIS and @bitnerd, @pwramsey, @hruske, and others replied. Amongst other useful tips, they pointed me towards the new temporal support, which ships with PostGIS 2.2. It includes the following neat functions:

  • ST_IsValidTrajectory — Returns true if the geometry is a valid trajectory.
  • ST_ClosestPointOfApproach — Returns the measure at which points interpolated along two lines are closest.
  • ST_DistanceCPA — Returns the distance between closest points of approach in two trajectories.
  • ST_CPAWithin — Returns true if the trajectories’ closest points of approach are within the specified distance.

Instead of points, these functions expect trajectories that are stored as LinestringM (or LinestringZM) where M is the time dimension. This approach makes many analyses considerably easier to handle. For example, clustering trajectory start and end locations and identifying the most common connections:


What Happens Next?

Təbrik edirik! You’ve just loaded spatial data into a PostGIS database! Here’s a tip to spin up a PostGIS database much faster: try uploading your shapefiles to CartoDB. CartoDB is a mapping and analysis platform that uses PostGIS, and any data uploaded goes into a database. There are advantages to using your own database, but it’s hard to beat the ease of uploading data to CartoDB and watching your shapefile (or spreadsheet) get loaded into PostGIS in seconds.

In the next post in this series we’ll show you some spatial queries you can perform with PostGIS (either in your PostGIS database or CartoDB) to examine the distribution of trees in Edmonton.


Videoya baxın: 5 Saniyede WhatsApp Nasıl Ele Geçirilir %100 GERCEK.