Solusi Google:
Menciptakan Tabel
Saat Anda membuat tabel MySQL, Anda ingin memberi perhatian khusus pada atribut lat dan lng. Dengan kemampuan zoom Google Maps saat ini, Anda seharusnya hanya membutuhkan 6 digit presisi setelah desimal. Untuk menjaga ruang penyimpanan yang diperlukan untuk meja Anda minimum, Anda dapat menentukan bahwa atribut lat dan lng mengapung ukuran (10,6). Itu akan membiarkan bidang menyimpan 6 digit setelah desimal, ditambah hingga 4 digit sebelum desimal, misalnya -123.456789 derajat. Tabel Anda juga harus memiliki atribut id untuk dijadikan sebagai kunci utama.
CREATE TABLE `markers` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`name` VARCHAR( 60 ) NOT NULL ,
`address` VARCHAR( 80 ) NOT NULL ,
`lat` FLOAT( 10, 6 ) NOT NULL ,
`lng` FLOAT( 10, 6 ) NOT NULL
) ENGINE = MYISAM ;
Mengisi Tabel
Setelah membuat tabel, saatnya mengisinya dengan data. Data sampel yang disediakan di bawah ini adalah untuk sekitar 180 pizza yang tersebar di seluruh Amerika Serikat. Di phpMyAdmin, Anda dapat menggunakan tab IMPORT untuk mengimpor berbagai format file, termasuk CSV (nilai yang dipisahkan koma). Microsoft Excel dan Google Spreadsheets sama-sama mengekspor ke format CSV, sehingga Anda dapat dengan mudah mentransfer data dari spreadsheet ke tabel MySQL melalui mengekspor / mengimpor file CSV.
INSERT INTO `markers` (`name`, `address`, `lat`, `lng`) VALUES ('Frankie Johnnie & Luigo Too','939 W El Camino Real, Mountain View, CA','37.386339','-122.085823');
INSERT INTO `markers` (`name`, `address`, `lat`, `lng`) VALUES ('Amici\'s East Coast Pizzeria','790 Castro St, Mountain View, CA','37.38714','-122.083235');
INSERT INTO `markers` (`name`, `address`, `lat`, `lng`) VALUES ('Kapp\'s Pizza Bar & Grill','191 Castro St, Mountain View, CA','37.393885','-122.078916');
INSERT INTO `markers` (`name`, `address`, `lat`, `lng`) VALUES ('Round Table Pizza: Mountain View','570 N Shoreline Blvd, Mountain View, CA','37.402653','-122.079354');
INSERT INTO `markers` (`name`, `address`, `lat`, `lng`) VALUES ('Tony & Alba\'s Pizza & Pasta','619 Escuela Ave, Mountain View, CA','37.394011','-122.095528');
INSERT INTO `markers` (`name`, `address`, `lat`, `lng`) VALUES ('Oregano\'s Wood-Fired Pizza','4546 El Camino Real, Los Altos, CA','37.401724','-122.114646');
Menemukan Lokasi dengan MySQL
Untuk menemukan lokasi dalam tabel marker Anda yang berada dalam jarak radius tertentu dari garis lintang / bujur, Anda dapat menggunakan pernyataan SELECT berdasarkan rumus Haversine. Formula Haversine digunakan secara umum untuk menghitung jarak lingkaran besar antara dua pasang koordinat pada sebuah bola. Penjelasan matematis yang mendalam diberikan oleh Wikipedia dan diskusi yang baik tentang rumus yang berkaitan dengan pemrograman ada di situs Movable Type.
Inilah pernyataan SQL yang akan menemukan 20 lokasi terdekat yang berada dalam radius 25 mil ke 37, -122 koordinat. Ini menghitung jarak berdasarkan garis lintang / garis bujur dari baris itu dan garis lintang / garis bujur target, dan kemudian meminta hanya baris di mana nilai jaraknya kurang dari 25, memesan seluruh kueri berdasarkan jarak, dan membatasinya hingga 20 hasil. Untuk mencari menurut kilometer bukannya mil, ganti 3959 dengan 6371.
SELECT
id,
(
3959 *
acos(cos(radians(37)) *
cos(radians(lat)) *
cos(radians(lng) -
radians(-122)) +
sin(radians(37)) *
sin(radians(lat )))
) AS distance
FROM markers
HAVING distance < 28
ORDER BY distance LIMIT 0, 20;
Yang ini adalah untuk menemukan garis lintang dan bujur dalam jarak kurang dari 28 mil.
Satu lagi adalah menemukan mereka dalam jarak antara 28 dan 29 mil:
SELECT
id,
(
3959 *
acos(cos(radians(37)) *
cos(radians(lat)) *
cos(radians(lng) -
radians(-122)) +
sin(radians(37)) *
sin(radians(lat )))
) AS distance
FROM markers
HAVING distance < 29 and distance > 28
ORDER BY distance LIMIT 0, 20;
https://developers.google.com/maps/articles/phpsqlsearch_v3#creating-the-map