Saya bekerja di situs direktori bisnis lokal yang akan menggunakan jenis posting khusus untuk entri bisnis. Salah satu bidangnya adalah "Kode Pos." Bagaimana cara saya mengatur pencarian berdasarkan lokasi?
Saya ingin pengunjung dapat memasukkan kode pos mereka dan memilih kategori dan menunjukkan semua bisnis dalam radius tertentu, atau semua bisnis yang dipesan berdasarkan jarak. Saya melihat beberapa plugin yang mengklaim melakukan ini tetapi tidak mendukung WordPress 3.0. Ada saran?
Jawaban:
Saya akan memodifikasi jawaban dari gabrielk dan posting blog yang ditautkan dengan menggunakan indeks basis data dan meminimalkan jumlah perhitungan jarak aktual .
Jika Anda tahu koordinat pengguna dan Anda tahu jarak maksimum (katakanlah 10km), Anda bisa menggambar kotak pembatas 20km x 20km dengan lokasi saat ini di tengah. Dapatkan koordinat terikat ini dan kueri hanya menyimpan di antara garis lintang dan bujur ini . Jangan gunakan fungsi trigonometri dalam kueri basis data Anda, karena ini akan mencegah indeks digunakan. (Jadi Anda mungkin mendapatkan toko yang berjarak 12 km dari Anda jika berada di sudut timur laut kotak pembatas, tetapi kami membuangnya di langkah berikutnya.)
Hitung saja jarak (seperti burung terbang atau dengan arah mengemudi yang sebenarnya, seperti yang Anda inginkan) untuk beberapa toko yang dikembalikan. Ini akan secara drastis meningkatkan waktu pemrosesan jika Anda memiliki banyak toko.
Untuk pencarian terkait ( "berikan sepuluh toko terdekat" ) Anda dapat melakukan pencarian yang serupa, tetapi dengan tebakan jarak awal (jadi Anda mulai dengan area 10km kali 10km, dan jika Anda tidak memiliki cukup toko, Anda perlu memperluasnya ke 20km kali 20km dan seterusnya). Untuk jarak awal ini, tebak Anda pernah menghitung jumlah toko di seluruh area dan menggunakannya. Atau catat jumlah permintaan yang dibutuhkan dan sesuaikan dengan waktu.
Saya menambahkan contoh kode lengkap di pertanyaan terkait Mike , dan berikut ini adalah ekstensi yang memberi Anda lokasi X terdekat (cepat dan hampir tidak diuji):
sumber
Pertama, Anda membutuhkan tabel yang terlihat seperti ini:
... diisi untuk setiap kode pos. Anda dapat memperluas ini dengan menambahkan bidang kota dan negara bagian jika Anda ingin melihat ke sana.
Kemudian setiap toko dapat diberi kode pos, dan ketika Anda perlu menghitung jarak Anda dapat bergabung dengan tabel lat / panjang ke data toko.
Kemudian Anda akan meminta tabel itu untuk mendapatkan lintang dan bujur untuk kode pos toko dan pengguna. Setelah Anda mendapatkannya, Anda dapat mengisi array Anda dan meneruskannya ke fungsi "dapatkan jarak":
Ini dimaksudkan sebagai bukti konsep, bukan kode yang sebenarnya akan saya sarankan untuk diterapkan. Jika Anda memiliki 10.000 toko, misalnya, itu akan menjadi operasi yang cukup mahal untuk menanyakan semuanya dan mengulanginya dan mengurutkannya pada setiap permintaan.
sumber
Dokumentasi MySQL juga mencakup informasi tentang ekstensi spasial. Anehnya, fungsi jarak standar () tidak tersedia, tetapi periksa halaman ini: http://dev.mysql.com/tech-resources/articles/4.1/gis-with-mysql.html untuk detail tentang cara "mengkonversi" dua POINT nilai ke LINESTRING dan kemudian menghitung panjangnya. "
Perhatikan bahwa setiap vendor cenderung menawarkan garis lintang dan bujur yang berbeda yang mewakili "centroid" dari kode pos. Perlu juga diketahui bahwa tidak ada file "batas" kode pos nyata yang ditentukan. Setiap vendor akan memiliki seperangkat batasan yang kira-kira sama dengan daftar alamat khusus yang membentuk kode pos USPS. (Misalnya, di beberapa "batas" Anda perlu memasukkan kedua sisi jalan, di sisi lain, hanya satu.) Area Tabulasi Kode ZIP (ZCTA), banyak digunakan oleh vendor, "jangan menggambarkan area pengiriman Kode ZIP secara tepat, dan tidak termasuk semua Kode ZIP yang digunakan untuk pengiriman surat " http://www.census.gov/geo/www/cob/zt_metadata.html
Banyak bisnis pusat kota akan memiliki kode pos sendiri. Anda akan ingin set data setengkap mungkin, jadi pastikan Anda menemukan daftar kode pos yang mencakup kode pos "titik" (biasanya bisnis), dan kode pos "batas".
Saya memiliki pengalaman bekerja dengan data kode pos dari http://www.semaphorecorp.com/ . Bahkan itu tidak 100% akurat. Misalnya, ketika kampus saya mengambil alamat surat dan kode pos baru, kode pos salah tempat. Yang mengatakan, itu adalah satu-satunya sumber data yang saya temukan bahwa bahkan MEMILIKI kode pos baru sama sekali, jadi segera setelah itu dibuat.
Saya punya resep di buku saya untuk mengetahui bagaimana cara memenuhi permintaan Anda ... di Drupal. Itu bergantung pada modul Google Maps Tools ( http://drupal.org/project/gmaps , jangan bingung dengan http://drupal.org/project/gmap , juga modul yang layak.) Anda mungkin menemukan beberapa sampel yang bermanfaat kode dalam modul-modul itu, meskipun tentu saja, mereka tidak akan bekerja di luar kotak di WordPress.
sumber