Daha çox

PostGIS-də çoxbucaqlıdan çoxpolyoqona necə çevirmək / yazdırmaq olar?


Çoxbucaqlıları çoxpoliqon tipinə yazmağın bir yolu varmı?

Məsələn, bir nöqtədə ST_Buffer () istifadə edərək bir dairə yaratdım. Bu funksiyanın qaytarma növü çoxbucaqlı tiplidir. Məsələ burasındadır ki, həndəsə sütununda onu çoxpoliqon tipi ilə məhdudlaşdıran bir məhdudiyyət var. Beləliklə, sadə bir çoxbucaqlı əlavə edə bilmirəm.

ST_MPolyFromText () funksiyasından istifadə etdim, amma hər zamankı kimi bunun üçün null qayıdır və ST_Dump () lazımi nəticəni vermir.

Məhdudiyyət:

CONSTRAINT enforce_geotype_geom CHECK (geometrytype (geom) = 'MULTIPOLYGON' :: text VƏ geom boşdur),

ST_Multi - Həndəsəni ÇOX * həndəsə kimi qaytarır. Həndəsə artıq ÇOX * olduqda, dəyişmədən qaytarılır.

Misal:

SEÇİN ST_AsText (ST_Multi (ST_GeomFromText ('POLYGON ((743238 2967416,743238 2967450, 743265 2967450,743265.625 2967416,743238 2967416))'))); st_astext ------------------------------------------------- ------------------------------------------------- MULTIPOLİGON (((743238 2967416,743238 2967450,743265 2967450,743265.625 2967416, 743238 2967416))) (1 sıra)

AdaBase

AdaBase, Məkan Verilərindən istifadə üçün təbii dəstək təmin edir OpenGIS anlayışlar. Dəstək xüsusi olaraq MySQL (Məkan Məlumat uzantıları) və PostgreSQL (PostGIS uzantısı) üçün təmin edilir.

Həndəsə məlumatlarını almaq üçün xüsusi qayğı göstərilməməlidir. AdaBase bir həndəsə növü aşkar edərsə, daxili məlumatları "Yaxşı bilinən ikili" (WKB) formatına çevirəcək və içəridə saxlayacaqdır. Bir simli çevirmə tələb olunursa, AdaBase WKB-ni digər sorğularda istifadə üçün uyğun olan "Yaxşı bilinən mətn" formatına çevirir. Daha da əhəmiyyətlisi nöqtələr, xətt sətirləri və çoxbucaqlılar kimi ibtidai həndəsi fiqurlar çıxarıla bilər və 16 rəqəmli həqiqi ədədlər olan nöqtə koordinatları lazım olduqda birbaşa əldə edilə bilər. Çox nöqtəli, çox sətirli simli və çox poliqon kimi qeyri-müəyyən sayda oxşar elementləri ehtiva edən homogen geometriya kolleksiyaları da dəstəklənir. Nəhayət, hər hansı bir geometriyanın heterojen qarışığını ehtiva edə bilən "həndəsə kolleksiyaları" dəstəklənir. PostGIS vəziyyətində, bir kolleksiyada bir çox rekursiv səviyyə içərisində digər kolleksiyalar ola bilər - bir kolleksiyada 23 digər kolleksiyalar ola bilər. MySQL-də bu dəstəklənmir və həndəsə toplama növü yalnız 6 növdən ibarət ola bilər (üç tək tip və analoji çoxsaylı tip).

Həndəsə məlumatlarını almaq və idarə etmək

Bir sıra götürdükdən sonra xüsusi şəxsi qaytarmaq üçün standart sahə dönüşümünü "as_geometry" istifadə edin həndəsə növü. Həndəsənin yaxşı bilinən mətn təsvirini almaq üçün ya standart sahə dönüşümünü "as_string" istifadə edin, ya da həndəsəni Yaxşı_Məlum_Mətn hər ikisi standart simləri qaytaran funksiya.

Bu sahədə hansı həndəsə növü olduğunu artıq bilə bilərsiniz, ancaq hər hansı bir forma icazə vermək üçün verilənlər bazası cədvəlinin hazırlanması mümkündür. Təyini etmək Collection_Type həndəsə, onu kolleksiya növü funksiya. Həndəsədə neçə komponentin olduğunu müəyyən etmək üçün kolleksiyanın ölçüsü funksiya. Tək həndəsələr (nöqtə, xətt sətri, çoxbucaqlı) bu funksiya üçün həmişə 1 qaytarır. Əgər Collection_Type heterojendir, hər kolleksiya elementinin hansı həndəsə olduğunu bilmək arzu oluna bilər. Bu məlumat üçün istifadə edin kolleksiya_şeh_ növü funksiya.

Hər həndəsə ən əsas element olan 2 ölçülü nöqtəyə qədər parçalana bilər. Xallar X, Y koordinatlarından ibarətdir Həndəsi_Real 18 rəqəmli tip, dönüşümlər dəyəri 16 əhəmiyyətli rəqəmə qədər yuvarlaqlaşdıracaq. Bir nöqtəni almaq üçün tək nöqtə və ya çox nöqtə həndəsələr, istifadə edin almaq_ nöqtəsi funksiya.

Eynilə, bir sətir sətri yalnız bir nöqtədir. Bir sətir simli əldə etmək üçün (yazın Həndəsi_Sətir_Sətir, istifadə edin almaq_sətir funksiyası açıqdır single_line_stringmulti_line_string həndəsə növləri.

Çoxbucaqlar daha mürəkkəbdir. Struktur olaraq, onlar xətt tellərinə bənzəyirlər, lakin ilk və son nöqtə eyni olmalıdır (beləliklə forma bağlıdır) və struktur elementləri üzüklər kimi tanınır. Birincisi, xarici üzükdür. Bir çoxbucaqlı, sıfırdan sonsuza qədər dəlik kimi də bilinən "daxili" üzüklərə sahib ola bilər. Çuxurlarla əlaqəli müəyyən qaydalar var (məsələn, toxuna bilməzlər, qapalı olmalıdırlar və s.), Buna görə çoxbucaqlı əsasən nöqtələr massividir. Biri növ kimi çoxbucaqlıları çıxarır Həndəsi_Poliqon istifadə edərək poliqon almaq bu funksiyanı bir növ həndəsə ötürərək tək_polygon və ya multi_polygon. Çoxbucaq xüsusi bir tipdir, buna görə neçə üzük olduğunu (1 və ya daha çox) müəyyən etmək üçün istifadə edin sırğaların sayı funksiya. Bir növ üzük əldə etmək Həndəsi_Ringbir sətir simlinə bənzər bir alın funksiya.

Həndəsə kolleksiyaları tip həndəsələrdir heterojen. İçəridə neçə element olduğunu müəyyən etdikdən sonra istifadə edin toplama_subcollection kolleksiya elementini yeni bir həndəsə olaraq təmizləmək funksiyası. Məsələn, bir kolleksiyanın üçüncü elementi bir çoxbucaqlıdırsa, daha da parçalana bilən çoxbucaqlı həndəsəni çıxarmaq üçün axtarış funksiyasından istifadə edin. poliqon almaq funksiya. PostgreSQL GIS uzantıları olan PostGIS-də çıxarılan həndəsə ayrıca alt kolleksiyalarının da çıxarılması lazım olan başqa bir heterojen kolleksiya ola bilər.

Həndəsələr necə yaradılır

Müxtəlif səbəblərdən, məsələn, bir əlavə və ya yeniləmə sorğusunu dəstəkləmək məqsədi ilə Tanınmış Mətnin məhsul olaraq istənilməsi, ümumiyyətlə onu qurmaqla həyata keçirilən həndəsələrin yaradılması arzu oluna bilər.

Tək nöqtəli həndəsə necə yaradılır

Bu asandır. Yalnız bir növ dəyişənini ötürün Həndəsi_Nöqtə üçün başlanğıc_əs_ nöqtəsifunksiyası və bu nöqtəni ehtiva edən bir həndəsə qaytarılacaqdır.

Çox nöqtəli həndəsə necə yaradılır

Bu, tək bir nöqtə ilə eyni şəkildə edilir, əksinə başlanğıc_as_multi_point funksiyasından istifadə olunur. Bu həndəsə yalnız bir nöqtəni tutmaq üçün tələb olunur, buna görə tək nöqtəli və çox nöqtəli həndəsə arasındakı fərq yalnız bir nöqtə daxil olduqda təsnifatda olur.

Tək sətirli simli həndəsə necə yaradılır

Əvvəlcə a Həndəsi_Sətir_Sətir dəyişən (bir sıra massivi) və ya sadəcə bir sıra xalları birbaşa başlanğıc_əs_ xətti funksiyası və uyğun həndəsə qaytarılır.

Çoxsaylı sətirli həndəsə necə yaradılır

Proses tək sətirli sətirlə eynidir başlanğıc_as_multi_line əvəzinə funksiyadan istifadə olunur. Bu həndəsə yalnız bir simli tutmaq üçün tələb olunur.

Çoxbucaqlı həndəsə necə yaradılır

Çoxbucaqlı bir anda yalnız bir üzük düzəldilə bilər və həndəsə iki mərhələdə qurulmalıdır. İlk addım özəl yaratmaqdır Həndəsi_Poliqon keçərək yazın a Həndəsi_Ring (bir sıra nöqtələr) start_polygon funksiya. Çoxbucağın deşikləri varsa, bunları mövcud çoxbucaqlı və başqa bir üzükdən istifadə edərək append_inner_ring prosedurundan istifadə etməklə təyin etmək lazımdır. Çoxbucaq tam qurulduqda, istifadə edərək həndəsə yaradıla bilər başlanğıc_as_polygon və ya başlanğıc_as_multi_polygon funksiyaları.

Çox nöqtəli həndəsəyə nöqtələr necə əlavə olunur

The genişləndirmə_ çox nöqtə prosedur mövcud çox nöqtəli həndəsələrə əlavə nöqtələr əlavə etmək üçün istifadə olunur.

Çox sətirli simli həndəsəyə sətirlər necə əlavə olunur

The genişləndirmə_saylı_xətti prosedur mövcud çox sətirli simli həndəsələrə əlavə sətir sətirləri əlavə etmək üçün istifadə olunur.

Çox poliqonlu həndəsəyə sətirlər necə əlavə olunur

The genişləndirmə_ çox çox_polygon prosedur mövcud çox poliqonlu həndəsələrə əlavə çoxbucaq əlavə etmək üçün istifadə olunur.

Heterogen həndəsələr necə yaradılır

Həndəsə kolleksiyalarını qurmaq üçün əvvəlcədən bəhs edilən metodlardan biri ilə həndəsə əldə etməlisiniz və sonra istifadə edərək yeni bir kolleksiyanı kolleksiyanı işə sal. İstifadə edərək əlavə həndəsələr əlavə olunur artım_toplama lazım olduğu qədər prosedur.


Rails on CIS

Yerleşim məlumatları ilə məşğul olmaq çətin və eyni zamanda əyləncəlidir. Bunu ilk dəfə edən geliştiricilər bəzi yol blokatorlarına daxil ola bilər, ancaq irəlilədikcə bu öyrənmə sevinci yaşadır. GIS, coğrafi məlumatların toplanması, xəritələşdirilməsi və təhlili ilə məşğul olan Coğrafi informasiya sistemidir. Ancaq səsləndiyi qədər asan deyil. Layihəmdə bu yaxınlarda qarşılaşdığım çətinliklərlə üz-üzə gəlim:

Tələb: Mövcud çoxbucaqlı məlumatları və poliqonla enlem və boylam verilmiş xəritəni idxal edin.

Çağırış-1: Əsasları və jarqonları anlamaq

İlk dəfə etdiyim üçün hansı SRID-dən istifadə etməliyəm, hansı məlumat növündən istifadə etməliyəm, hansı koordinat sistemindən istifadə etməliyəm? Hərtərəfli araşdırmalardan sonra srid 4326, multipolygon datatype və WGS 84 koordinat sistemi istifadə edirəm.

Bəlkə də bir çoxunuz WGS 84-ün nə demək olduğunu anlamırsınız? WGS 84, Ümumdünya Geodeziya Sisteminin qısaltmasıdır, 1984-cü ildə aparılmış bir növ tədqiqatdır (standart). Hal-hazırda WGS 72, WGS 66 və WGS 60 və s. Kimi mövcud olan müxtəlif standartlar mövcuddur. Bunlar anketlərdir (standartlar) o illərdə yer haqqında bəzi fərziyyələr irəli sürərək həyata keçirilən. Beləliklə, məsələn, WGS 84-dən istifadə edərək Hindistanın yerini hesablasaq, WGS 72-dən istifadə etdikdə fərqli ola bilər.

SRID, məkan məlumatları toplayarkən istifadə etdiyimiz koordinat sistemi haqqında məlumat verən Məkan Referans Sistemi Tanıtıcıdır.

Çağırış-2: Məlumat idxal

Postgresql ilə işləyən relslərdən istifadə etdiyimizə görə, verilənlər bazasına məlumat idxal etmək çox asandır, lakin geojsonformatda əvvəllər heç görmədiyim məlumatları aldığımız üçün bu vəziyyətdə deyil. Xoşbəxtlikdən yaqut, həyatımızı asanlaşdıran rgeo-json adlı bir daş verir. Geojson məlumatlarını idxal etmək üçün yazdığım kod parçası aşağıdakılardır.

burada çoxbucaqlı modelimizdir. Budur köç faylımız belədir:

Çağırış-3: SQL sorğusundan istifadə edərək çoxbucaqlı xəritə nöqtəsi

PostGIS, postgres-in məkan hesablamaları etməsini təmin edən bir postgres verilənlər bazası uzantısıdır. Verilən nöqtəni tapmaq üçün st_contains funksiyasından hansı poliqondan istifadə etməliyik. St_contains istifadə etmək üçün əvvəlcə iki həndəsənin eyni SRID istifadə edib etməyəcəyinə əmin olmalıyıq, yəni vəziyyətimiz 4326-dır. Mənim verilənlər bazamda genişliyi və boylamı float sütunları kimi saxladığımız üçün əvvəlcə onları yazmalıyıq bir nöqtə olaraq və SRID-i 4326 olaraq aşağıdakı kimi təyin edin:

İndi uyğun poliqonu tapmaq üçün son sorğu:

Tələbi yerinə yetirmək üçün vaxt lazım olsa da, sonunda hiss etdim ki, ümumiyyətlə etdiyimdən fərqli bir şey etdim. Ümid edirəm bu məqalə CİS haqqında bir az işıq saçacaq.


AsGML ¶

Mövcudluğu: Oracle, PostGIS, SpatiaLite

Tək bir coğrafi sahəni və ya ifadəni qəbul edir və həndəsənin Coğrafi Biçim Dili (GML) təqdimatını qaytarır.

Açar söz mübahisəsi Təsvir
dəqiqlik GML nümayəndəliyindəki koordinatlar üçün əhəmiyyətli rəqəmlərin sayını təyin edir - standart dəyər 8-dir. Oracle-da nəzərə alınmır.
versiya İstifadə ediləcək GML versiyasını təyin edir: 2 (standart) və ya 3.

Açıq Yerleşim Texnologiyaları

Rgdal paketindəki readOGR funksiyası, vektor məkan məlumat mənbələrini R.-yə gətirmək üçün istifadə olunur. ReadOGR () formatın çevrilməsində OGR (GDAL / OGR kitabxanasının bir hissəsi) etibar edir. Təəssüf ki, OGR sütunları (-select açarı ilə) və ya sətirləri (-where açarı ilə) alt qurmaq və ya tam bir SQL ifadəsi istifadə edərək bir qat tələb etmək qabiliyyətini dəstəkləsə də, bu funksiyaların heç biri readOGR-da mövcud deyil. Hər dəfə bu, poçt siyahılarında müzakirə olunur, lakin funksionallıq hələ həyata keçirilməyib.

Veriləriniz artıq bir SQL verilənlər bazasındadırsa, şanslısınız. Eyni şeyi R daxilində verilənlər bazasında bir məkan görünüşü yaratmaq, məkan görünüşünü readOGR ilə yükləmək və sonra görünüşü buraxmaqla edə bilərsiniz. PostGIS məlumat mənbələri üçün bunu edən bir funksiya yaratdım.

ReadOGR, məlumat mənbəyinə təsadüfi SQL göndərə bilməyəcəyi üçün, funksiya RPostgreSQL paketini də tələb edir. ReadOgrSql funksiyasının readOGR-a mümkün qədər yaxından uyğunlaşmasını istədiyim üçün, funksiya DSN-i bir simvol simli kimi götürür, sonra DSN parametrlərini dbConnect-ə ötürmək üçün ayırır. readOGR DSN-i bu formatda gözləyir:

İstifadəçi ümumi sxemdə obyektlər yaratmaq üçün imtiyazlar tələb edir.

Sonra readOgrSql belə adlandırıla bilər:

(Sonuncu sətir qətiliklə lazım deyil, ancaq konkret xüsusiyyətlərə adlarına istinad etməyi asanlaşdırmaq üçün istifadə etdiyim kiçik bir hiylədir.)

Bu anda bu yalnız PostGIS 2.0+ üçün işləyir. PostGIS-in son versiyalarında məkan baxışlarının avtomatik olaraq qeydiyyata alındığına əsaslanır, çünki geometriya_ sütunları & # 8220table & # 8221 həqiqətən bütün cədvəllərdə bütün həndəsə sütunlarını tapan bir görünüşdür. Ancaq görünüşün tam bir məkan qatında işləməsi üçün SELECT ifadəsindəki həndəsə sütunu tipik bir həndəsə istifadə edərək açıq şəkildə tökülməlidir. Nümunədə bu, həndəsə (MultiPolygon, 2263) ilə, ümumiyyətlə həndəsə (& ltgeometry type & gt, & ltsrid & gt) ilə həyata keçirilir. Həndəsədə dəyişiklik olmadıqda, əsas cədvəl PostGIS 2.0+ tipli həndəsə sütunları istifadə edilərək müəyyənləşdirildiyi müddətdə açıq dökümdən qaçınmaq olar:

çevrilmiş həndəsə ümumi olduğundan yalnız qismən işləyəcəkdir. Ətraflı məlumat üçün həndəsə sütunlarında Həndəsə Sütunlarını Əl ilə Qeyd etmə bölməsinə baxın. Qeyd edək ki, rgdal edir layı uyğun bir Məkan * DataFrame-ə yükləmək üçün kifayət qədər ağıllıdır (məs., bir OGC Çoxbucağı və ya MultiPolygon üçün SpatialPolygonsDataFrame), lakin məkan istinad məlumatlarını (yəni proyeksiya və ya koordinat sistemi) itirəcəkdir. Tamamını quracaq, ancaq R-də düzəltmədikcə, fərqli koordinat istinad sistemlərindəki qatlarla birləşdirə bilməyəcəksiniz.

Bunu PostGIS pre-2.0 və ya SpatiaLite üçün işləmək üçün genişləndirmək çox çətin olmamalı, lakin həndəsə_ sütunlarında məkan görünüşünü əl ilə qeyd etməyi tələb edəcəkdir.


PostGIS ilə bağlı SO-dakı sualımı cavablandırmaq istəyən ola bilərmi?

Bəli, çox əsaslı bir hesablama etdiyim zaman, məsələn, müəyyən bir nöqtənin (çox) çoxbucaqlının içərisində olduğunu hesablamaqla, çox poliqonu 1 xüsusiyyət olaraq alacaqsınız, doğrudurmu?

Bu o deməkdir ki, eyni şeyləri çoxpoliqonla müqayisədə çoxbucaqlı kolleksiyada eyni hesablamanı etməklə daha sürətli hesablayır?

Bunu izah etməyin ən əsas yolu:

Çoxbucaqlı - Bir axtarışda ayrı-ayrı çoxbucaqlılara daha sürətli giriş təmin edəcək, çünki satırlar olacaq və buna görə də hər biri indekslənəcəkdir.

Multipolygon - Çox axtarmırsınızsa və hər zaman eyni anda bütün poliqonlara ehtiyacınız varsa, bu daha sıx saxlama olacaq, çünki başqa bir sahə məlumatını təkrarlamaq məcburiyyətində qalmayacaqsınız.

Bu qərarlar verilərkən nəzərə alınmalı olan ən vacib şey məlumatlarınız və bunlara necə daxil olacağınızdır. Qiymətləndirmə həmişə sizin dostunuzdur, ancaq xəbərdar olun ki, məlumatlarınıza və tələb etdiyiniz şeylərə görə kəskin şəkildə dəyişəcəkdir.


PostGIS-ə giriş: Hissə 1

PostGIS, verilənlər bazasına məkan obyektləri əlavə edən PostgreSQL verilənlər bazası üçün perspektivli bir uzantıdır. Sadə dildə desək, PostGIS bir verilənlər bazasına coğrafi imkanlar əlavə edir. Gündəlik həyatımızda Məkan Əsaslı Sistemlərin (LBS) artan əhəmiyyəti ilə, PostGIS, coğrafi məlumatlı tətbiqetmələr quran inkişaf etdiricilər və memarlar qarşısında gizlənən bir nemətdir.

PostGIS, bu cür hesablamaları yerinə yetirmək üçün qısa və dəqiq bir arxa hissə təmin edərək, yerə əsaslanan məzmunun saxlanması, alınması və axtarışının sınaq və səhv əsaslı metodunu aradan qaldırır.

MySQL fonlu inkişaf etdiricilər, MySQL-də bir yer əsaslı məlumat bazası qurmağın və miqyaslandırmanın nə qədər çətin olduğunu bilə bilər. MySQL-də bəzi məkan uzantıları olmasına baxmayaraq, PostGIS-in təmin etdiyi üstünlüklər və sürətdən uzaqdırlar.

PostGIS 2.1-in bu yaxınlarda yayımlanması ilə - PostGIS-in gücü bazadakı Raster və Vector analiz dəstəyindən 3B həndəsələrə (enlik, boylam və hündürlük / hündürlük) dəstək verməyə qədər üç dəfə artmışdır.

Bu təlimatın 1-ci hissəsində aşağıdakıları əhatə edəcəyik:

  1. PostGIS üçün ön şərt kitabxanaların quraşdırılması.
  2. Linux-da PostGIS-in qurulması.
  3. İlk məkan verilənlər bazasının yaradılması - TestGIS.
  4. Verilənlərin TestGIS-ə idxalı

Hissə 2-də mövzuya davam edəcəyik

  1. PHP ilə TestGIS-ə qoşulma
  2. Java ilə TestGIS-ə qoşulma
  3. .Net ilə TestGIS-ə qoşulma
  4. Xəritədə TestGIS-dən verilənləri görselləşdirmək

PostGIS üçün ön şərt kitabxanaların quraşdırılması

PostGIS kompleks bir uzantıdır - düzgün qurulmayıbsa, verilənlər bazası istənilən nəticəni verməyəcəkdir. PostGIS, PostGIS quraşdırılmadan əvvəl qurulması tələb olunan bir neçə açıq mənbə layihəsinə əsaslanır.

Aşağıdakılar PostGIS quraşdırma üçün tələb olunan ilkin şərtlərdir:

  • PROJ4 4.8
  • GEOS 3.3.3+
  • GDAL 1.9
  • PostgreSQL 9.1+
  • LibXML2 və ya daha yüksək.
  • JSON-C 0.9 və ya daha yüksək.
  • GNU C Compiler və GNU Make - mənbədən quraşdırılırsa.

Qurmaq üçün yaxşı ola biləcək könüllü kitabxanalar bunlardır:

Hazırlaşırıq

Ubuntu Linux-un ən son versiyası ilə quraşdırılmış bir VirtualBox cihazından istifadə edəcəyik və eyni şeyi PostGIS 2.1 quraşdırma üçün konfiqurasiya edəcəyik.

Bunu necə etmək olar

VirtualBox-u http://www.virtualbox.org/ saytından yükləyin və quraşdırın. Ubuntu Linux (14.04) son versiyasının ISO-nu yükləyin və yeni bir VirtualBox cihazı yaradın Ubuntu və Ubuntu əməliyyat sisteminin quraşdırılmasını tamamlayın.

Ubuntu OS daxilində adlı bir istifadəçi yaradın postgis kimi şifrə ilə postgis həmçinin. İstifadəçinin inzibati icazələrin olduğundan əmin olun.

Sonra Terminalı açın və aşağıdakı əmrlə PROJ4 kitabxanasını quraşdırın

Sonra GEOS kitabxanasını yükləyin

İndi PostgreSQL RDBMS 9.3 yükləyirik

PostgreSQL server inkişaf paketlərinə də ehtiyacımız var, buna görə də eyni şəkildə quraşdırın

JSON-C kitabxanası tərəfindən quraşdırılmışdır

Yuxarıdakı kitabxanaları müvafiq mənbələrdən quraşdırmaq yaxşıdır, çünki Ubuntu deposu kitabxanaların daha qədim bir versiyasına sahib ola bilər. Yuxarıdakı kitabxanaları mənbədən tərtib etmək üçün GNU Compiler Collection (GCC) və GNU C ++ compiler (G ++) quraşdırılmış olduğundan əmin olun.

Hələ quraşdırmamışsınızsa, bunu etmək üçün aşağıdakı əmrdən istifadə edin.

Ən son kitabxanalara sahib olduğumuzdan əmin olmaq üçün PROJ4 üçün mənbələri http://trac.osgeo.org/proj/, GEOS, http://trac.osgeo.org/geos/ və GDAL http: // trac.osgeo.org/gdal/wiki/DownloadSource. Ən son kitabxanaları quraşdırmaq üçün yüklənmiş paketləri açmalı və aşağıdakı əmrləri işləməlisiniz

Bu necə işləyir

OSGeo: Açıq Mənbə Coğrafi Vəqfi (osgeo.org) bütün açıq mənbəli yerleşim layihələrini bir çətir altına gətirmək üçün ortaq bir səydir. Aparıcı yerleşim kitabxanalarının son versiyasını və inkişaf versiyasını saxlayır. Həm də bu layihələrə hüquqi, maliyyə və infrastruktur dəstəyi verir. PostGIS quraşdırmamızın problemlə üzləşməməsi üçün eyni kitabxananın ən son versiyasını istifadə etdiyimizə əmin olmaq üçün istifadə edirik.

PgAdmin3 - PostgreSQL verilənlər bazasını idarə etmək üçün GUI-nı sudo apt-get install pgadmin3 terminalında quraşdırmaq yaxşıdır.

Yuxarıda göstərildiyi kimi ilkin şərtləri quraşdırmaqda çətinlik çəkirsinizsə, Ubuntu paylamanızda yoxdursa, libxml2 (XML C Parser) kitabxanasını quraşdırdığınızdan əmin olun. Lazım gələrsə eyni qurun

Linux-da PostGIS-in qurulması

PROJ, GEOS və GDAL PostGIS-in işləməsi üçün tələb olunan əsas kitabxanalardır. Bu kitabxanaların yanında PostgreSQL 9.3, PostGIS-i konfiqurasiya etmək üçün istifadə edəcəyimiz verilənlər bazasıdır. PostgreSQL 9.1 və PostGIS 2.0-dan başlayaraq PostGIS kitabxanasını PostgreSQL-ə əlavə etmək üçün Extensions istifadə edərək və ya PostGIS enabler skriptlərindən (.sql faylları) istifadə etmək üçün iki metod mövcuddur. Uzantılar metodundan istifadə edəcəyik.

Hazırlaşırıq

PostGIS kitabxanasının son mənbə kodunu http://download.osgeo.org/postgis/source/postgis-2.1.2.tar.gz saytından yükləyin

Bunu necə etmək olar

Terminalınızı açın və a yaratacaq gunzip əmrindən istifadə edərək yüklənmiş postgis qaynaq kodunu açın postgis-2.1.2.tar fayl.

Tar əmrindən istifadə edərək tar faylının məzmununu çıxarın

İndi dəyişdirin postgis-2.1.2 qovluğunu qurun və postgis kitabxanasını sisteminizə yükləmək üçün aşağıdakı əmrləri işə salın.

Hər şey yaxşı işləyirsə, make install əmrinin sonunda aşağıdakı iki sətri görməlisiniz

  1. Kataloqdan / evdən / postgis / postgisdən çıxmaq - 2.1. 2 / uzantılar / postgis / topologiya
  2. Kataloqdan / evdən / postgis / postgisdən çıxmaq - 2.1. 2 / uzantılar

Linux tənzimləməsi altında shp2pgsql kimi PostGIS komut satırı proqramlarını daxil etmək üçün PATH-nı yeniləyin .bashrc faylı əlavə edin və aşağıdakı satırı ixrac PATH = $ əlavə edin: /usr/lib/postgresql/9.3/bin/.

Fərqli bir əməliyyat sistemindəsinizsə, doğru faylları yüklədiyinizdən əmin olun, bəzi yaxşı inkişaf etdiricilər rəsmi paylama kanalının yenilənməsi üçün bir müddət çəkdiyindən, rəsmi olmayan RPMS, DEB sənədlərini və digər depoları buraxdılar. paketlərin öz buraxılış cədvəlinə və sınaqlarına əsasən versiyası.

Ubuntu 14.04 deposundakı PostGIS-in ən son sabit versiyası postgis-2.1-dir, bu bir sudo apt-get install postgresql-9.3-postgis-2.1 əmri ilə quraşdırıla bilər.

İlk məkan verilənlər bazasının yaradılması - TestGIS

Ubuntu paylamamızda yapılandırılmış PostGIS 2.1 ilə yeni bir PostGIS effektiv verilənlər bazası yarataq TestGIS. Dərs müddətində bu verilənlər bazasını oxucuların anlayışı üçün real dünya istifadə ssenarisini təsvir etmək üçün istifadə edəcəyik.

Hazırlaşırıq

pgAdmin3, PostgreSQL serverlə işləmək üçün yaxşı bir GUI vasitədir. Hələ quraşdırmamışsınızsa, indi bunun üçün əlverişli zamandır. Lakin bu bir şərt deyil, yalnız terminal istemi ilə yolumuzu keçə bilərik.

Bir PostGIS verilənlər bazası yaratmadan əvvəl, standart olaraq dəyişdirməliyik pg_hba.conf PostgreSQL serverimiz üçün localhost və / və ya uzaq hostlardan (lazım olduqda) əlaqələri qəbul etməsi üçün konfiqurasiya faylı.

Aç öz pg_hba.conf (Ubuntu konfiqurasiyamızda fayl yerləşir /etc/postgresql/9.3/main/ və aşağıda göstərildiyi kimi Müştəri Doğrulama xəttlərinə keçin və bütün yerli əlaqələr üçün YÖNÜ dəyişdirin.

PostgreSQL serverini terminala aşağıdakı əmri verərək yenidən başladın

Sonra yeni bir PostgreSQL istifadəçisi əlavə edin postgis parol ilə postgis creatuser interaktiv əmrindən istifadə etməklə.

  1. sudo createuser postgis - Upostgres - S
  2. Yeni rol üçün parol daxil edin:
  3. Yenidən daxil edin:
  4. Yeni rol super istifadəçi ola bilərmi? (y / n) y

Yerli brauzerinizdəki Webmin GUI paketini ziyarət edərək yeni yaradılmış istifadəçini təsdiqləyə bilərsiniz. Webmin Linux üçün veb əsaslı bir sistem administratoru vasitədir - artıq konfiqurasiya sənədləri axtarmır, Webmin zəngin bir GUI daxilində bütün xidmətləri təmin edir. Http://www.webmin.com/ saytından yükləyin. Budur yeni yaradılan istifadəçimizi giriş kimi göstərən PostgreSQL modulundan ekran işimiz.

Bunu necə etmək olar

İlk PostGIS verilənlər bazamızı yaratmaq üçün ilk addım, yaradılan əmrdən istifadə edərək müntəzəm bir PostgreSQL verilənlər bazası yaratmaqdır. Terminalınızda yeni bir verilənlər bazası yaratmaq üçün aşağıdakı əmr var TestGIS.

Şifrəni daxil edin postgis əmr istəməsi ilə soruşulduqda.

İndi PostgreSQL konsolundan (psql) aşağıdakı əmri yazaraq yeni yaradılan TestGIS verilənlər bazasını seçin.

Sonra, TestGIS verilənlər bazası üçün postgis uzantısını aktivləşdirin

PgAdmin3-dən yeni yaradılan TestGIS verilənlər bazasını yoxlamaq, pgAdmin3 alətini açmaq və istifadəçi adı və şifrəsi ilə “postgis” olaraq port və 5432 (default PostgreSQL portu) olaraq quraşdırılmış yeni bir server yaratmaq üçün istifadə edə bilərik. Bağlantıya TestGIS adı verin. Bir nümunə üçün aşağıdakı ekran görüntüsünə baxın.

Bir dəfə vurun tamam, Verilənlər bazaları- & gtTestGIS qovluğunu tıklayaraq ağacı genişləndirin və aşağıdakı şəkildəki kimi postgisin bir uzantı kimi göstərildiyini yoxlayın.

Bu necə işləyir

PostgreSQL 9.1 və daha yüksək bir versiya, cari verilənlər bazasına sadə bir əmr ilə yeni bir uzantı yükləməyimizə imkan verən CREATE EXTENSION direktivini ehtiva edir. PostGIS 2.1 bu mexanizmi dəstəkləyir, beləliklə TestGIS verilənlər bazamızda CREATE EXTENSION postgis istifadə etdikdə sistem həndəsə, coğrafiya, raster, məkan idxal etdirefsys və verilənlər bazamızla əlaqəli hər şey. Eynilə PostGIS 2.1-dəki topoloji xüsusiyyəti də CREATE EXTENSION postgis_topology tərəfindən yüklənə bilən başqa bir uzantıdır.

Bir uzantı yükləmək, çalıştırmaya bərabərdir uzantıları .sql faylı. Postgresonline.com-un http://www.postgresonline.com/journal/archives/216-PostgreSQL-9.1-Exploring-Extensions.html ünvanında uzantılar haqqında əla bir məqaləsi var ki, uzantılar haqqında daha çox məlumat əldə edin.

Verilənlərin TestGIS-ə idxalı

İlk postgis effektiv verilənlər bazasını yaratdıqdan sonra bəzi real dünya məlumatlarını idxal etməyin vaxtı gəldi. Həqiqi dünya dedikdə həqiqi dünya məlumatları nəzərdə tutulur. Bu məlumatı Yahoo’nun Flickr Geo API Explorer-dən və xüsusən Amerika Birləşmiş Ştatları üçün coğrafi sərhəd olan bu linkdən əldə edirik - http://www.flickr.com/places/info/23424977

Shape faylının keçidinə diqqət yetirin (aşağıdakı ekran görüntüsündə düzbucaqlıya əlavə olunur). Shapefile yerleşim məlumatlarını saxlamaq üçün açıq mənbəli bir fayl formatıdır. Bu format ESRI - Ətraf Sistemləri Araşdırma İnstitutu (http://www.esri.com/) tərəfindən hazırlanmış və tənzimlənmişdir.

Hazırlaşırıq

Ölkə coğrafi sərhədini saxlamaq üçün, aşağıdakı SQL ifadələri ilə TestGIS verilənlər bazasında bir ölkə cədvəlini təyin edirik:

  1. psql - Upostgis - W TestGIS
  2. TestGIS = # CƏDVƏL YARADIN (id tam ədədi NULL deyil, ad mətni, sərhəd coğrafiyası (MultiPolygon, 4326), ad_alias mətni, CONSTRAINT & # 34countryId & # 34 PRIMARY KEY (id))

Ənənəvi int, varchar və ya datetime tipli verilənlər bazası sütununuz deyil, bir coğrafiya məlumat növü olan ‘sərhəd’ adlı sütunun məlumat növünə diqqət yetirin. Bu sütunda çox poliqonlu məlumatlar saxlanıla bilər (yuxarıdakı ekran görüntüsündə də göründüyü kimi). 4326 nömrəsi WGS-84-ə (Dünya Geodeziya Sistemi) uyğun gələn SRID (Mekansal Referans Sistem Tanıtıcısı). Eyni ilə uyğunlaşma TestGIS verilənlər bazamızdakı spatial_ref_sys cədvəlində nəzərdən keçirilə bilər.

Qeyd edək ki, WGS-84 əvvəlcə boylam, daha sonra enlikdir, buna görə də məlumatla işləyərkən məlumatı lat / lon cütlüyündə deyil, lon / lat cütlüyündə saxladığınızı və aldığınızdan əmin olun.

Bunu necə etmək olar

Terminalınızı yenidən atəşə verin və forma sənədinizi SQL-ə çevirmək üçün forma dosyanızdakı shp2pgsql əmrini işə salın və sonra konvertasiya edilmiş məlumatları seçilmiş şəkildə ölkə cədvəlinə daxil edin.

Shape faylını yüklədiyimiz qovluğa gedin, bizim halda $ USER / Yükləmələr / Geo-Data / ölkə / ABŞ

İndi shp2pgsql əmrini

Açın US.sql bu şəkildə yaradılan fayl, aşağıdakı kimi görünməlidir.

Fayldan, ilk insert ifadəsini, yəni kopyalayın

  1. INSERT INTO & # 3423424977 & # 34 (& # 34tag & # 34, & # 34count & # 34, & # 34area & # 34, & # 34perimetre & # 34, & # 34density & # 34, geog)
  2. DƏYƏRLƏR
  3. (& # 3923424977 & # 39, & # 395738246 & # 39, & # 393986508,50 & # 39, & # 3917812,86 & # 39, & # 391,44 & # 39, & # 390106000020E6100000010000000103000000010000002D010000000000406B555EC0000000C02C804840000000C0EA495EC0000000E0188048400000008026445EC0000000A0518048400000000074315EC0000000C0C5824840000000E057295EC0000000A0BA7F484000000080BF0B5EC000000020AD7F484000000040FAFB5DC000000080F67F4840000000009DEA5DC000000080FE814840000000C05DD35DC000000040D2814840000000E0ACCC5DC0000000000000809FE15CC0000000009A794840000000001AC95CC000000000047E48400000000048C35CC0000000A00B8148400000002078AC5CC00000004089914840000000204FAC5CC000000080A49148400000004044AC5CC000000000AA914840000000203CAC5CC000000080A491484000000060E5825CC000000080818248400000004029795CC0000000E01F804840000000A0606A5CC0000000A0F27F4840000000404B585CC00000006001804840000000C033585CC000000060F87F48400000004070325CC0000000A0D17 .......... & # 39)

Sadəcə ‘sıxlıq’ adlı son sütundan alınan dəyərlərə ehtiyacımız var, bu əsasən əvvəllər yüklədiyimiz ABŞ sərhəd forması sənədindən yalnız bir Çoxbucaqlıdır. Bu xam mətndən istifadə edərək əlavə bəyanatımızı qururuq

  1. Ölkəyə INSERT (id, ad, sərhəd, ad _alias) DƏYƏRLƏRİ (1, & # 39Birləşmişdir)
  2. Eyaletler & # 39, & # 390106000020E6100000010000000103000000010000002D01000000000000406B555EC0000000C02C804840000000C0EA495EC0000000E0188048400000008026445EC0000000A051804840000000007. & # 39, & # 39 birləşmiş ştatlar & # 39)

Bu faylı aşağıdakı kimi saxla insert.sql və eyni testGIS verilənlər bazasına idxal edin.

Verilənləri yoxlamaq üçün pgAdmin3 GUI-ni açın və SQL Redaktorunda aşağıdakı sorğunu işə salın

Aşağıdakı nəticəni görməlisiniz.

Bu necə işləyir

PostGIS 2.0 ilə birləşdirilmiş shp2pgsql əmri, ESRI Shapefiles-dan coğrafi məlumatların idxalının asan bir yolunu təklif edir. Komanda üçün də ad verilmiş bir GUI var shp2pgsql-gui formalı fayl məlumatlarının idxal / ixracına imkan verir. Fərqli dillərdə və platformalarda Shapefiles oxumaq üçün kitabxanalar və proqramlar var: daha çox məlumat üçün http://en.wikipedia.org/wiki/Shapefile və ya dost qonşuluq axtarış motorunuzu ziyarət edin.

Flickr xidmətindən ölkə sərhədlərini əldə etməyin daha yaxşı bir yolu API vasitəsilə, Flickr Geo API Explorer-də eyni Amerika Birləşmiş Ştatları səhifəsində flickr.places.getInfo qutusunun API explorer-də bax düyməsinə vurun, xam API linki http: //api.flickr.com/services/rest/?method=flickr.places.getInfo&api_key=907997443d2d8f1f06aa5073c4d9dfeb&woe_id=23424977, hər hansı bir populyar proqramlaşdırma dilində təhlil edilə və ölkəmizə daxil olan məlumatlar.

Əvvəlki nümunədə Shapefile məlumatlarını PostGIS verilənlər bazamıza idxal etməyi öyrəndik. Bununla birlikdə, əl ilə bir kopyalama yapışdırmaq işi idi və ABŞ-ın tam sərhədləri üçün lazım olan bütün poliqonları idxal etmədi. Üstəlik bu prosesi avtomatlaşdırmalıyıqsa və dünyanın bütün ölkələrini verilənlər bazamıza daxil etmək istəsək, kopyala-yapışdırmaq qaydasında etmək herculean bir vəzifədir.

Bunu həll etmək üçün PHP üçün PostgreSQL, Java üçün JDBC və .Net üçün Npgsql istifadə edirik.

Bu təlimatın 2-ci hissəsində, müvafiq olaraq PHP, Java və .NET istifadə edərək TestGIS ilə necə əlaqə quracağınıza dair addımlar atılacaqdır.


Birdən çox xarici element

Hal-hazırda mətndə yalnız bir xarici elementə icazə verildiyi bildirilir.

Bu, 1 kontur təşkil etdikləri müddətcə birdən çox elementə dəyişdirilməlidir. Məs. sahil xəttindən istifadə edən böyük göllər üçün xarici forma bir çox yolla parçalanır, lakin bunun üçün eyni çoxpolygon əlaqəsini bunlar üçün də istifadə etmək mümkün olmalıdır (xüsusilə adlandırma məqsədləri üçün.).

Beləliklə, təklif olunan dəyişikliklər bunlardır:

  • Birləşdirildikdə bir qapalı yol düzəltdikləri müddətcə çoxlu xarici yollara icazə verin
  • Çoxlu bölünmüş daxili yollara da icazə verin (heç bir yerdə icazə verilmədiyi bildirilməyib, ancaq açıq olmalıdır)

Aşağıdakı inkişaf etmiş çoxpoliqonlara dair # Təklif tərəfindən həll ediləcəkdir. --achadwick 11:07, 27 noyabr 2008 (UTC)


Dərslik¶

Bu bölmədə istifadə üçün qısa bir giriş və təlimat var GEOSGeometry obyektlər.

Həndəsə Yaratmaq¶

GEOSGeometry obyektlər bir neçə yolla yaradıla bilər. Birincisi, obyektin sadəcə bir məkan girişində qurulmasıdır və aşağıdakılar WKT, HEX, WKB və GeoJSON-dan eyni həndəsi yaratma nümunələridir:

Digər bir seçim, yaratmaq istədiyiniz konkret həndəsə növü üçün konstruktordan istifadə etməkdir. Məsələn, a Nöqtə obyekt X və Y koordinatlarını konstruktoruna keçirərək yaradıla bilər:

Nəhayət, var fromstr ()fromfile () qayıdan zavod üsulları a GEOSGeometry giriş sətrindən və ya fayldan obyekt:

Həndəsələr Pythonic¶

GEOSGeometry objects are ‘Pythonic’, in other words components may be accessed, modified, and iterated over using standard Python conventions. For example, you can iterate over the coordinates in a Point :

With any geometry object, the GEOSGeometry.coords property may be used to get the geometry coordinates as a Python tuple:

You can get/set geometry components using standard Python indexing techniques. However, what is returned depends on the geometry type of the object. For example, indexing on a LineString returns a coordinate tuple:

Whereas indexing on a Polygon will return the ring (a LinearRing object) corresponding to the index:

In addition, coordinates/components of the geometry may added or modified, just like a Python list:


Package Structure

Features:
The Features package contains the basic building block features of the GIS. These are the features such as Point, MultiPoint, LineString, MultiLineString, Polygon, and MultiPolygon. There is also a RasterShape for displaying images. There are a couple of sub packages of Features that are used for manipulating the features.

Common:
This pacakge contains all of the non feature classes that are used for the operation of the system. The only class contained in common at the moment is the "Node" class. This class is used to save configuration information from all layers of the toolkit, and is used by the application to generate configuration files using the Config package.

Config:
Config is used to convert the "Node" information into configuration information. It reads and writes to an XML file at the moment, but configuration information could presumably be stored in any persistent storage that supports trees of named value pairs.

Projection:
Projections are used in several layers of the toolkit. This is mostly for performance reasons, and to enable the support of database level projection features. There are two levels of projection, the projection the map uses, and the projection the data resides within. This allows the toolkit to display data in a dynamic projection, while reading data in a static projection. A common use of this functionality is the storing of imagery in a UTM projection, but displaying it in a Connic Conformal Projection. Most common projections are cuurently supported, and adding more can be done fairly easilly.

Datasources:
Data can be read from a variety of data sources. Each data source has it's own package, with the generic base classes and interfaces residing in the root. Datasources include ESRI shapefile, ARCSDE, IBM DB2, Image, PostGIS, memory (kind of a scratch data source), seamless, terraserver, and webservice. It is expected that more datasources will be added in the future. The AGCSDE and ARCIMS datasources are kept in a separate package under proprietary, because they statically links to a priprietary ESRI jar file, these packages are "proprietary.datasources.arcsde" and "proprietary.datasources.arcims".

Display:
All Elements associated with displaying geographic objects are stored in the display class. The basic element is the GISDisplay which is a swing widget for embedding GIS functionality into swing GUIs. The basic building block of the display package is the Layer object. Each layer object is responsible for drawing it's data on to the graphics context it is sent. Assisting it is a Converter object which is responsible for converting pixel screen coordinates to World coordinates and back. Each layer has a single data source, and contains the Style object which tells actually renders the data.

Style objects contain multiple Labelers and Renderers but only a single Shader. The Renderers determine how the features should be drawn, the Labelers determine how the labels should be drawn, and the Shader provids the colors, patterns, and other information required by the Labelers and Shaders for them to render the objects.

Drawmodels are used bye the GISDisplay to add behavior. They determine what happens when a user clicks on a map, drags a map, etc. They provide the select tools, and add highlight information to the map. Mostly they react to mouse movement on the map.

Shapeeditors are gui classes that can be used to modify a shape. They allow the user to type in exact coordinates to a shape, as well as modify shape contents from a tabular point of view, instead of a geographical one.

In addition, there is a scale bar that allows the user interface to represent distances on the map, and some commonly used gui widgets that may help in generating an application with this toolkit.

Application:
The application package contains the classes that are used to create the GISToolkitEditor. This package has become rather large, and uses every other part of the GISToolkit, except for the Server. It serves as an example of how an applicaiton could be created using this toolkit.

Server:
These are the classes that are used to create the WebMapService. They are an example of how this toolkit can be used to create a server side application that generates maps for a client.