Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cari rentang koordinat Lintang/Bujur

Beberapa versi dari apa yang Anda lakukan benar, tetapi saya pikir Anda mungkin ingin menggunakan tipe geometri yang sebenarnya, terutama jika Anda menggunakan MyISAM dan dapat membuat indeks spasial R-Tree. Anda dapat memiliki kolom dengan jenis yang didukung (yaitu point , polygon ), atau geometry catch catchall ketik:

mysql> create table spatial_table (id int, my_spots point, my_polygons geometry);
Query OK, 0 rows affected (0.06 sec)

Kemudian kueri dan perbarui dengan sintaks WKT:

mysql> insert into spatial_table values (1, GeomFromText('POINT(1 1)'), GeomFromText('POLYGON((1 1, 2 2, 0 2, 1 1))'));
Query OK, 1 row affected (0.00 sec)

mysql> insert into spatial_table values (1, GeomFromText('POINT(10 10)'), GeomFromText('POLYGON((10 10, 20 20, 0 20, 10 10))') );
Query OK, 1 row affected (0.00 sec)

Anda kemudian dapat melakukan kueri Anda (yaitu sekitar), terhadap persegi panjang pembatas minimum dari linestring dengan titik akhir point1 =bujur - kenaikan, lon - kenaikan, y =bujur + kenaikan, lintang + kenaikan, yaitu di sini dengan +- dari 1 :

mysql> select * from spatial_table where MBRContains(GeomFromText('LINESTRING(9 9, 11 11)'), my_spots);
+------+---------------------------+-----------------------------------------------------------------------------------+
| id   | my_spots                  | my_polygons                                                                       |
+------+---------------------------+-----------------------------------------------------------------------------------+
|    1 |              [email protected]      [email protected] |                    [email protected]      [email protected]      [email protected]      [email protected]              [email protected]      [email protected]      [email protected] |
+------+---------------------------+-----------------------------------------------------------------------------------+
1 row in set (0.00 sec)

Ini akan berkinerja jauh lebih baik daripada melakukan aritmatika pada sekelompok pelampung yang mewakili garis bujur dan garis lintang. BTW di sekitar lokasi San Francisco, konstanta berikut bekerja cukup baik untuk mengkonversi antara km dan derajat bujur dan lintang (yaitu, jika Anda ingin peta persegi bersih Santa Cruz):

lonf 0.01132221938
latf 0.0090215040

Artinya, (x +- 2*lonf, y +- 2*latf) memberi Anda $lat_floor yang relevan dll nilai untuk anak laki-laki selebar 2 km di sekitar tempat tujuan Anda.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Membuat skrip melalui ssh melalui dempul di windows

  2. Cara menghapus duplikat dalam tabel SQL berdasarkan beberapa bidang

  3. Migrasi database Ruby on Rails tidak membuat kunci asing di tabel MySQL

  4. Kesalahan MySQL saat membuat kunci asing dengan migrasi Laravel

  5. Simpan file gambar atau URL di database MySQL? Mana yang lebih baik?