Daha çox

PostGIS cədvəli üçün sərhəd qutusu

PostGIS cədvəli üçün sərhəd qutusu


PostGIS-də bütün bir cədvəl üçün məhdudlaşdırma qutusunu əldə etməyin asan bir yolu varmı?


ST_Extent hiylə işləməlidir.

ST_Extent - həndəsə sətirlərini məhdudlaşdıran sərhəd qutusunu qaytaran məcmu funksiya.

Bu şəkildə tətbiq olunur:

ST_Extent (the_geom) seçin masa_extent FROM your_table;

@Underdark cavab verdiyi kimi, ST_Extent işi yerinə yetirəcək, ancaq bir həndəsi deyil, bir həndəsi qaytardığını unutmayınqutu2d. Bir həndəsə növünə ehtiyacınız varsa, buna bənzər bir şey istifadə etməlisiniz

ST_SetSRID (ST_Extent (the_geom), THE_SRID) cədvəlinizdən table_extent olaraq SEÇİN;

Ayrıca, ehtiyacınız varsa, istifadə edə biləcəyiniz hər bir satırın məhdudlaşdırıcı qutusunu əldə edinST_Extentvə a saxtaQRUP BYbunun kimi:

ST_SetSRID (ST_Extent (the_geom), THE_SRID) seçin table_extent FROM your_table GROUP BY gid;

Gidin masanın əsas açarı olduğunu düşünsək

Ancaq ST_Envelope şərhlərdə @ bugmenot123 kimi daha yaxşı bir iş görəcəkdir

Masanızdan ST_Envelope (geom) SEÇİN;

Başqa bir ehtimal da istifadə etməkdirST_ZərfSRID ilə həndəsi qaytaran funksiya,

ST_Envelope - Verilən həndəsənin hüdud qutusunu təmsil edən bir həndəsi qaytarır

, məcmu funksiyası ilə birlikdəST_Birlikbütün həndəsələrin birləşməsini (və ya müvafiq zərflərinin birləşməsini) aşağıdakı kimi əldə etmək:

ST_Envelope (ST_Union (geom)) cədvəlinizdən masa_ mətni olaraq SEÇİN

və ya

ST_Envelope (ST_Union (ST_Envelope (geom)))) seçin masa_extent FROM your_table

İkinci seçim, fərdi həndəsələrin zərflərindən istifadə edərək birləşmə əməliyyatını asanlaşdırdığından daha sürətli olmalıdır.

Mənbə bax.


Heç bir məkan toplanmasını tətbiq etməmək bir qədər tez olmalıdır:

min (ST_XMin (geom)) l, min (ST_YMin (geom)) b, max (ST_XMax (geom)) r, max (ST_YMax (geom))) x olaraq t olaraq seçin

PostGIS cədvəli üçün sərhəd qutusu - Coğrafi İnformasiya Sistemləri

PostGIS sorğularından GeoJSON məlumat cavablarını qaytaran provayder.

Daxili TileStache Vector provayderi (1.9.0 versiyasında yeni) daha çoxunu təklif edir
vektor plitələr istehsalının tam metodu və bir çox növ məlumatı dəstəkləyir
PostGeoJSON-da şəkillər kimi istifadə edilə bilməyən mənbələr. PostGeoJSON edəcək
TileStache-də təmin olunmağa və dəstəklənməyə davam edin, lakin gələcək inkişaf
vektor dəstəyinin əsas xətt vektor təminatçısında məmnun qalacağı deyil
bu bir.

Bu, bir şəkil qaytarmayan, əksinə təmin edən bir nümunədir
xam məlumat üçün verilənlər bazasına sorğu verir və bir sıra GeoJSON ilə cavab verir. Üçün
Məsələn, OpenStreetMap nöqtələrinin yerləri üçün məlumat almaq mümkündür
bir məhdudlaşdıran qutu kəsişməsində bir sorğu əsasında maraq.

Bir çox Polymaps (http://polymaps.org) nümunəsi GeoJSON vektor məlumat plitələrindən istifadə edir,
bu provayderdən istifadə edərək effektiv şəkildə yaradıla bilər.

DSN:
Psikopg2.connect () istifadə üçün uyğun verilənlər bazası bağlantısı.
Daha çox məlumat üçün http://initd.org/psycopg/docs/module.html#psycopg2.connect səhifəsinə baxın.

sorğu:
"! Bbox!" İlə PostGIS sorğusu kafel sərhəd qutusu üçün yer tutucu.
Qeyd edək ki, cədvəl * veb sferik mercaotr proyeksiyasından istifadə etməlidir *
900913. Sorğu id sütunu, həndəsə sütunu və digərlərini qaytarmalıdır
sütunlar GeoJSON "xassələri" lüğətinə yerləşdiriləcək.
900913 haqqında daha çox məlumat üçün aşağıya baxın.

kəsmə:
İsteğe bağlı olaraq çıxış həndəsələrini hüdudlara qədər kəsmək üçün boolean bayraq
əlavə kafel. Varsayılan qiymətlər. Bu yarımçıq nəticələnir
həndəsələr, ölçüdə daha kiçik fayl ölçüləri və performansı artırır
və Polymaps ilə uyğunluq (http://polymaps.org).

id_ sütun:
Çıxışdakı id sütununun adı, "id" üçün detallar. Bu, hansı sorğunu müəyyənləşdirir
nəticə sütunu GeoJSON "id" sahəsinə yerləşdirilir.

həndəsə_sütun:
Çıxışda həndəsə sütununun adı, "həndəsə" üçün standartdır. Bu təyin edir
hansı sorğu nəticəsi sütunu lat / lon-a yenidən proqnozlaşdırılır və siyahı olaraq çıxır
coğrafi koordinatların.

girinti:
Çıxış üçün boşluqların sayı GeoJSON cavab. Varsayılanlar 2.
Sıfır dəyəri olan bütün girintiləri atlayın.

dəqiqlik:
Çıxış həndəsəsi üçün dəqiqlik onluq yerlərinin sayı. Varsayılanlar 6.
Varsayılan demək olar ki, bütün küçə xəritəsi vəziyyətlərinə uyğun olmalıdır.
Kiçik bir dəyər, aşağı zoom xəritələri üçün çıxış faylının ölçüsünü azaltmağa kömək edə bilər.

Nümunə TileStache təminatçının konfiqurasiyası:

"maraq dairələri":
<
"provayder":
<
"sinif": "TileStache.Goodies.Providers.PostGeoJSON.Provider",
"kwargs":
<
"dsn": "dbname = geodata user = postgres",
"sorğu": "SEÇİN osm_id, ad, planet_osm_point HARADA yol & amp & amp! bbox! VƏ ad boşdur",
"id_column": "osm_id", "geometry_column": "way",
"girinti": 2
>
>
>

Hal-hazırda yalnız 900913 (google) proyeksiyasındakı verilənlər bazaları istifadə edilə bilər,
baxmayaraq ki, bu, osm2pgsql-dən OpenStreetMap idxalatı üçün standart parametrdir.
"! Bbox!" sorğu yer tutucusu (aşağıdakı nümunəyə baxın) kiçik və olmalıdır
genişlənir:

ST_SetSRID (ST_MakeBox2D (ST_MakePoint (ulx, uly), ST_MakePoint (lrx, lry)), 900913)

PostGIS verilənlər bazanızda "900913" SRID-i hələlik dəstəkləməlisiniz.
Daxili PostGIS spatial_ref_sys proqnoz cədvəlini doldurmaq üçün,
bu işləyir görünür:


İstinadlar

[1]„PostGIS Referansı,“ [Onlayn]. Mövcuddur: https://postgis.net/.
[2]„Osm2pgsql GitHub deposu,“ [Onlayn]. Mövcuddur: https://github.com/openstreetmap/osm2pgsql.
[3]“PostGIS Uyumluluğu və Dəstəyi,” [Onlayn]. Mövcuddur: https://trac.osgeo.org/postgis/wiki/UsersWikiPostgreSQLPostGIS.
[4]„Geofabrik Download Server,“ [Onlayn]. Mövcuddur: https://download.geofabrik.de/.
[5]„PBF Formatı,“ [Onlayn]. Mövcuddur: https://wiki.openstreetmap.org/wiki/PBF_Format.
[6]„Varsayılan Stil & # 8211 osm2pgsql,“ [Online]. Mövcuddur: https://wiki.openstreetmap.org/wiki/Osm2pgsql/schema.
[7]„QGIS Osm stilləri,“ [Online]. Mövcuddur: https://github.com/yannos/Beautiful_OSM_in_QGIS.
[8]„Osm2pgsql Verilənlər Bazası şeması,“ [Onlayn]. Mövcuddur: https://wiki.openstreetmap.org/w/images/b/bf/UMLclassOf-osm2pgsql-schema.png.

4.3. GIS məlumatlarının yüklənməsi

Bir məkan cədvəli yaratdıqdan sonra CBS məlumatlarını verilənlər bazasına yükləməyə hazırsınız. Hal-hazırda bir PostGIS / PostgreSQL verilənlər bazasına məlumat almağın iki yolu var: formatlanmış SQL ifadələrindən və ya Shape fayl yükləyicisindən / damperdən istifadə etmək.

4.3.1. SQL istifadə

Verilərinizi mətn təmsilçiliyinə çevirə bilsəniz, formatlanmış SQL istifadə edərək PostGIS-ə məlumatlarınızı gətirməyin ən asan yolu ola bilər. Oracle və digər SQL verilənlər bazalarında olduğu kimi, SQL "INSERT" ifadələri ilə dolu böyük bir mətn sənədini SQL terminal monitoruna yerləşdirməklə məlumatlar toplu şəkildə yüklənə bilər.

Veri yükləmə faylı (məsələn yollar.sql) belə görünə bilər:

Məlumat faylı "psql" SQL terminal monitorunu istifadə edərək çox asanlıqla PostgreSQL-ə yerləşdirilə bilər:

4.3.2. Yükləyicidən istifadə

Shp2pgsql data loader, ESRI Shape sənədlərini PostGIS / PostgreSQL verilənlər bazasına daxil etmək üçün uyğun SQL-ə çevirir. Yükləyicinin komanda xətti bayraqları ilə fərqlənən bir neçə iş rejimi vardır:

Shape faylındakı məlumatlarla yeni bir cədvəl yaratmadan əvvəl verilənlər bazası masasını atır.

Şəkil sənədindəki məlumatları verilənlər bazası cədvəlinə əlavə edir. Bir çox faylı yükləmək üçün bu seçimdən istifadə etmək üçün faylların eyni atributlara və eyni məlumat tiplərinə sahib olmasına diqqət yetirin.

Yeni bir cədvəl yaradır və onu Forma sənədindən doldurur. Bu, standart rejimdir.

Hər hansı bir faktiki məlumat əlavə etmədən yalnız cədvəl yaratma SQL kodunu istehsal edir. Cədvəl yaratmaq və məlumat yükləmə addımlarını tamamilə ayırmaq lazımdırsa, bu istifadə edilə bilər.

Çıxış məlumatları üçün PostgreSQL "dump" formatını istifadə edin. Bu -a, -c və -d ilə birləşdirilə bilər. Yükləmək, standart "daxil" SQL formatından daha sürətli. Bunu çox böyük məlumat dəstləri üçün istifadə edin.

Göstərilən SRID ilə həndəsə cədvəllərini yaradır və doldurur.

Tanımlayıcıların vəziyyətini saxlayın (sütun, sxem və atributlar). Shapefile-dəki atributların hamısının YUKARI olduğunu unutmayın.

Bütün tam ədədi standart 32-bit tamsayılara məcbur edin, DBF başlıq imzasının zəmanət verdiyi görünsə də, 64 bitlik böyük işarələr yaratmayın.

Həndəsə sütununda bir GiST indeksi yaradın.

PostGIS-in köhnə (0.x) versiyaları ilə istifadə üçün WKT formatı çıxardı. Qeyd edək ki, bu koordinat sürüşmələrini təqdim edəcək və M dəyərlərini shapefiles-dən endirəcəkdir.

Giriş məlumatlarının kodlaşdırılmasını göstərin (dbf faylı). İstifadə edildikdə, dbf-nin bütün atributları göstərilən kodlamadan UTF8-ə çevrilir. Nəticədə SQL çıxışı bir SET CLIENT_ENCODING to UTF8 əmrini ehtiva edəcək, beləliklə arxa tərəf UTF8-dən verilənlər bazasını daxili istifadə üçün konfiqurasiya edilmiş hər hansı birinə yenidən çevirə biləcəkdir.

Qeyd edək ki, -a, -c, -d və -p bir-birini istisna edir.

Giriş faylını yaratmaq üçün yükləyicidən istifadə edərək onu yükləmək nümunəsi belə görünə bilər:

Bir dönüşüm və yükləmə UNIX boruları istifadə edərək bir addımda edilə bilər:


PostGIS cədvəli üçün sərhəd qutusu - Coğrafi İnformasiya Sistemləri

Artıq bu lib-i saxlamıram. Xahiş edirəm bir çəngəl tapın və ya:

PostGIS həndəsi sütunlarını şəffaf bir şəkildə idarə edən ActiveRecord üçün bir plagin (digər baza məlumat növü sütunları kimi). Həm də bu sütunları köçlərdə idarə etmək üçün bir yol təqdim edir.

Bu çəngəl postgis üzərində həndəsi hesablamalar aparmaq üçün lazımlı üsullar əlavə edir. Georuby.rubyforge.org Məkan Adapterinə əsaslanır

Mekansal Adapter istifadə edirsinizsə, * əvvəl çıxarın *.

Gemfile-ə asılılıq əlavə edin:

Və ya ən son depodan istifadə etmək üçün:

ActiveRecord modellərinizdəki həndəsi sütunlar indi digər əsas məlumat növlərinin digər sütunları kimi görünür. Yaqut şema rejimində atıla bilər və əsas növlərin sütunları ilə eyni şəkildə köçlərə yüklənə bilər.

Nümayiş etmək üçün sadə relslər tətbiqinə baxın:

Bu asan idi! Gördüyünüz kimi, bir sütunu həndəsi olaraq elan etməyə ehtiyac yoxdur. Plagin bu məlumatları özü əldə edəcəkdir.

Model və yuxarıda müəyyənləşdirilmiş cədvəldən istifadə edərək PostGIS sıra yaratma və giriş nümunəsi:

Budur bu çəngəl əlavələri. İstifadəsi üçün:

Transformasiyanı dəstəkləyir (Km ^ 2 ərazisi üçün SRID-i UTM-ə çevirmək üçün faydalıdır)

Və ya (demək olar ki) bir PostGIS kimi bir qeyd istifadə edin:

Bu model başına yalnız bir geom sütunu dəstəkləyir. Hələ də bir çox geom tətbiq etmək üçün ən yaxşı yolu axtarır.

find_by_ * sütun * həndəsi tip olduqda sütun * yenidən təyin edilmişdir. Mənim MySql məkan məlumat növləri üçün bir tərif görə bilmədiyim və PostGIS-də bir məhdudlaşdırıcı qutu bərabərliyi testini həyata keçirdiyim Rails default '=' operatorunu istifadə etmək əvəzinə bir məhdudlaşdırıcı qutu kəsişməsindən istifadə edir: & amp & amp; PostGIS-də və MBRIntersects MySQL-də, sorğuları sürətləndirmək üçün hər ikisi bir məkan indeksindən istifadə edə bilər. Məsələn, verilənlər bazasından məlumatları göstərməyiniz lazımdırsa, bu sorğudan istifadə edə bilərsiniz: Yalnız ekran düzbucağında olan həndəsələr istərdiniz və bunun üçün bir məhdudlaşdırıcı qutu sorğusundan istifadə edə bilərsiniz. Bu ümumi bir vəziyyət olduğundan, u mənimdir. Find_by_ * geom_column * istifadə etmək üçün 2 yolunuz var: Ya həndəsi bir obyekti birbaşa ötürməklə, ya da bir hüdud qutusunun iki əks küncünə (bir məlumatın ölçüsündən asılı olaraq 2 və ya 3 koordinatla) bir sıra keçməklə.

PostGIS-də yalnız eyni SRID ilə həndəsələr ilə əməliyyatlar istifadə edə bildiyiniz üçün, məhdudlaşdırma qutusunun SRID-i təmsil edən üçüncü bir elementi massivə əlavə edə bilərsiniz. Varsayılan olaraq -1 olaraq təyin edilmişdir:

PostGIS-də həndəsi sütunlu bir cədvəl yaratmaq üçün sütununa bir məkan indeksinin əlavə edilməsi ilə bir nümunə:

Könüllü, bu sizin üçün avtomatik olaraq postgis effektiv verilənlər bazası yaradacaq.

Postgis şablon verilənlər bazası yaratmaq üçün köməkçilər. Yazı zamanı postgis.sql və spatial_ref_sys.sql istifadə olunur.

İşletim sisteminizin bu sql sənədlərini harada yerləşdirdiyini tapın və:

Aşağıdakı skriptləri 'db' qovluğunun altındakı 'məkan' adlı bir qovluğa yerləşdirin.

Bunlar Rake Test tapşırıqlarını yerinə yetirərkən Test verilənlər bazası yaradarkən istifadə ediləcəkdir. Bu skriptlər PostGIS kitabxanaları quraşdırıldıqda qurulmalı idi. Onlayn müraciət: postgis.refractions.net/

Vahid testləriniz üçün armaturlardan istifadə edirsinizsə, bir nöqtədə bir həndəsi daxil etmək istəyəcəksiniz. Həndəsələrinizi özünüz hər zaman YAML üçün uyğun bir formaya çevirə bilərsiniz, ancaq məkan adapteri sizin üçün bunu etmək üçün bir metod təqdim edir: to_yaml. Həm MySQL, həm də PostGIS üçün işləyir (hər bir verilənlər bazası üçün qaytarılmış sətir fərqli olsa da). Həndəsi sütun bir nöqtədirsə, onu belə istifadə edərdiniz:

Annotate_models istifadə edirsinizsə, PostgisAdapter və SpatialAdapter üçün həndəsi açıqlamalar əlavə edən bu çəngələ baxın:

Ruby həndəsi məlumat növləri hazırda yalnız GeoRuby kitabxanası (georuby.rubyforge.org) vasitəsilə təqdim olunur: Nöqtədən_x_y yuxarıdakı nümunədə gəlir. EWKB-nin oxunmasına və yazılmasına dəstək ola bildikləri müddətcə Ruby / GEOS kimi əlavə həndəsi məlumat növü kitabxanalarına dəstək vermək üçün Məkan Adapterinin gələcək buraxılışının məqsədi.

ActiveRecord göründüyü üçün yalnız simli dəyərləri birbaşa saxlayır

verilənlər bazasından qayıtdıqda, hər bir atribut oxunduqda bunlardan düzgün tiplərə çevrilir, ehtimal ki, sadə tiplər üçün yaxşıdır, lakin həndəsələr üçün daha effektiv ola bilər, çünki EWKB sətri hər dəfə təhlil edilməlidir. Həm də bu, bir atributdan birbaşa qaytarılan həndəsə obyektini dəyişdirə bilməyəcəyiniz deməkdir:

Həndəsə tərcüməsi hər dəfə the_geom olaraq həyata keçirildiyi üçün

oxundu, ydəki dəyişiklik qeyd olunmayacaq! Belə bir şey etməlisiniz:

Marcos Piccinini (nofxx) Ying Tsen Hong (tsenying) Simon Tokumine (tokumine) Fernando Blat (ferblape) Shoaib Burq (sabman)

Rails üçün Mekansal Adapter, MIT lisenziyası altında buraxılmışdır. Postgis Adapter, MIT lisenziyası altında buraxılır.

Activerecord 3+ / postgresql 8.5+ / postgis 1.5+ / linux / osx istifadə edərək test edilmişdir


RASTER_COLUMNS Metadata Cədvəli

Aşağıdakı metadata cədvəli xarici tətbiqetmələr və ehtimal ki, daxili alətlər, raster məlumatları olan cədvəlləri tapmaq və bu məlumat cədvəlləri haqqında müxtəlif məlumatları öyrənmək imkanı verir.

Sütun adı Yazın Məhdudiyyətlər Şərhlər
r_table_catalog xarakter dəyişir (256) NULL DEYİL
r_table_schema xarakter dəyişir (256) NULL DEYİL
r_table_name xarakter dəyişir (256) NULL DEYİL
r_ sütun xarakter dəyişir (256) NULL DEYİL
srid tam NULL DEYİL Naməlum SRID üçün 0 istifadə edin
piksel_tipləri ARRAY = VARCHAR =? NULL DEYİL bant başına bir piksel növü. Bant sayı bu massivin ölçüsündə dolayıdır.
out_db boolean NULL DEYİL daxili plitələr saxta, plitələr verilənlər bazasından kənar fayllara istinad olduqda doğrudur
müntəzəm_blocking boolean NULL DEYİL varsayılan olaraq false, bütün bloklar bərabər ölçülü, dayanıqlı və üst-üstə düşməzsə, yuxarı sol mənşədən başlayır (aşağıya bax)
nodata_values ARRAY = İKİ =? bant başına bir nodata dəyərinin bir sıra. NODATA dəyərlərini göstərmək üçün giriş NULL ola bilər.
piksel ölçüsü_x ikiqat yerdəki pikselin eni (SRID başına)
piksel ölçüsü_y ikiqat geounits bir piksel hündürlüyü (SRID başına)
bloklar_x tam piksel şəklində bir blokun eni (nizamsız olduqda NULL)
bloklar_y tam blokun hündürlüyü piksellə (nizamsız olduqda NULL)
dərəcə CEOMETRİ bütün raster plitələri ehtiva edən bir çoxbucaqlı həndəsə və ya əvvəlcədən təyin edilmiş sərhədlər bilinmədiyi təqdirdə NULL. "Normal_blocking" halları üçün bu həndəsə sadə bir düzbucaqlı olacaqdır. Digər hallarda düzensiz bir çoxbucaqlı ola bilər.

Normal_blocking sahəsi doğrudursa, müəyyən edilmiş raster sütununa bir sıra məhdudiyyətlər qoyulur:

  1. Bütün plitələr eyni ölçülü olmalıdır (bloklar_x və bloklar_y).
  2. Bütün plitələr üst-üstə düşməməli və adi blok şəbəkəsində görünməlidir.
  3. Sol üst blok ölçünün yuxarı sol küncündən başlamalıdır.
  4. Blokların ən sağında və alt sırasında raster hüdudlarından kənara çıxan hissələr ola bilər. Bu sahələrin təsvir olunan rasterin bir hissəsi olmayan NODATA olduğu qəbul ediləcək.
  5. Ölçü sahəsi sadə bir düzbucaqlı olmalıdır (dönməz).

Normal_blocking rasterlərinin bəzi blokları / karoları (seyrək rasters) buraxması icazəlidir, bu zaman çatışmayan plitələrin hamısı NODATA və ya sıfır dəyərində olduğu qəbul edilməlidir.


2.4-də PostGIS Operatorları

TLDR: Tətbiqinizdə HƏDİYYƏ Sütunlarında SİFARİŞ və ya GROUP BY istifadə edirsinizsə və əldə etdiyiniz sifariş və ya qruplarla bağlı gözləntiləriniz varsa, diqqət edin PostGIS 2.4 davranışı dəyişdirir və ya SİFARİŞ VƏ QRUP BY . Müraciətlərinizi müvafiq olaraq nəzərdən keçirin.

İbtidai məktəbdə öyrəndiyimiz ilk operatorlar =, & gt və & lt-dir, ancaq məkan aləmində ən çətin şəkildə təyin olunan operatorlardır.


PostGIS cədvəli üçün sərhəd qutusu - Coğrafi İnformasiya Sistemləri

NASA Shuttle Radar Topography Missiyasındakı məlumatları PostGIS verilənlər bazasına (və gələcəkdəki digər verilənlər bazalarına) idxal edir.

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.


Həndəsə Konstruktorları

Konstruktor funksiyaları yeni həndəsələr yaratmaq üçün istifadə olunur. Bu funksiyalardan bir cədvəlin həndəsə sütununu doldurmaq üçün istifadə etməyi düşünmək təbii olsa da, bunların yalnız bir sorğu çərçivəsində istifadə olunan qısa müddətli həndəsələr yaratmaq üçün də istifadə edilə biləcəyini unutmamalısınız. Məsələn, ST_MakeEnvelope () konstruktor funksiyasından istifadə edərək bir cədvəldə kəsişən həndəsələri seçmək üçün istifadə etdiyiniz məhdudlaşdırıcı bir qutu yaratmaq üçün istifadə edə bilərsiniz.

ST_GeomFromText ()
Dərs 3-də bu funksiyanı müxtəlif həndəsələr yaratmaq üçün istifadə etdik. Sənədlərdə, giriş olaraq tanınmış mətnin (WKT) götürdüyünü görə bilərsiniz. Tanınmış Mətndəki “Yaxşı bilinən”, mətnin həndəsələrin göstərilməsi üçün bir sənaye standartına uyğun gəlməsinə işarə edir.

ST_GeomFromText () ilə eyni nəticə verən bir sıra digər “FromText” funksiyaları (məsələn, ST_LineFromText, ST_PointFromText) var. Bu funksiyalardakı fərq, gözlənilən həndəsə növünə uyğun olmasını təmin etmək üçün giriş mətnini təsdiqləmələridir. Beləliklə, ST_PointFromText (), bir POINT həndəsəsindən başqa bir şey ötürülsə Null qaytaracaqdır. Bu doğrulamadan heç bir fayda görmürsənsə, daha yaxşı performans göstərdiyinə görə daha ümumi ST_GeomFromText () istifadə edərək daha yaxşı xidmət göstərəcəksən.

ST_GeogFromText ()
Dərs 3-ün sonunda coğrafiya məlumat növü. ST_GeogFromText () istifadə edərək coğrafiya sütunlarını doldurmaq üçün ST_GeomFromText () istifadə etdiyimiz şəkildə istifadə edə bilərsiniz. həndəsə sütunlar. Hər iki funksiya koordinatların SRID-in göstərilməsinə və ya buraxılmasına imkan verir. Buraxıldığı təqdirdə, ST_GeomFromText (), SRID haqqında heç bir fərziyyə vermir. 0 olaraq ayarlanır. ST_GeogFromText (), əksinə, başqa bir şərt göstərilmədikdə, SRID-in 4326 olduğunu qəbul edir.

"Yap" funksiyaları
ST_GeomFromText () ilə həndəsələr yaratmağın alternativi “Make” funksiyalarıdır: ST_MakePoint (), ST_MakeLine () və ST_MakePolygon (). Bu funksiyalar ST_GeomFromText () -dən daha yaxşı performans təklif edir və sintaksisləri bir qədər kompaktdır. Yaxşı, ST_GeomFromText () niyə belə mövcuddur? ST_GeomFromText (), Açıq Yerleşim Konsorsiumunun (OGC) Sadə Xüsusiyyətləri ilə uyğunluğu təmin edir. ST_GeomFromText () istifadəsinin üstünlüyü ondan ibarətdir ki, digər RDBMS-lər (Oracle, SQL Server), funksiya ilə tanışlığınızın digər mühitlərə ötürülməsi demək olar ki, eyni funksiyalar təklif edir. "Make" funksiyalarının bir çatışmazlığı SRID-i giriş kimi qəbul etməmələridir, nəticədə qaytarılmış həndəsənin təyin olunmamış SRID-ə sahib olmasıdır. Beləliklə, bu funksiyalara edilən zənglər, normalda, ST_SetSRID zənginin içərisinə yerləşdirilir.

"Make" funksiyalarının təklif etdiyi üstünlükləri nəzərə alaraq onların istifadəsinə nəzər salaq.

ST_MakePoint ()
Ehtimal etdiyiniz kimi, bu funksiya X koordinatını və Y koordinatını (istəyə görə Z və M dəyərlərini) giriş kimi qəbul edir. ST_MakePoint () istifadə edərək Empire State Building'i nyc_poi.pts cədvəlimizə necə əlavə edəcəyik:

ST_MakeLine ()

Bu funksiya üç alternativ sintaksisə malikdir. Birincisi, sadəcə iki nöqtəli həndəsəni giriş kimi qəbul edir və ikisini birləşdirən düz bir xətt qaytarır. Lincoln Tunnel xüsusiyyətini əlavə etmək üçün bu sintaksisdən istifadə edə bilərik:

İkinci sintaksis, sətri təşkil edən nöqtələrin bir cədvəldə saxlandığı zaman istifadə olunur. Nöqtələri olan sahə funksiyaya yeganə giriş olaraq təyin olunur. PostGIS sənədlərindən alınan bu nümunə bir sıra GPS nöqtələrindən bir xətt yaratmağı göstərir:

Nümunədə gps_points adlı bir cədvəl bir track identifikatorunu (gps_track), vaxtı (gps_time) və nöqtə həndəsəsini (the_geom) saxlayır. Bu üç sütunda saxlanılan məlumatlar, GPS ləqəbli bir alt sorğu olaraq alınır. Ana sorğu iz identifikatoru ilə qruplaşır və nöqtələrdən bir xətt yaratmaq üçün nöqtə həndəsə sahəsini ST_MakeLine () funksiyasına keçir.

Son ST_MakeLine () sintaksisi bir sıra nöqtələri giriş kimi qəbul edir. Holland Tunelini əlavə etmək üçün bu sintaksisdən istifadə edə bilərik:

Bu nümunə Postgres ARRAY məlumat növünün istifadəsini göstərir. Diziler ARRAY açar sözündən istifadə edərək düzəldilir və ardınca dördbucaqlı mötərizədə olan elementlərin siyahısı verilir.

Sənədlər, visit_locations adlı bir cədvəldə saxlanılan çoxbucaqlıların sentroidlərinin ST_MakeLine () giriş kimi istifadə edildiyi bir sıra sintaksisinin ağıllı bir istifadəsini göstərir:

ST_MakePolygon ()
Bu funksiya giriş olaraq çoxbucağın xarici halqasını təmsil edən LINESTRING alır. İstəyə görə, bir sıra daxili ring LINESTRINGs ikinci bir giriş olaraq daxil edilə bilər. Daha sadə halda başlayaraq hər ikisinin nümunəsinə nəzər salaq:

Bu nümunədə, LINESTRING yaratmaq üçün ST_GeomFromText () istifadə etdim, çünki nöqtələrin sətrini təmin etmək Holland Tüneli nümunəsi üçün istifadə olunan ST_MakePoint () yanaşmasını götürdüyümdən daha asandır. ST_GeomFromText () - nin əvvəlki istifadəsində isteğe bağlı SRID arqumentini daxil etmişdik, lakin bu nümunədə onu buraxmışam. Niyə? ST_MakePolygon (), nə olursa olsun SRID'siz bir həndəsi qaytaracağı üçün, ST_SetSRID () funksiyasına çağırışda SRID-i yalnız bir dəfə göstərmək mantiqidir.

İndi isə parkı Mərkəzi Park çoxbucağından ayırmaq üçün ST_MakePolygon () istifadə edən bir nümunə:

ST_MakeEnvelope ()
ST_MakeEnvelope () funksiyası sərhəd koordinatları siyahısından düzbucaqlı bir qutu yaratmaq üçün istifadə olunur: qutunun minimum x dəyəri, minimum y dəyəri, maksimum x dəyəri və maksimum y dəyəri. Belə bir həndəsənin gerçək dünya xüsusiyyətini təsvir etmək üçün istifadə edilməsi nadir hallarda olsa da, zərflər tez-tez digər funksiyaların girişləri kimi istifadə olunur (məsələn, bir məhdudiyyət qutusundakı bütün xüsusiyyətləri seçmək). Pensilvaniya ətrafındakı bir zərf istehsal edən bir nümunə:

Bu nümunə sadəcə ST_MakeEnvelope () sintaksisini nümayiş etdirir. Qeyd edək ki, zərfin SRID-i funksiyaya son giriş olaraq verilir. ST_Intersects () funksiyasından bəhs etdiyimiz zaman dərsdə bu zərf üçün praktik istifadəni görəcəyik.


Q1: səmərəsiz bir şey var?

Optimize edə bilərsiniz sütun sifarişi hər sıra üçün bir bayt qənaət etmək üçün hal-hazırda hizalama dolğusuna sərf edilmişdir:

Bu sıra başına 8 ilə 18 bayt arasında qənaət edir. Zəng edirəm Sütun Tetris. Görmək:

TOAST'un məzmunu da daxil olmaqla bir sıra ölçüsünə yaxınlaşma bütün sətrin Mətn nümayişi uzunluğunu soruşmaqla əldə etmək asandır:

Bu, icra edilərkən müştəri tərəfindən alınacaq bayt sayına yaxın bir təxmindir:

. sorğunu axtaranın mətn formatında nəticələr tələb etdiyini düşünsək, əksər proqramların işi budur (ikili format mümkündür, lakin əksər hallarda problemə dəyməz).

Eyni metod N "mətndə ən böyük" tablename satırlarını tapmaq üçün tətbiq oluna bilər:

Baş verə biləcək bir neçə şey var. Ümumiyyətlə, uzunluğun proksimal problem olduğuna şübhə edirəm. Bunun əvəzinə uzunluqla əlaqəli bir probleminiz olduğuna şübhə edirəm.

Mətn sahələrinin bir neçə k-a qədər çıxa biləcəyini deyirsiniz. Bir sıra əsas yaddaşda 8 k-dan çox ola bilməz və çox güman ki, daha böyük mətn sahələriniz TOASTed və ya əsas yaddaşdan ayrı fayllarda genişletilmiş bir yaddaşa köçürülmüşdür. Bu, əsas yaddaşınızı daha sürətli edir (beləliklə, id nömrəsi daha sürətli olur, çünki daha az disk səhifəsinə daxil ola bilərsiniz), lakin daha çox təsadüfi giriş / çıxış olduğu üçün * seçin daha yavaş olur.

Ümumi sətir ölçüləriniz hələ də 8 k-dan yaxşıdırsa, saxlama parametrlərini dəyişdirməyə cəhd edə bilərsiniz. Bununla birlikdə, böyük bir atributu əsas yaddaşa əlavə edərkən pis şeylər baş verə biləcəyini xəbərdar edərdim, buna görə ehtiyacınız olmadığı təqdirdə buna toxunmamaq üçün yaxşı bir məhdudiyyət qoyun. Yəni nəqliyyat yalnız bir şey deyildir. Təsadüfi oxu tələb edən bir çox sahəni birləşdirir. Çox sayda təsadüfi oxu da önbellek qaçırmalarına səbəb ola bilər və tələb olunan böyük yaddaş miqdarı diskdə və çox sayda geniş sətirdə maddi hala gəlməyi tələb edə bilər, əgər birləşdirmə varsa (və TOAST iştirak edirsə) daha bahalı ola bilər naxışlara qoşulmaq və s.

Görəcəyim ilk şey daha az sıra seçmək və bunun kömək edib etməyəcəyini görməkdir. Bu işləyirsə, serverə daha çox RAM əlavə edə bilərsiniz, amma başlayacağam və əvvəlcə plan dəyişiklikləri və önbelleği qaçırdığına görə performansın harada düşməyə başladığını görərdim.