Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Mencari Semua Bangunan Dengan Cekap Dalam 5 Batu dari Titik Tertentu?

Bagaimanakah Saya Boleh Mencari Semua Bangunan Dengan Cekap Dalam 5 Batu dari Titik Tertentu?

Mary-Kate Olsen
Lepaskan: 2025-01-09 11:56:46
asal
114 orang telah melayarinya

How Can I Efficiently Find All Buildings Within 5 Miles of a Given Point?

Optimumkan pertanyaan spatial: cekap mencari semua bangunan dalam jarak 5 batu

Artikel ini meneroka masalah spatial biasa: mendapatkan semula semua bangunan dalam radius tertentu dari titik koordinat tertentu. Menggunakan fungsi ST_CONTAINS secara langsung mungkin tidak cekap, jadi artikel ini akan meneroka penyelesaian yang lebih baik.

Kepentingan perwakilan data

Sebelum pergi ke butiran teknikal, adalah penting untuk menekankan kepentingan perwakilan data yang betul. Menyimpan data geospatial sebagai lajur longitud dan latitud yang berasingan mewujudkan ketidakcekapan dalam operasi pertanyaan. Untuk tujuan ini, adalah sangat disyorkan untuk menggunakan jenis data geometry atau geography, yang merangkumi dua koordinat dalam satu medan.

Gunakan ST_DWithin untuk melaksanakan pertanyaan kedekatan dengan cekap

ST_DWithin ialah fungsi berkuasa yang secara langsung menyemak sama ada dua geometri berada dalam jarak tertentu. Dengan menukar jejari carian kepada meter dan membandingkannya dengan jarak yang dikira menggunakan ST_DWithin, kami boleh mengenal pasti bangunan dalam julat yang dikehendaki dengan cekap.

<code class="language-sql">SELECT name, long, lat
FROM building
WHERE ST_DWithin(
  ST_GEOMETRY_FROM_TEXT('POINT(-84.38653999999998,33.72024)'),
  ST_POINT(long, lat),
  8046.72
);
-- 8046.72 米 = 5 英里</code>
Salin selepas log masuk

Gunakan ST_Distance untuk mengendalikan jarak batu yang ditukar

Sebagai alternatif, anda boleh menggunakan ST_Distance untuk mengira jarak antara bentuk geometri. Keluaran pada mulanya adalah dalam meter, tetapi kita boleh menukarnya kepada batu menggunakan faktor pendaraban mudah:

<code class="language-sql">SELECT name, long, lat,
  ST_Distance(
    ST_GEOMETRY_FROM_TEXT('POINT(-84.38653999999998,33.72024)'),
    ST_POINT(long, lat)
  ) * 0.000621371 AS distance
FROM building
WHERE distance < 5;</code>
Salin selepas log masuk

Nota: Apabila menggunakan ST_Distance, pertanyaan spatial mesti dikendalikan dengan cekap dengan menggunakan indeks. Walaupun ST_Distance sendiri tidak menyokong pengindeksan, mencipta indeks spatial pada ST_GEOMETRY boleh mengoptimumkan prestasi pertanyaan keseluruhan.

Ringkasan

Dengan meneroka pendekatan alternatif dan menekankan pengoptimuman perwakilan data, kami menunjukkan kaedah untuk mendapatkan semula bangunan dengan cekap dalam julat tertentu. Teknik yang dibentangkan dalam kertas kerja ini memberikan skalabiliti dan peningkatan prestasi untuk pertanyaan spatial dalam aplikasi dunia sebenar.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencari Semua Bangunan Dengan Cekap Dalam 5 Batu dari Titik Tertentu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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