Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mendapatkan Bangunan dengan Cekap dalam 5 Batu dari Koordinat Diberikan?
Mencari Bangunan dalam Radius 5 Batu: Penyelesaian Geospatial
Artikel ini menangani cabaran biasa untuk mengenal pasti semua bangunan dalam radius 5 batu dari koordinat yang diberikan. Kami akan membentangkan penyelesaian berprestasi tinggi untuk pertanyaan spatial ini.
Senario:
Bayangkan jadual pangkalan data "Membina" dengan lajur: "nama," "latitud" ("lat") dan "longitud" ("lng"). Lokasi setiap bangunan ditentukan mengikut latitud dan longitudnya.
Masalahnya:
Objektifnya adalah untuk mendapatkan semula semua bangunan dalam jarak 5 batu dari pasangan koordinat tertentu, contohnya: -84.38653999999998, 33.72024.
Pendekatan Tidak Cekap:
Menggunakan fungsi seperti ST_CONTAINS
dengan nilai latitud dan longitud yang disimpan secara berasingan adalah tidak cekap. Pendekatan ini menambahkan overhed yang ketara kepada pemprosesan pertanyaan.
Penyelesaian Optimum: Memanfaatkan Jenis Data Spatial
Untuk prestasi optimum, simpan koordinat sebagai jenis data geometri atau geografi. Ini menyelaraskan pengiraan jarak dengan ketara. Kami akan menunjukkan menggunakan fungsi PostGIS.
Kaedah Cekap: ST_DWithin
dan ST_Distance
PostGIS menawarkan fungsi spatial yang berkuasa untuk pengiraan jarak yang cekap. Begini cara menggunakan ST_DWithin
dan ST_Distance
:
Menggunakan ST_DWithin
(Hasil Boolean):
ST_DWithin
mengembalikan boolean yang menunjukkan jika geometri berada dalam jarak yang ditentukan.
<code class="language-sql">SELECT name, lng, lat, ST_Distance('POINT(-4.6314 54.0887)'::geography, ST_MakePoint(lng,lat)::geography) * 0.000621371 AS distance FROM building WHERE ST_DWithin('POINT(-4.6314 54.0887)'::geography, ST_MakePoint(lng,lat)::geography, 8046.72); -- 8046.72 meters = 5 miles</code>
Menggunakan ST_Distance
(Jarak dalam Batu):
ST_Distance
mengembalikan jarak dalam meter. Kami menukar kepada batu menggunakan faktor penukaran.
<code class="language-sql">SELECT name, lng, lat, ST_Distance('POINT(-4.6314 54.0887)'::geography, ST_MakePoint(lng,lat)::geography) * 0.000621371 AS distance FROM building WHERE ST_Distance('POINT(-4.6314 54.0887)'::geography, ST_MakePoint(lng,lat)::geography) * 0.000621371 <= 5;</code>
Dengan menggunakan fungsi spatial ini dan menyimpan koordinat dengan sewajarnya, anda mencapai perolehan semula bangunan yang tepat dan cekap dalam radius 5 batu, penting untuk aplikasi geospatial yang berkesan. Ingat untuk menggantikan (-4.6314, 54.0887)
dengan koordinat sebenar anda.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Bangunan dengan Cekap dalam 5 Batu dari Koordinat Diberikan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!