PostgreSQL obsługuje już typy danych przestrzennych, operatorów i indeksowanie.
Co dokładnie zapewnia PostGIS, co wymagało istnienia jako rozszerzenie PostgreSQL?
Dlaczego nie wszyscy po prostu używamy przestrzennej funkcjonalności PostgreSQL?
PostgreSQL obsługuje już typy danych przestrzennych, operatorów i indeksowanie.
Co dokładnie zapewnia PostGIS, co wymagało istnienia jako rozszerzenie PostgreSQL?
Dlaczego nie wszyscy po prostu używamy przestrzennej funkcjonalności PostgreSQL?
Odpowiedzi:
Jeśli ponownie zranisz wszechświat do początku 2001 roku i nie tylko pozwolisz wynalazcom PostGIS zobaczyć przyszłość, ale także pozwolisz PSC PgSQL zobaczyć przyszłość, być może PostGIS będzie serią łat na PgSQL. Ale przynajmniej, gdybyśmy zaczęli jako łatki do rdzenia, pierwszą rzeczą, na którą byśmy się natknęli, było:
A rdzeń PgSQL powiedziałby: „nie, oczywiście nie, obszary mają istniejący dobrze rozumiany semantyczny i nie możemy robić wstecz takich niezgodnych zmian”.
Jako programiści niebędący rdzeniami PostGIS był w stanie nokautować miesięczne i 6-miesięczne wydania na wiele lat, podczas gdy rdzeń PgSQL rozwijał się wraz z wydaniami rocznymi i dłuższymi. Mogliśmy również dodawać dowolne funkcje, kiedy tylko chcieliśmy, ponieważ mieliśmy uprawnienia do zatwierdzania w naszym projekcie, ale uzyskanie praw do zatwierdzania w PgSQL zajmuje bardzo dużo czasu.
Do czasu, gdy PostGIS wykazywał wystarczającą wartość zewnętrzną, że rdzeń PgSQL przejrzał i powiedział do siebie „hmm, byłoby miło mieć w jądrze jako dodatkową funkcję”, było już tyle kodu o innym standardzie i stylu niż PgSQL (nie wspominając o niekompatybilnej licencji), że pomysł połączenia nie był tak naprawdę możliwy.
Zamiast tego PostGIS stał się kanonicznym przykładem naprawdę dużego złożonego rozszerzenia, które pomaga PgSQL pozostać modułowym i rozszerzalnym. „Jak to wpłynie na coś takiego jak PostGIS” to pytanie często zadawane, gdy rdzeń PgSQL ocenia pewne zmiany. Jest to również dobra rzecz, może nie tak ładna jak PostGIS będąca częścią rdzenia, ale wystarczająco dobra.
Istnieją inne powody, takie jak długa lista zależności, których rdzeń PgSQL nie chciałby widzieć, ogólnie niższa spójność kodu i czystość interfejsu API, które chcieliby ulepszyć, i tak dalej. Nawet w chwili poczęcia PostGIS był zbyt duży, aby PgSQL mógł go przełknąć w jednym kęsie.
To po prostu nieprawda, PostgreSQL nie obsługuje typów danych przestrzennych. Obsługuje typy geometryczne. Są one w zupełności w porządku dla niektórych rzeczy, ale są całkowicie oddzielone od rzeczywistych układów współrzędnych. Rodzime typy
Jeśli chodzi o pytanie indeksowe, to w FAQ
Dlaczego indeksy R-drzewa PostgreSQL nie są obsługiwane?
Wczesne wersje PostGIS korzystały z indeksów PostgreSQL R-Tree. Jednak R-drzewa PostgreSQL zostały całkowicie odrzucone od wersji 0.6, a indeksowanie przestrzenne zapewnia schemat R-Tree-over-GiST.
Nasze testy wykazały, że szybkość wyszukiwania natywnych R-Tree i GiST jest porównywalna. Natywne R-drzewa PostgreSQL mają dwa ograniczenia, które sprawiają, że nie są one pożądane do korzystania z funkcji GIS (należy pamiętać, że ograniczenia te są spowodowane obecną implementacją R-Tree PostgreSQL, a nie ogólną koncepcją R-Tree):
Indeksy R-drzewa w PostgreSQL nie obsługują funkcji większych niż 8 KB. Indeksy GiST mogą, używając „stratnej” sztuczki polegającej na podstawieniu ramki granicznej samą funkcją.
Indeksy R-drzewa w PostgreSQL nie są „zerowo bezpieczne”, więc budowanie indeksu na kolumnie geometrii zawierającej geometrie null zakończy się niepowodzeniem. [Indeksy GiST są zerowo bezpieczne]
PostGIS to przestrzenny przedłużacz bazy danych dla obiektowo-relacyjnej bazy danych PostgreSQL . Dodaje obsługę obiektów geograficznych, umożliwiając uruchamianie zapytań lokalizacyjnych w SQL.
SELECT superhero.name FROM city, superhero WHERE ST_Contains(city.geom, superhero.geom) AND city.name = 'Gotham';
Oprócz podstawowej świadomości lokalizacji, PostGIS oferuje wiele funkcji rzadko spotykanych w innych konkurencyjnych bazach danych przestrzennych, takich jak Oracle Locator / Spatial i SQL Server. Więcej informacji znajduje się na liście funkcji PostGIS .
Lista funkcji PostGIS rozszerza również te możliwości:
PostGIS dodaje dodatkowe typy (geometria, geografia, raster i inne) do bazy danych PostgreSQL . Dodaje także funkcje, operatory i rozszerzenia indeksu mające zastosowanie do tych typów przestrzennych. Te dodatkowe funkcje, operatory, powiązania i typy indeksów zwiększają moc rdzenia PostgreSQL DBMS, czyniąc go szybkim, bogatym w funkcje i solidnym systemem zarządzania przestrzenną bazą danych.
Lista funkcji
Seria PostGIS 2+ zapewnia:
- Funkcje przetwarzania i analizy zarówno danych wektorowych, jak i danych rastrowych do łączenia, krojenia w kostki, przekształcania, przeklasyfikowywania i zbierania / łączenia z mocą algebry map rastrowych SQL do precyzyjnego przetwarzania rastra
- Odrzucanie przestrzenne Funkcje wywoływane SQL zarówno dla danych wektorowych, jak i rastrowych Obsługa importu / eksportu danych wektorowych w formacie SHAPefile za pomocą narzędzi wiersza polecenia i GUI oraz obsługa większej liczby formatów za pomocą innych narzędzi Open Source innych firm
Pakiety wiersza polecenia do importowania danych rastrowych z wielu standardowych formatów: GeoTiff, NetCDF, PNG, JPG
Renderowanie i importowanie funkcji obsługi danych wektorowych dla standardowych formatów tekstowych, takich jak KML, GML, GeoJSON, GeoHash i WKT przy użyciu SQL Renderowanie danych rastrowych w różnych standardowych formatach GeoTIFF, PNG, JPG, NetCDF, aby wymienić tylko kilka przy użyciu SQL
Bezproblemowe funkcje rastrowe / wektorowe SQL do wyciskania wartości pikseli według regionu geometrycznego, uruchamiania statystyk według regionu, przycinania rastrów według geometrii i wektoryzacji rastrów Obsługa obiektów 3D, indeks przestrzenny i funkcje Obsługa topologii sieci Pakiety Tiger Loader / Geocoder / Reverse Geocoder / wykorzystując dane US Census Tiger
Ponadto do punktów / części wymienionych już w tym poście. Dodałbym, jak wspomniano na stronie PostGIS, jak to działa
Ponieważ PostGIS jest w C, może korzystać z innych bibliotek w C i C ++ i robi to swobodnie. PostGIS zależy od: