PostGIS'in PostgreSQL'in amacı nedir?


49

PostgreSQL zaten uzaysal veri türlerini, operatörleri ve indekslemeyi desteklemektedir.

PostGIS, PostgreSQL'in bir uzantısı olarak varolmayı zorunlu kılan şey nedir?

Neden hepimiz sadece PostgreSQL'in mekansal işlevselliğini kullanmıyoruz?


2
Bu mekansal veri türlerini, operatörleri ve indekslemeyi
sağlayan PostGIS'dir

5
Hayır, yerli PostgreSQL geometri türlerinden bahsediyor.
Evan Carroll

4
Kısa cevap, PostGIS'in (şimdi) 10 kat PgSQL türleri kadar işlevsel olduğudur. "Neden yeni tipler geliştirdik, sadece zaten mevcut olanları geliştirmiyoruz" sorusunu kapsayan uzun cevap aşağıda verilmiştir.
Paul Ramsey

1
Java Baharı çerçevesi ile aynı şey oldu. Java'nın kusurları / eksik özellikleri vardı. Spring birçok Java kusurunu düzeltti ve kullanışlı özellikler ekledi. Java, Spring'in düzeltmeleri + özelliklerini kopyaladı. İnsanlar daha sonra Bahar'ın neden var olduğunu soruyorlar ...
Neil McGuigan

Yanıtlar:


86

Evreni 2001 yılının başlarına tekrar yaralarsanız ve sadece PostGIS'in mucitlerinin geleceği görmesine izin vermekle kalmaz, aynı zamanda PgSQL'in PSC'sinin geleceği görmesine izin vermezseniz, belki PostGIS PgSQL üzerinde bir dizi yama olur. Ancak, en azından, çekirdeğe yama olarak başlamış olsaydık, karşılaşacağımız ilk şey:

  • Çekirdek PgSQL alanları delikleri desteklemiyor, ancak GIS modeli gerçekten delik istiyor, bunu değiştirebilir miyiz?

Ve çekirdek PgSQL şöyle derdi: "hayır, elbette değil, alanların iyi anlaşılmış bir semantiği var ve bunun gibi uyumsuz değişiklikler yapamayız" dedi.

Çekirdek olmayan geliştiriciler olarak, PostGIS birkaç yıl boyunca aylık ve 6 aylık sürümleri elemeyi başarırken, PgSQL çekirdeği yıllık ve daha uzun sürümlerle birlikte yanlara aktı. Ayrıca, projemizin haklarına sahip olduğumuzdan ne zaman istediğimiz özellikleri de ekleyebildik, ancak PgSQL'de çalışma haklarına sahip olmak çok uzun zaman alıyor.

PostGIS, PgSQL çekirdeğinin üzerine baktığı ve kendilerine "çekirdek, ek bir özellik olarak çekimi güzel olurdu" derken yeterince dışsal bir değer ortaya koyduğunda, şimdiden çok farklı bir standart ve tarzın kodu vardı. PgSQL (uyumsuz bir lisans altında söz konusu değil) birleşme fikrinin gerçekten mümkün olmadığını söyledi.

Bunun yerine PostGIS, PgSQL'in modüler ve genişletilebilir kalmasına yardımcı olan Really Large Complex Extension'ın kanonik bir örneği haline geldi. “PostGIS gibi bir şey nasıl etkilenir” sorusu sıkça sorulan bir sorudur, çünkü çekirdek PgSQL bazı değişiklikleri değerlendirir. Bu aynı zamanda PostGIS'in çekirdeğin bir parçası olması kadar iyi değil, yeterince iyi bir şey.

PgSQL çekirdeğinin uzun bağımlılık listesi gibi görmekten nefret edebileceği gibi, genellikle daha düşük kod tutarlılığı ve geliştirmek için umutsuzluk duyacakları API temizliği gibi nedenler de var. Konseptte bile, PostGIS, PgSQL'in bir ısırıkta yutması için çok büyük bir kuafördü.


Ayrıca ... PostGIS, C ++. Bu bir PostgreSQL birleştirme için bir gösterici olacaktır. Olup olmamak ya da olmamak gerekir . Bağımlılıklar da tamamen durduracaktı - GDAL? Ha! Perl> 5.8.0'a bağlı olmayı kabul bile edemiyorum. Gelişme hızı, taahhüt haklarınız olsa bile yavaştır; Müteahhitler sadece ağaçtaki tüm kıpırdanma malları için özgür olmakla kalmazlar, kod gözden geçirmeleri ve aylar ya da yıllar içinde büyük değişiklikler yapmaları gerekir. Kod kalitesinin yararları var ama hızlı hareket etmediğinden eminim.
Craig Ringer,

Çekirdek Pg'nin daha fazla dış kütüphaneye bağlı olarak kaçınılması gereken şeyleri yeniden keşfetmeye devam etmesi özel bir sorun. Çünkü $ dead_architecture üzerinde $ weird_vendor_compiler ile $ ancient_unix_42 $ anlamına gelecektir çünkü mimarlık bunu desteklemek zorunda kalacak, tüm inşaat çiftliği üyelerinin güncellenmesi gerekecek vs.
Craig Ringer,

@CraigRinger PostGIS'in neden C ++ olduğunu düşünüyorsunuz? Bu bir hakarettir :-)
Nicklas Avén

Bu değil mi? Yemin edebilirdim. Ama elbette öyle görünmüyor. Benim hatam. Ben aslında (orta ve ölçülü) C ++ kullanımını zaten seviyorum.
Craig Ringer

4
Bir süre için PostGIS, GEOS'a bağlanma amacıyla birkaç C ++ parçasına sahipti. GEOS kendi C API'sini eklediğinde, bu parçalar kaldırıldı ve PostGIS "saf" C oldu.
Paul Ramsey

34

Bu sadece doğru değil, PostgreSQL Spatial veri tiplerini desteklemiyor. Geometrik tipleri destekler . Bunlar bazı şeyler için mükemmel derecede iyi, fakat gerçek dünya koordinat sistemlerinden tamamen ayrı. Yerli türler

Güncelleme

Endeks sorusuna gelince , SSS’de

PostgreSQL R-Tree endeksleri neden desteklenmiyor?

PostGIS'in ilk sürümleri PostgreSQL R-Tree dizinlerini kullandı. Ancak, PostgreSQL R-Trees, 0.6 sürümünden beri tamamen atıldı ve mekansal indeksleme, bir R-Tree-over-GiST şemasıyla sağlandı.

Testlerimiz doğal R-Tree ve GiST için karşılaştırılabilir bir arama hızı göstermiştir. Yerel PostgreSQL R-Trees, bunları GIS özellikleriyle kullanım için istenmeyen kılan iki sınırlamaya sahiptir (bu sınırlamaların genel olarak R-Tree konseptinden değil geçerli PostgreSQL yerel R-Tree uygulamasından kaynaklandığını unutmayın):

  • PostgreSQL'deki R-Tree indeksleri 8K boyutundan daha büyük olan özellikleri kullanamaz. GiST endeksleri, sınırlayıcı kutuyu özelliğin yerine koyma “kayıplı” numarasını kullanarak olabilir.

  • PostgreSQL'deki R-Tree indeksleri "null güvenli" değildir, bu nedenle null geometrileri içeren bir geometri sütunu üzerine bir indeks oluşturmak başarısız olur. [GiST endeksleri güvenli değil]


Son noktanı genişletebilir misin - GiST endeksleri hakkında olanı? PostgreSQL R-Tree sağlıyordu ve şimdi bunu bir GiST endeksi aracılığıyla sağlıyor, bu yüzden bu konuda kafam karıştı.
Zeruno

SSS’deki doğrudan metinle güncellendi.
Evan Carroll

1
GiST API, access / gist.h tarafından sağlanan bir PostgreSQL özelliğidir . Burada PostGIS'in
Evan Carroll

3
PostGIS, kendi başına bir ilke uygulamasına sahip olsa da, aslında kopyaladıkları basit bir nedenden ötürü PgSQL'in grafiksel nesneleri temel desteği için kullandıklarına çok benzer.
Paul Ramsey,

1
@Zeruno, Hayır, PgSQL'deki rtree ayırıcıyı değiştirmek PostGIS'in davranışını değiştirmeyecektir, çünkü bizde kendimiz var, gserialized_gist_picksplit_2d (). PgSQL’den bir o kadar da farklı değil.
Paul Ramsey

8

PostGIS , PostgreSQL nesne-ilişkisel veritabanı için konumsal bir veritabanı genişleticisidir . Konum sorgularının SQL'de çalıştırılmasını sağlayan coğrafi nesneler için destek ekler.

SELECT superhero.name
FROM city, superhero
WHERE ST_Contains(city.geom, superhero.geom)
AND city.name = 'Gotham';

Temel konum farkındalığına ek olarak, PostGIS, Oracle Locator / Spatial ve SQL Server gibi rakip diğer mekansal veritabanlarında nadiren bulunan birçok özellik sunar. Daha fazla ayrıntı için PostGIS Özellik Listesi'ne bakın.

PostGIS Özellikleri listesi , bu yetenekleri de genişletir:

PostGIS, PostgreSQL veritabanına ilave tipler (geometri, coğrafya, raster ve diğerleri) ekler . Ayrıca, bu uzamsal türler için geçerli olan işlevler, operatörler ve dizin geliştirmeleri de ekler. Bu ilave fonksiyonlar, operatörler, indeks bağlamaları ve tipleri çekirdek PostgreSQL DBMS'nin gücünü artırır, hızlı, çok özellikli ve sağlam bir mekansal veritabanı yönetim sistemi yapar.

Özellik listesi

PostGIS 2+ serisi şunları sağlar:

  • İnce taneli raster işleme için SQL raster harita cebirinin gücüyle ekleme, dicing, morphing, yeniden sınıflandırma ve toplama / birleştirme için hem vektör hem de raster veriler için işleme ve analitik işlevler
  • Hem vektör hem de raster veri için mekansal yeniden sorgulama SQL çağrılabilir işlevleri ESRI şekil dosyası vektör verilerini hem komut satırı hem de GUI paketli araçlarla içe / dışa aktarma ve diğer 3. taraf Açık Kaynak araçlarıyla daha fazla format desteği
  • Raster verilerini birçok standart formattan içe aktarmak için paketlenmiş komut satırı: GeoTiff, NetCDF, PNG, JPG

  • Vektör verilerini oluşturma ve içe aktarma KML, GML, GeoJSON, GeoHash ve WKT gibi standart metin biçimleri için SQL kullanarak raster verilerini çeşitli standart biçimlerde GeoTIFF, PNG, JPG, NetCDF kullanarak birkaç tane kullanarak

  • Geometrik bölgelere göre piksel değerlerinin ekstrüzyonu, bölgelere göre koşu istatistikleri, rasterleri bir geometriyle kırpma ve rasterleri vektörleme için 3B nesne desteği, uzamsal indeks ve fonksiyonları Ağ Topolojisi desteği Paketlenmiş Kaplan Yükleyici / Geocoder / Ters Geocoder / US Census Tiger verilerinden yararlanarak

Ayrıca, bu yazıda daha önce belirtilen noktalara / bölümlere. PostGIS web sitesinde belirtildiği gibi ekleyeceğim Nasıl çalışır?

PostGIS C'de olduğu için, C ve C ++'daki diğer kütüphanelerden yararlanabilir ve bunu liberal bir şekilde yapar. PostGIS şunlara bağlıdır:

  • Birçok geometri işleme algoritması için GEOS
  • Koordinat yeniden projeksiyon fonksiyonları için Proj.4
  • Raster işleme ve format desteği için GDAL
  • XML ayrıştırma için LibXML2
  • JSON ayrıştırması için JSON-C
  • Genişletilmiş 3D desteği ve ek coğrafi işlem algoritmaları için SFCGAL
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.