Bagaimana cara membuat, pada bentuk poligon, kisi-kisi poligon / bujur sangkar dengan ukuran tertentu, dalam postgis?
Saya telah memikirkan fungsi seperti Bagaimana cara membuat titik biasa di dalam poligon di Postgis? hanya untuk kotak, sehingga kotak dapat 5m x 5m atau bahkan 10m x 10m. Tetapi tidak punya ide untuk mengubahnya dengan cara yang benar.
Jawaban:
Berikut adalah fungsi pengembalian set
ST_CreateFishnet
yang membuat kisi 2D geometri poligon:di mana
nrow
danncol
jumlah baris dan kolom,xsize
danysize
panjang ukuran sel, dan opsionalx0
dany0
merupakan koordinat untuk sudut kiri bawah.Hasilnya adalah
row
dancol
angka, mulai dari 1 di sudut kiri bawah, dangeom
poligon persegi panjang untuk setiap sel. Jadi misalnya:Atau untuk membuat koleksi geometri tunggal untuk kisi penuh:
Anda dapat menambahkan
x0
/y0
asal offset (ini default ke nol).sumber
Berikut adalah varian spesifik penghasil, untuk situasi ketika Anda perlu membuat kisi untuk peta geografis dengan langkah metrik konstan (sel mungkin digunakan untuk nilai pengelompokan, misalnya kerapatan petir di suatu wilayah).
Fungsi tidak terlalu elegan, tetapi saya tidak menemukan solusi yang lebih baik untuk tugas itu (termasuk fungsi Mike Toews di atas). Jadi Anda memiliki poligon terikat (mis. Tiba dari antarmuka Google Maps), miliki nilai langkah dalam meter:
Bagaimana cara menggunakannya:
Jadi Anda dapat melihat bahwa garis yang diformat oleh poligon yang dihasilkan terletak di sepanjang paralel geografis dan garis meridian - itu sangat nyaman.
Saran: Jika Anda menghitung sesuatu seperti kerapatan (misalnya peta sambaran petir oleh sel), dan grid dihasilkan secara dinamis Untuk meningkatkan kinerja, saya akan menyarankan menggunakan tabel sementara untuk menyimpan sel sebagai poligon geometri, dengan indeks spasial pada kolom mewakili sel.
sumber
ST_GeomFromText
saat membuat kotak untuk ditambahkansectors
, Anda dapat menggunakanST_MakeEnvelope
dan cukup menentukan koordinat kiri bawah dan kanan atas kotak.Anda dapat membuat kisi-kisi biasa hanya menjadi vektorisasi raster kosong:
sumber
Saya telah membuat varian fungsi @ Alexander yang tidak mengharuskan kita mengubah ke SRID lain. Ini menghindari masalah harus menemukan proyeksi yang menggunakan meter sebagai unit untuk wilayah tertentu. Ini digunakan
ST_Project
untuk melangkah dengan benar menggunakan proyeksi yang diberikan. Saya juga telah menambahkanwidth_step
danheight_step
untuk memungkinkan ubin persegi panjang alih-alih mengharuskan mereka menjadi kotak.Anda dapat menggunakannya seperti ini:
sumber
Berikut ini adalah algoritma yang dioptimalkan dan efisien untuk membuat jala, kisi biasa, kisi poligon, kisi persegi di dalam setiap amplop, poligon, atau Multipoligon. hampir menangani SRID apa pun;
Tautan Repo GitHub
Gunakan dengan permintaan sederhana; input harus berupa poligon, Multipolygon, atau amplop yang valid.
sumber