PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Cara paling efisien untuk menemukan titik dalam radius tertentu dari titik tertentu

Membuat penyangga untuk menemukan titik adalah larangan yang pasti karena (1) overhead untuk membuat geometri yang mewakili penyangga, dan (2) penghitungan poligon titik jauh kurang efisien daripada penghitungan jarak sederhana.

Anda jelas bekerja dengan data (bujur, lintang) sehingga Anda harus mengonversinya ke sistem koordinat Cartesian yang sesuai yang memiliki satuan ukuran yang sama dengan jarak 10.000 Anda. Jika jarak itu dalam meter, maka Anda juga dapat memberikan titik dari tabel ke geography dan hitung langsung pada koordinat (panjang, lat). Karena Anda hanya ingin mengidentifikasi titik-titik yang berada dalam jarak tertentu, Anda dapat menggunakan ST_DWithin() fungsi dengan perhitungan pada bola untuk kecepatan tambahan (jangan lakukan ini saat berada di garis lintang yang sangat tinggi atau dengan jarak yang sangat jauh):

SELECT id, point 
FROM my_table 
WHERE ST_DWithin(point::geography,
                 ST_GeogFromText('POINT(-116.768347 33.911404)'),
                 10000, false);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. BUAT BAHASA plpython3u – PostgreSQL 9.6

  2. DBAppender asinkron dengan logback

  3. Memesan hasil model bersarang yang penuh semangat di Node Sequelize

  4. Konversi Teks ke Varchar

  5. Dapatkan baris N terakhir dalam database secara berurutan?