Rumah >pangkalan data >tutorial mysql >Bagaimana Mencari Bangunan Dalam Jejari 5 Batu Menggunakan Koordinat?

Bagaimana Mencari Bangunan Dalam Jejari 5 Batu Menggunakan Koordinat?

DDD
DDDasal
2025-01-09 11:37:43805semak imbas

How to Find Buildings Within a 5-Mile Radius Using Coordinates?

Mencari Bangunan Dalam Jejari 5 Batu melalui Koordinat

Panduan ini memperincikan cara mendapatkan semula semua bangunan dengan cekap dalam radius 5 batu dari koordinat yang diberikan.

Langkah 1: Optimumkan Storan Data

Simpan data lokasi bangunan menggunakan jenis data geometri atau geografi. Ini meningkatkan prestasi pertanyaan spatial dengan ketara dan menghalang isu penukaran jenis data.

Langkah 2: Gunakan ST_DWithin atau ST_Distance

Dua fungsi memudahkan pengiraan jarak:

  1. ST_DWithin: Fungsi ini dengan cekap menentukan sama ada geometri jatuh dalam jarak yang ditentukan. Untuk mencari bangunan dalam jarak 5 batu dari (-4.6314, 54.0887):

    <code class="language-sql">SELECT name, longitude, latitude
    FROM building
    WHERE ST_DWithin('POINT(-4.6314 54.0887)'::geography, ST_MakePoint(longitude, latitude), 8046.72);
    -- 8046.72 meters = 5 miles</code>
  2. ST_Distance: Fungsi ini mengira jarak dalam meter. Tukar meter kepada batu menggunakan: distance * 0.000621371. Untuk bangunan dalam jarak 5 batu dari (-4.6314, 54.0887):

    <code class="language-sql">SELECT name, longitude, latitude,
    ST_Distance('POINT(-4.6314 54.0887)'::geography, ST_MakePoint(longitude, latitude)) * 0.000621371 AS distance_miles
    FROM building
    WHERE distance_miles <= 5;</code>

Langkah 3: Pertimbangan Utama

  • Kekalkan susunan yang betul dalam ST_MakePoint: longitud, latitud.
  • ST_Pengiraan jarak memintas indeks spatial. Gunakannya dalam klausa SELECT untuk mengelakkan kesesakan prestasi.
  • Amazon Athena menggunakan darjah untuk pengiraan jarak dalam ST_Distance.

Atas ialah kandungan terperinci Bagaimana Mencari Bangunan Dalam Jejari 5 Batu Menggunakan Koordinat?. 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