Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mendapatkan Bangunan dengan Cekap dalam 5 Batu dari Koordinat Diberikan?

Bagaimana untuk Mendapatkan Bangunan dengan Cekap dalam 5 Batu dari Koordinat Diberikan?

Barbara Streisand
Barbara Streisandasal
2025-01-09 11:47:42118semak imbas

How to Efficiently Retrieve Buildings within 5 Miles of Given Coordinates?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn