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
Lepaskan: 2025-01-09 11:47:42
asal
180 orang telah melayarinya

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.

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
Salin selepas log masuk

Menggunakan ST_Distance (Jarak dalam Batu):

ST_Distance mengembalikan jarak dalam meter. Kami menukar kepada batu menggunakan faktor penukaran.

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;
Salin selepas log masuk

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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan