Pencarian Lokasi: Alamat Tertentu vs bisnis lokal

Saya sedang membangun aplikasi lokasi untuk iOS. Saat ini saya memiliki bilah pencarian yang dapat digunakan untuk mencari bisnis lokal (misalnya pizza, pompa bensin, bank). Teks bilah pencarian ditambahkan sebagai parameter ke URL dan dimasukkan ke Yahoo Local API. Saya ingin menggunakan bilah pencarian yang sama untuk menemukan alamat tertentu juga, tapi itu bukan fungsi API. Saya pikir saya harus melakukan hal berikut:

A) Membangun beberapa fungsi yang dapat membedakan antara pencarian bisnis yang luas dan pencarian lokasi tertentu. Kirim pertanyaan bisnis ke API dan kirim pencarian alamat ke CLGeocoder.

B) Temukan API yang lebih serbaguna.

C) Lakukan hal lain yang belum saya pertimbangkan.

Saya dapat menambahkan bidang pencarian terpisah dan menggunakannya untuk pencarian alamat tetapi saya ingin tahu apakah mungkin melakukannya dari bilah pencarian yang sama. Jika ada yang bisa memberikan saran atau mengarahkan saya ke arah yang benar, saya akan sangat menghargainya. Terima kasih.


person Gabriel Ortega    schedule 10.04.2012    source sumber


Jawaban (2)


Anda mungkin akan kesulitan melakukan A karena alamat dan POI adalah string yang bentuknya cukup unik, terutama jika string tersebut dibuat oleh manusia. Saya lebih menyarankan untuk menambahkan semacam tombol yang dapat diubah oleh pengguna untuk mencari bisnis atau alamat.

Untuk B, Anda mungkin ingin melihat Google Maps API, jika itu Memenuhi kebutuhan Anda. Ini tampaknya cukup serbaguna mengenai parameter masukan.

person Matej Bukovinski    schedule 10.04.2012
comment
Maps API adalah ide yang bagus, hanya saja Anda harus menampilkan Google Map kepada pengguna sesuai dengan TOS. Hanya sesuatu yang perlu diperhatikan karena saya tidak yakin apakah Gabriel melakukan itu atau tidak. - person Matt; 10.04.2012
comment
Terima kasih atas tanggapannya. Saya telah menerapkan kelas yang menggunakan Google Maps Geocoding API. Sejauh ini ia bekerja dengan cukup baik. Saya hanya mencoba mencari cara untuk mengurutkan hasilnya sehingga saya hanya menampilkan yang paling dekat dengan lokasi pengguna. Misalnya, 22 Churchill Drive memberi saya hasil dari Arkansas hingga Massachusetts. Saya memahami bahwa geocoding akan lebih akurat dengan semakin banyak informasi yang Anda berikan, namun menurut saya tidak perlu memberikan hasil yang jaraknya lebih dari 1000 mil. - person Gabriel Ortega; 13.04.2012
comment
Oh ngomong-ngomong, Matej. Terima kasih atas ide peralihannya. Itu jelas merupakan sebuah pilihan jika saya terlalu terpaku pada keseluruhan bilah pencarian lokasi terpadu ini. - person Gabriel Ortega; 13.04.2012

+1 untuk pertanyaan menarik. Ini jelas merupakan pertanyaan desain pemrograman, tetapi hampir merupakan pertanyaan UX juga.

Saya pikir Anda bisa melakukan semuanya dalam satu bidang. Saya bekerja untuk SmartyStreets tempat kami mengurai dan memproses alamat. Berikut beberapa hal yang saya pelajari dari pengalaman, terkait dengan pertanyaan Anda:

  • Jangan gunakan ekspresi reguler untuk mengurai atau menentukan alamat. Itu terlalu rumit. Alamat datang dalam berbagai bentuk, seperti kata Matej. "String bentuk bebas" bisa berupa apa saja. Godaannya adalah menggunakan regex, namun ada cara yang lebih cerdas.
  • Sangat sedikit API lokasi/alamat yang benar-benar memberikan nilai dan hasil yang Anda cari, setidaknya menurut TOS mereka. Misalnya, Google, Yahoo!, dan lainnya memerlukan peta untuk ditampilkan dan tidak mengizinkan pembuatan kueri otomatis (misalnya, tidak ada pengguna yang secara aktif memulai permintaan).
  • Kebanyakan API hanya melakukan perkiraan alamat, bukan verifikasi alamat. Jadi, hasil yang Anda dapatkan adalah yang terbaik, tebak saja. Google pandai menebak, tetapi hasilnya mungkin tampak sah, padahal sebenarnya tidak. Saya sudah sering melihat ini dan itu membuat saya tergiur. API geolokasi/geocoding mempunyai tempatnya masing-masing, namun juga mempunyai keterbatasan.

Jadi, contohnya: pengguna mengetikkan POI atau alamat ke dalam kolom teks tersebut. Anda tidak yakin yang mana atau keduanya. Dan jika Anda tahu, apakah POI atau alamatnya ada? Saya tidak tahu ada API (murah) yang melakukan keduanya sekaligus -- ada API tingkat perusahaan yang pernah saya lihat, tapi... mungkin terlalu mahal dan menghabiskan banyak uang. Inilah pendekatan yang lebih mudah yang akan saya coba.

  1. Temukan layanan Bersertifikat CASS untuk memeriksa alamat. LiveAddress API SmartyStreets (demo berbeda di beranda) adalah salah satu layanan tersebut (murah, bahkan gratis untuk penggunaan volume rendah). Meskipun API tidak secara langsung menguraikan alamat satu baris, sangat mudah untuk menggunakan algoritme ini (dengan contoh yang berfungsi di sini) -- bahkan lebih mudah di Objective C karena Anda tidak perlu mengotak-atik JSONP seperti yang Anda lakukan di Javascript.

  2. Jika LiveAddress atau layanan yang setara (saya mendorong Anda untuk melakukan riset dan beri tahu saya jika Anda memiliki pertanyaan lebih lanjut -- saya akan dengan senang hati membantu), memberikan hasil apa pun, string tersebut adalah alamat. Beberapa layanan Bersertifikat CASS, berhati-hatilah, juga akan mengembalikan alamat atau tebakan palsu, dan sulit/tidak mungkin untuk membedakan keduanya. LiveAddress hanya akan mengembalikan alamat valid. Jadi jika LiveAddress mengembalikan hasil (biasanya yang pertama, menggunakan algoritme di atas), string tersebut pasti merupakan alamat, atau POI yang diikuti dengan alamat. (Dan ya, LiveAddress akan melakukan geocode pada setiap alamat.)

  3. Jika tidak ada hasil yang dikembalikan, maka itu adalah POI/nama bisnis. Jika aplikasi Anda mematuhi TOS Google atau Yahoo, tanyakan API mereka karena mereka pandai menebak dan menemukan lebih banyak kecocokan umum pada hal-hal seperti itu.

Bahkan opsi lainnya adalah menanyakan Maps API terlebih dahulu, lalu, dengan alamat (jika ada) yang dikembalikan, kirimkan melalui LiveAddress untuk memastikan keberadaannya dan mempelajarinya lebih lanjut.

Harapan itu mengarahkan Anda ke arah yang benar (tidak ada permainan kata-kata yang dimaksudkan). Beri tahu saya jika Anda ingin klarifikasi tentang sesuatu atau memiliki pertanyaan terkait alamat lainnya.

person Matt    schedule 10.04.2012
comment
Terima kasih atas tanggapannya. Informasi bagus di sini. Kursus yang menurut saya akan saya ikuti adalah menggunakan Geocoding API (Google Maps) terlebih dahulu. Jika itu tidak membuahkan hasil apa pun, saya dapat mengirimkan kueri yang sama ke API bisnis lokal (Yahoo Lokal atau Google Places). Jadi misalnya, jika pengguna mengetikkan pizza, hal tersebut seharusnya gagal dalam penelusuran geocoding dan kemudian diteruskan ke API bisnis dan membuahkan hasil. - person Gabriel Ortega; 13.04.2012
comment
Oke. Itu mungkin efektif. Jika Anda berpikir demikian, posting hasil Anda di sini setelah Anda menerapkannya dan mencobanya; Saya penasaran untuk melihat seberapa baik kerjanya. Namun perlu diingat bahwa jika pengguna mengetikkan alamat, Anda tidak akan benar-benar yakin apakah alamat tersebut benar-benar ada, sehingga koordinatnya hilang. - person Matt; 14.04.2012
comment
Di situlah letak masalahnya. Saya sangat bergantung pada tebakan terbaik dari API. Saya baru saja menyelesaikan tes dan sejauh ini berhasil. Saya memiliki kelas untuk pencarian alamat dan pencarian bisnis lokal. Jika pencarian alamat gagal, string kueri akan diteruskan ke pencarian bisnis lokal. Sekarang saya yakin itu bukan bukti penuh. Jika Anda mencari bandara JFK, Anda akan mendapatkan bandara dan segala sesuatu yang menyertainya (tempat parkir JFK, antar-jemput JFK, roti daging sapi JFK). Saya akan terus memikirkannya, tetapi saya merasa saya mungkin akan beralih ke saklar yang disarankan Matej. - person Gabriel Ortega; 14.04.2012