Wybieranie poprzez obrysowanie ramki za pomocą PostGIS

12

Mam duży zestaw danych w bazie danych PostGIS. Oglądam go za pośrednictwem interfejsu sieciowego, który ładuje dane jako GeoJSON. Jest zbyt dużo danych, aby dać klientowi wszystkie naraz (wartość 10 MB ...), więc chciałbym uzyskać obszar danych w obwiedni utworzonej przez krawędzie okna (kropkowana linia na obrazku poniżej ). Uzyskanie współrzędnych dla punktów f i g jest łatwe.

Pytanie 1: Czy to dobry sposób na robienie rzeczy? Czy powinienem myśleć o buforowaniu ich jako kafelków, czy ta metoda może być wystarczająco skuteczna?

Pytanie 2: Jak mogę pobrać tylko dane w tym polu ograniczającym?

Pytanie 3: Jeśli kształt zachodzi na krawędź ramki ograniczającej (np. Kształt A poniżej), czy istnieje prosty sposób przycięcia go, ponieważ jest on pytany, jak na drugim zdjęciu?

wprowadź opis zdjęcia tutaj

Mr_Chimp
źródło
Którą przeglądarkę uruchamiasz na kliencie?
podmroku
Mapstraction. Obecnie używam OpenLayers jako dostawcy.
Mr_Chimp

Odpowiedzi:

8

wystarczy zmienić kolejność pytań i masz procedurę:

2) Wybierz tylko to, co przecina bbox ( ST_Intersects).
3) Przecinaj go ze znakiem bbox, aby przyciąć wielokąty ( ST_Intersection).
1) Utwórz nową tabelę z wynikami ( CREATE TABLE newtable AS SELECT...).

Dokumenty ST_Intersection zawierają próbkę kodu. Musisz go dostosować i użyć ST_PolygonFromText jako bbox.

Pablo
źródło
4

Myślę, że większość (wszystkich) klientów internetowych (i gis również na pulpicie) robi to. Nie można wysłać całego zestawu danych.

To, czy powinieneś skonfigurować buforowanie, zależy od tego, czy twoje dane różnią się statycznie, czy się zmieniają.

Aby zaznaczyć to pole ograniczające, zaznacz, aby uzyskać dane będą bardzo szybkie (jeśli masz indeks przestrzenny), ale oczywiście nie jest to bezpłatne. Zapłacisz pewną mocą procesora.

Jak powiedziano wcześniej: aby znaleźć wielokąty w swoim zasięgu, użyj ST_Intersects.

Aby uzyskać tylko część wewnątrz zasięgu, użyj ST_Intersection, ale nie rób tego. ST_Intersection jest kosztownym procesem. Chyba że masz bardzo duże wielokąty, myślę, że lepiej wysłać całe wielokąty.

Ale myślę, że chcesz to zrobić w locie, zamiast odkładać na stół

Nicklas Avén
źródło