Misalnya, katakan saya punya tabel:
Business(BusinessID, Lattitude, Longitude)
Semua diindeks tentu saja. Juga ada 1 juta catatan
Katakanlah saya ingin mencari bisnis yang paling dekat dengan 106,5, misalnya, bagaimana saya melakukannya?
Jika aku melakukan
SELECT *
FROM Business
WHERE (Some formula to compute distance here) < 2000
misalnya, atau jika saya lakukan
SELECT *
FROM Business
TOP 20
Secara teori, komputer harus menghitung jarak untuk semua biz sementara dalam praktiknya hanya mereka yang memiliki lattitude dan bujur dalam rentang tertentu yang harus dihitung.
Jadi bagaimana saya bisa melakukan apa yang saya inginkan di PhP, atau SQL, misalnya?
Saya bersyukur dengan jawabannya sejauh ini. Saya menggunakan mysql dan mereka tidak memiliki sesuatu yang lebih efisien daripada solusi yang jelas. MySQL spasial juga tidak memiliki fungsi jarak komputasi.
sumber
(Pengungkapan: Saya seorang pria Microsoft SQL Server, jadi jawaban saya dipengaruhi oleh hal itu.)
Untuk benar-benar melakukannya secara efisien, ada dua hal yang Anda inginkan: caching dan dukungan data spasial asli. Dukungan data spasial memungkinkan Anda menyimpan data geografi dan geometri secara langsung dalam database tanpa melakukan perhitungan intensif / mahal dengan cepat, dan memungkinkan Anda membuat indeks untuk menemukan titik terdekat terdekat dengan lokasi Anda saat ini (atau rute yang paling efisien atau apa pun).
Caching itu penting jika Anda ingin skala, titik. Permintaan tercepat adalah yang Anda tidak pernah buat. Setiap kali seorang pengguna menanyakan hal-hal terdekat dengannya, Anda menyimpan lokasinya dan hasilnya disetel dalam cache seperti Redis atau memcached selama beberapa jam. Lokasi bisnis tidak akan berubah selama 4 jam - well, mereka mungkin jika seseorang mengedit bisnis, tetapi Anda tidak perlu itu harus segera diperbarui di semua set hasil.
sumber
Yelp kemungkinan menggunakan SIG
PostgreSQL memiliki implementasi referensi untuk GIS dengan PostGIS . Yelp mungkin menggunakan MySQL yang lebih rendah dalam segala hal . Dalam hal sesuatu seperti Yelp, mereka hampir pasti menyimpan koordinat untuk,
Koordinat tersebut hampir pasti dalam WGS84, dan disimpan sebagai tipe Geografi. Dalam PostgreSQL, dan PostGIS akan terlihat seperti ini,
Mereka akan mengisi tabel itu. Kemudian mereka mengambil koordinat WGS84 dari ponsel Anda dan menghasilkan kueri, seperti ini dengan SQL Alchemy (dalam kasus Yelp),
Untuk informasi lebih lanjut lihat tata ruang kami , dan lihat Sistem Informasi Geografis @ StackExchange
sumber