Jak stworzyć, w kształcie wielokąta, regularną siatkę wielokątów / kwadratów o danym rozmiarze, w postgis?
Pomyślałem o funkcji takiej jak Jak utworzyć regularną siatkę punktów wewnątrz wielokąta w Postgis? tylko dla kwadratów, tak aby kwadraty mogły mieć wymiary 5 x 5 m lub nawet 10 x 10 m. Ale nie mam pojęcia, jak to zmienić we właściwy sposób.
Odpowiedzi:
Oto funkcja zwracająca zestaw,
ST_CreateFishnet
która tworzy siatkę 2D o geometrii wielokątów:gdzie
nrow
incol
są liczbą wierszy i kolumnxsize
orazysize
są długościami wielkości komórki, i są opcjonalnex0
iy0
są współrzędnymi lewego dolnego rogu.Powoduje to,
row
acol
cyfry od 1 w dolnym lewym rogu, ageom
prostokątnych wielokąty dla każdej komórki. Na przykład:Lub utworzyć pojedynczą kolekcję geometrii dla pełnej siatki:
Możesz dodać przesunięcia
x0
/y0
origin (domyślnie ustawione na zero).źródło
Oto specyficzny wariant generowania dla sytuacji, gdy trzeba utworzyć siatkę dla mapy geograficznej ze stałym krokiem metrycznym (komórki mogą być użyte do grupowania wartości, np. Natężenia błyskawicy w regionie).
Funkcja nie jest zbyt elegancka, ale nie znalazłem lepszego rozwiązania dla tego zadania (w tym funkcja Mike'a Toewsa powyżej). Więc masz związany wielokąt (np. Przybył z interfejsu Google Maps), masz wartość kroku w metrach:
Jak tego użyć:
Możesz więc zobaczyć, że linie sformatowane przez wygenerowane wielokąty leżą wzdłuż równoleżników geograficznych i południków - to bardzo wygodne.
Wskazówka: Jeśli obliczasz coś w rodzaju gęstości (np. Mapa uderzeń pioruna według komórek), a siatka jest generowana dynamicznie Aby zwiększyć wydajność, sugerowałbym użycie tabel tymczasowych do przechowywania komórek jako wielokątów geometrycznych, z indeksem przestrzennym na kolumnie reprezentującym komórka.
źródło
ST_GeomFromText
podczas tworzenia pola do dodaniasectors
, możesz użyćST_MakeEnvelope
i po prostu określić współrzędne dolnego lewego i prawego górnego pola.Możesz stworzyć regularną siatkę po prostu wektoryzując pusty raster:
źródło
Stworzyłem wariant funkcji @ Alexander, który nie wymaga transformacji na inny SRID. Pozwala to uniknąć problemu ze znalezieniem projekcji, która wykorzystuje mierniki jako jednostki dla określonego regionu. Służy
ST_Project
do prawidłowego kroczenia przy użyciu danej projekcji. Dodałem równieżwidth_step
i,height_step
aby pozwolić na prostokątne płytki zamiast wymagać, aby były kwadratami.Możesz go używać w następujący sposób:
źródło
Oto zoptymalizowany i wydajny algorytm do tworzenia kabaretki, siatki regularnej, siatki wielokątnej, siatki prostokątnej wewnątrz dowolnej obwiedni, wielokąta lub wielokąta. prawie obsłużyć dowolny SRID;
GitHub Repo Link
Użyj go za pomocą prostego zapytania; wejście powinno być poprawnym wielokątem, wielokątem lub kopertą.
źródło