Layanan geoser web. Ikhtisar solusi modern



Sebagai bagian dari hampir semua produk online, Anda dapat memenuhi tugas yang mengharuskan penggunaan layanan tertentu yang terkait dengan peta, geocoding, geo-positioning. Secara pribadi, saya telah mengerjakan katalog real estat online selama hampir 10 tahun, dan sebagai bagian dari sejumlah proyek lain, saya memiliki pengalaman menggunakan fungsi spesifik dari berbagai layanan geografis online.

Dalam artikel ini, saya akan memeriksa tugas-tugas geografis yang paling sering dihadapi oleh para programmer, melakukan tinjauan singkat terhadap layanan yang menawarkan solusi untuk masalah ini, dan berbagi pengalaman saya dalam menggunakan layanan ini.

Saya juga mengandalkan partisipasi komentator - jika Anda melihat dalam ulasan ketidaktepatan dalam uraian, kurangnya layanan baik Anda atau Anda hanya memiliki sesuatu untuk ditambahkan pada apa yang sudah Anda tulis - tulis dalam komentar, saya akan mengumpulkan semua yang ada di teks utama sehingga saya selalu memiliki daftar alat yang baik untuk masa depan. untuk semua kesempatan.

Daftar isi




Tampilkan peta di situs


Tugas yang sangat populer adalah menampilkan peta online di sebuah situs. Misalnya, untuk menunjukkan dengan tepat di mana di peta kantor Anda berada. Atau di mana Anda dapat mengambil barang yang dijual pembuatnya.

Untuk menampilkan peta, dua jenis utama API digunakan:

  • API Javascript (interaktif)
  • API statis (statis)

API Javascript


Semua layanan yang saya kembangkan sebagian besar bekerja dengan Rusia, jadi saya akan berbicara tentang API yang saya gunakan sendiri dan yang populer dengan kami. Saya tahu bahwa bing dan penyedia peta lainnya memiliki API, tetapi saya tidak menggunakannya.

Javascript API memungkinkan Anda menampilkan peta interaktif di situs dengan kemampuan untuk memperbesar, menampilkan penanda, berinteraksi dengan peta (menyeret penanda, menampilkan tooltips, dll.).

Javascript API Yandex.Maps



API Javascript Google Maps



API 2GIS


  • Kartu yang sangat bagus, tetapi tidak di mana-mana.
  • Selamat tinggal gratis
  • Fungsionalitas API lebih lemah dari Yandex / Google, tetapi dapat diperluas menggunakan modul Leaflet
  • Tetapi ada peta lantai untuk pusat perbelanjaan
  • api.2gis.ru/doc/maps/ru/quickstart

Peta biru



Kotak Map


  • docs.mapbox.com/api/maps
  • Kartu lucu untuk web dan seluler.
  • Saya bisa saja keliru, tetapi kartunya tampaknya hanya dalam bahasa Inggris
  • Untuk aplikasi seluler, bebaskan hingga 25.000 pengguna per bulan, di web hingga 50.000 unduhan per bulan


API statis


API statis dapat digunakan di mana Anda hanya perlu menampilkan gambar peta, tanpa interaktivitas. Misalnya, Anda ingin melampirkan peta ke email, atau mengizinkan pengguna untuk mencetak petunjuk arah kepada Anda. Nah, atau desainer Anda menggambar tata letak di mana peta digunakan alih-alih latar belakang - memuat kartu JS lengkap untuk tugas seperti itu tampaknya berlebihan. Juga, gambar statis dapat digunakan sebagai pratinjau untuk mempercepat pemuatan halaman oleh pengguna - dan dengan membuatnya interaktif.

API Statis Yandex.Maps



API statis Google maps



2GIS Static API


  • Untuk beberapa alasan, situs ini terdaftar sebagai "usang"
  • Selamat tinggal gratis
  • Ukuran maksimum 1280x1280
  • Tidak ada di mana-mana
  • api.2gis.ru/doc/maps/1.0/static

Kotak Map


  • docs.mapbox.com/api/maps
  • Saya bisa saja keliru, tetapi kartunya tampaknya hanya dalam bahasa Inggris
  • Ukuran maksimum 1280x1280
  • Bebaskan hingga 25.000 unduhan peta per bulan


Geocoding


Geocoding adalah proses yang memungkinkan Anda untuk mengetahui koordinat suatu objek di alamatnya. Nah, atau balikkan geocoding - cari tahu dengan koordinat apa objek geo berada di sana. Bahkan, semua layanan geocoding bekerja dengan alamat yang dimasukkan dalam format sewenang-wenang, pada saat yang sama membawanya ke standar mereka. Saya belum menemukan layanan geocoding gratis di pasaran saat ini.

Aplikasi geocoding yang umum adalah untuk menampilkan alamat yang dimasukkan oleh pengguna di peta, atau sebaliknya (terbalik) - pengguna memberi tanda pada peta, itu harus diubah menjadi alamat.

Geocoder Yandex.Map


  • Ada tarif gratis terbatas hingga 25.000 permintaan per hari.
  • Selain jumlah permintaan, itu juga dibatasi oleh perjanjian lisensi - hasil pengkodean tidak dapat disimpan dan digunakan tanpa kartu (tetapi dapat di-cache), mereka harus ditampilkan hanya pada peta Yandex dan hanya dalam kerangka layanan publik (dapat diakses oleh semua orang atau dengan pendaftaran gratis terbuka).
  • Berfungsi bagus di Rusia, baik langsung maupun mundur.
  • tech.yandex.ru/maps/geocoder

Kiat dari DaData


  • DaData memiliki layanan "petunjuk" yang memungkinkan Anda untuk menerapkan pelengkapan otomatis dari alamat yang dimasukkan pengguna.
  • Ini termasuk fungsi geocoder (dapat memberikan koordinat berdasarkan alamat dan alamat dengan koordinat).
  • Ia hanya bekerja di Rusia, lapisannya lemah - pada jutawan pada level 75-95%, rata-rata di Rusia sekitar 50%
  • 10.000 permintaan per hari gratis, tetapi tawaran itu tidak memungkinkannya digunakan sepenuhnya dalam mode otomatis - untuk geocoding otomatis, Anda perlu menggunakan layanan Standardisasi.
  • dadata.ru/api/suggest/address

Google Maps Geocoding API




Graphhopper



Kotak Map


  • docs.mapbox.com/api/search
  • Basis jalan yang lemah di Rusia, setidaknya di Kazan, jalan-jalan yang saya uji - tidak dapat ditemukan
  • Gratis hingga 100.000 permintaan per bulan

OpenStreetMaps Nominatim



2GIS


  • Dokumentasi untuk Javascript API menyatakan keberadaan fungsi geocoding, tetapi sebenarnya saya tidak menemukan cara menggunakannya dalam dokumentasi. Mungkin saat ini sedang dikembangkan.



Mengurai dan melengkapi alamat secara otomatis


Kadang-kadang perlu untuk membiarkan pengguna memasukkan alamat dalam format acak, dan kemudian mengubah alamat ini menjadi data terstruktur - secara terpisah nama negara, wilayah, kota, jalan dan nomor rumah. Ini diperlukan untuk semua layanan yang bekerja dengan real estat, perlu untuk menentukan alamat rangkap, untuk mengisi tanda terima surat, dll.

Pada prinsipnya, semua layanan geocoding dari daftar di atas mengatasi tugas ini tanpa masalah. Dengan geocoding langsung, selain koordinat, mereka juga mengembalikan informasi terstruktur tentang objek-geo yang ditemukan.

Secara terpisah, perlu diperhatikan layanan "standardisasi" dari DaData - ke alamat dari Rusia mereka mengembalikan banyak informasi berguna yang berbeda, 10 kopeck untuk setiap alamat:
dadata.ru/api/clean/address

Selain itu, saya juga merujuk ke bagian ini tugas mencari informasi tambahan tentang alamat tersebut. Secara khusus, penentuan distrik kota mana dari alamat yang ditentukan milik dan pencarian untuk stasiun metro terdekat adalah tugas penting jika kita mencari iklan berdasarkan alamat.

Definisi wilayah dalam kota


Saat ini, saya telah menemukan dua solusi untuk menentukan area di dalam kota. Keduanya hanya bekerja untuk Rusia.

Yang pertama dan paling jelas adalah DaData. Banyak yang telah ditulis tentang layanan ini, ini benar-benar layanan yang baik untuk bekerja dengan alamat Rusia (dan ini bukan iklan). Cobalah sendiri, pastikan.

Jika Anda tidak ingin bergantung pada layanan pihak ketiga, ada solusi lain yang telah saya terapkan dan terus terapkan sejauh ini. Ini adalah definisi distrik dengan kode alamat OKATO . Setiap alamat dalam Rusia memiliki kode OKATO sendiri - 11 digit. Dari jumlah tersebut, 5-8 pertama, tergantung pada kota, jelas menunjukkan daerah tersebut.

Untuk kota-kota yang saya butuhkan, saya hanya mengumpulkan database kode OKATO untuk distrik, saya mendapatkan sesuatu seperti array ini:

Contoh Kode OKATO


Pertanyaan selanjutnya adalah bagaimana cara mengetahui kode alamat OKATO? DaData mengembalikannya sebagai bagian dari layanan Tips dan Standardisasi. Ada situs okato-oktmo.rf yang di alamatnya menunjukkan kode OKATO menggunakan dadat yang sama. Tugas kami adalah secara independen menemukan kode OKATO di alamat, terlepas dari layanan apa pun.

Untuk melakukan ini, kita perlu mengunduh basis data FIAS terbaru dan mengatur pencarian di sana. Sudah ada artikel di hub dengan contoh tentang cara mengimpor basis data FIAS di MSSQL . Secara umum, Anda mengonfigurasikan pencarian dengan FIASU, temukan alamat yang Anda butuhkan di sana, cari tahu kode OKATO-nya, dengan kode OKATO dari daftar distrik yang Anda kenal distrik - itu saja, masalahnya selesai.

Jika Anda tidak ingin mandi uap dengan mengunduh 60 gigabytes file XML ke basis data Anda, ada yang lebih murah, tetapi juga kurang berfungsi dibandingkan layanan dadata yang memungkinkan Anda bekerja dengan basis data FIAS:
kladr-api.ru/docs

Cari stasiun metro terdekat


Fungsi yang diperlukan, terutama bagi penduduk Moskow, ketika Anda perlu menemukan stasiun metro terdekat di alamat. Untuk tugas ini saat ini saya tahu dua solusi:

Yandex Geocoder


Pertama, Anda perlu mengetahui koordinat alamat. Kemudian, seperti dalam geocoding terbalik, kami meneruskan koordinat ini sebagai parameter permintaan dan jenis toponim yang dikembalikan kind = metro.
Parameter terpisah menetapkan ukuran area di mana perlu untuk mencari stasiun terdekat. Secara empiris, saya memilih nilai dari 0,02 hingga 0,05 derajat tergantung pada kota (di Moskow, radius 2 kilometer dari metro masih dianggap jarak berjalan kaki, dan di Kazan jarak antara stasiun adalah 1,5 kilometer).

Ada juga masalah dengan metode ini, bahwa kadang-kadang metro terdekat dalam koordinat tidak selalu yang terdekat sebenarnya (misalnya, itu di sisi lain sungai, atau sesuatu seperti itu). Anda hanya dapat menentukan metro terdekat dengan aksesibilitas menggunakan layanan membangun rute dan matriks jarak, yang akan dibahas dalam artikel di bawah ini. Untuk penentuan kasar dari stasiun terdekat - geocoder Yandex sangat cocok, dan memungkinkan Anda untuk melakukan hingga 25.000 permintaan per hari secara gratis.

DaData


Ya, dan DaData dapat membantu dalam tugas ini - sebagai bagian dari tarif berbayar dari layanan "prompt" atau "standardisasi", 3 stasiun metro terdekat dan jarak ke sana juga dikembalikan ke setiap alamat.

Cari organisasi


Tugas umum jika Anda ingin menunjukkan kepada pelanggan Anda semacam organisasi di kotanya. Misalnya, Anda menjual barang dengan pengiriman, dan Anda ingin menunjukkan kepada seseorang semua poin pengiriman beberapa layanan di kotanya. Atau Anda membuat tata letak untuk dicetak, dan menunjukkan kepada pengguna di peta semua rumah percetakan tempat ia bisa pergi untuk mencetak tata letak Anda.

Pencarian Yandex oleh organisasi


  • tech.yandex.ru/maps/geosearch
  • Hingga 500 pertanyaan per hari gratis, asalkan hasilnya ditampilkan pada peta publik.
  • Hasil pencarian tidak dapat disimpan atau ditampilkan pada peta selain Yandex.

Google menempatkan api


  • developers.google.com/places/web-service/usage-and-billing
  • Sistem tarif yang sangat rumit, saya tidak mengerti sepenuhnya. Mungkin seseorang yang menggunakan akan menulis di komentar.
  • Seperti yang saya pahami, permintaan dasar gratis, tetapi semua ext. informasi (kontak, ulasan, ...) dibebankan secara terpisah.

2GIS


Rumor mengatakan bahwa mereka memiliki API pribadi berbayar untuk organisasi pencarian. Saya belum berhasil mendapatkan akses ke sana, dan ada cukup pencarian organisasi dari Yandex untuk tugas kami.

Lokasi pengguna dengan IP


Tugas umum di web adalah memahami dari kota mana pengunjung datang ke situs Anda. Ada solusi untuk tugas ini dalam bentuk layanan online atau solusi yang berdiri sendiri untuk mereka yang tidak ingin bergantung pada layanan pihak ketiga.

Layanan online untuk menentukan kota melalui IP - di sini saya dapat memberi saran (untuk Rusia) DaData lagi: dadata.ru/api/detect_address_by_ip
Batasnya adalah 10.000 permintaan per hari. Jika kehadiran Anda melebihi 10.000 entri unik per hari, masuk akal untuk mempertimbangkan solusi yang diinstal pada server Anda. Anda dapat membaca lebih lanjut tentang mereka dalam ulasan DaData tentang bagaimana mereka memilih apa yang akan digunakan.

Saya akan menggandakan informasi tersebut secara singkat:
IpGeoBase - dulunya adalah situs yang bagus yang diperbarui setiap hari dan menyediakan basis data alamat ip dan kota-kota mereka masing-masing dalam format yang dapat dibaca mesin yang mudah dimengerti yang mudah diimpor ke dalam basis data apa pun. Sayangnya, itu berhenti memperbarui pada 2017.
ipgeobase.ru

SypexGeo - masih diperbarui, datang dalam bentuk skrip php dan database untuk itu dalam format sendiri. Bekerja cepat, sangat baik
sypexgeo.net/en/download

MaxMind menawarkan untuk mengunduh basis data gratis dengan akurasi rendah dan API terpisah untuk mereka dalam berbagai bahasa pemrograman. Basis data yang lebih akurat tersedia sebagai bagian dari produk berbayar.
dev.maxmind.com/geoip/geoip2/geolite2

Menentukan lokasi pengguna berdasarkan koordinat


Tugas ini mirip dengan tugas geocoding terbalik, dengan sedikit perbedaan.

Terkadang kita perlu menentukan lokasi pengguna ketika kita tahu koordinatnya dengan tepat (misalnya, kita mendapatkannya menggunakan sensor GPS perangkat atau Geolocation API di browser). Ada dua opsi - geocoding terbalik mengembalikan nama tempat di mana pengguna berada. Tetapi apa yang terjadi jika pengguna berada di suatu tempat di jalan raya antara kota-kota, atau di pinggiran kota atau hanya di bidang yang bersih dan ingin melihat iklan untuk penjualan tanah di bidang ini? Tidak selalu geocoder terbalik akan mengatasi ini.

Dalam hal ini, saya secara pribadi melakukan ini - saya memiliki dalam database saya semua koordinat kota-kota Rusia di mana kami memiliki iklan dan dengan yang kami biasanya bekerja. Dan menurut koordinat pengguna, saya cukup menentukan kota yang paling dekat dengannya dari database kami, dengan permintaan sederhana:

ORDER BY (|lng - :lng| + |lat - :lat|) ASC LIMIT 1 


Rute pembangunan


Terkadang Anda perlu membangun rute dari satu titik ke titik lainnya. Misalnya, buat peta lokasi dari lokasi pengguna ke kantor Anda. Ada solusi berbayar dari Yandex dan dari Google - perbedaan utama mereka adalah Yandex menjual langganan dengan pembayaran tahunan, dan Google menagih permintaan berdasarkan bagian dan mengurangi uang dari kartu sebulan sekali untuk bulan itu.
Google juga memiliki langganan premium, yang memberikan beberapa fungsi tambahan (misalnya, meningkatkan ukuran maksimum gambar API Statis) dan setoran sesuai batas. Ada juga solusi dari 2GIS - yang paling mahal dalam hal 1 rute yang dibangun.

Tugas membangun rute dibagi menjadi beberapa subtugas:
  1. Membangun rute dari titik ke titik bisa dimengerti
  2. Matriks jarak adalah layanan yang memungkinkan Anda untuk membangun matriks jarak dan waktu transit antara sejumlah titik keberangkatan dan kedatangan. Misalnya, jika Anda perlu menghitung rute optimal untuk beberapa kurir yang perlu mengirimkan barang dari gudang yang berbeda ke pelanggan yang berbeda. Atau apakah Anda menawarkan layanan pembersihan dan Anda perlu mencari tahu pembersih mana yang akan lebih nyaman dari rumah untuk sampai ke setiap pesanan hari ini dan membuat skema optimal untuk memindahkan pembersih.
  3. Isochrone API - membangun di sekitar area titik, yang dapat dijangkau dalam waktu yang bersamaan. Misalnya, "temukan semua kafe dalam jarak 15 menit berjalan kaki dari posisi pengguna."

Penyedia berbeda menawarkan solusi berbeda untuk semua tugas ini.

Berkat 3aiats , solusi Open Source gratis ditemukan -

Graphhopper


  • www.graphhopper.com/open-source
  • Instal di server Anda, gunakan OpenStreetMap untuk membangun rute, berjalan di Jawa
  • Ada API gratis dan berbayar untuk mereka yang tidak ingin menginstal perangkat lunak ini di server mereka.
  • Ada API untuk geocoding, membangun rute, membangun jarak matriks dan mengoptimalkan rute, serta isochrone


MapBox (terima kasih ne_kotin )


  • docs.mapbox.com/api/navigation
  • Ada API untuk geocoding, membangun rute, membangun matriks jarak dan mengoptimalkan rute.
  • Gratis hingga 100.000 permintaan per bulan


Yandex


Fitur umum dari semua layanan Yandex untuk rute adalah mereka beroperasi di Rusia, Abkhazia, Azerbaijan, Armenia, Belarus, Georgia, Kazakhstan, Kirgistan, Moldova, Tajikistan, Turki, Uzbekistan, dan Ukraina.

Ada layanan app.swizz.ru yang menggunakan Yandex API untuk membangun rute. Layanan ini tidak memiliki API sendiri, dan mengalami masalah dengan batasan dari Yandex, tetapi pada intinya di sana Anda dapat melihat cara kerja pembuat rute Yandex. Terima kasih atas tautan 3aiats

Google


Perbedaan utama dari Yandex adalah harga Pay-as-you-go, yaitu untuk setiap permintaan. Untuk volume kecil, tarif akan lebih menguntungkan dengan Google, untuk besar - dengan Yandex.
Juga, Google tidak memiliki batasan pada negara tempat mereka membangun rute.

Google arah api


  • developers.google.com/maps/documentation/directions/intro
  • Tarif adalah $ 5 atau $ 10 per 1000 permintaan. 10 - jika optimasi digunakan dengan memperhitungkan kemacetan lalu lintas dan titik jalan tengah. 5 - jika hanya rute antara 2 titik.
  • Secara fungsi, analog dari layanan Yandex untuk membangun rute antara 2 titik, tetapi memiliki lebih banyak pengaturan
  • Secara khusus, ia mampu menawarkan beberapa rute alternatif


Google Distance Matrix API




API Google Roads


Layanan Google unik yang memungkinkan Anda untuk bekerja dengan jalan-jalan di mana kendaraan Anda bepergian.
Secara otomatis menghubungkan titik-titik rute Anda ke jalan, menunjukkan pola lalu lintas terbaik dan semua informasi tentang bagian jalan yang Anda temui di jalan.
Ia tahu bagaimana cara mengikat bagian jalan terdekat ke titik-titik (misalnya, pada trek GPS yang melompat bolak-balik untuk menunjukkan jalan mana yang dilintasi rute sebenarnya).
Mampu menunjukkan batas kecepatan di jalan-jalan di rute.



WikiRoutes




Peta biru




2Gis Logistik


  • logistik.2gis.ru
  • Layanan untuk membangun rute
  • 5 rute per hari untuk 3.500 rubel per bulan, siap untuk membahas kenaikan batas
  • Untuk sejumlah uang, ada pelacakan pergerakan kurir dan fungsi tambahan lainnya


Layanan untuk mengoptimalkan logistik


Sebagai kelas layanan terpisah untuk membangun rute, perlu menyoroti solusi yang sudah jadi untuk mengoptimalkan logistik, yang dibebankan berdasarkan jumlah kurir / kendaraan di jalur tersebut. Bahkan, mereka menggabungkan alat pembangun rute dan layanan lainnya untuk mengoptimalkan logistik Anda sebanyak mungkin. Ini adalah solusi yang cukup kompleks dan khusus, jadi saya menggabungkannya ke dalam satu daftar.
Terima kasih telah menambahkan ke daftar 3aiats


Kesimpulan


Di dunia saat ini, Anda dapat menemukan layanan siap pakai untuk hampir semua tugas yang perlu Anda selesaikan, atau menyelesaikannya menggunakan kombinasi layanan dari daftar di atas. Satu-satunya pertanyaan adalah biaya solusi ini, seberapa besar manfaatnya bagi Anda.

Banyak layanan, seiring dengan meningkatnya popularitas mereka, beralih ke sistem monetisasi yang lebih keras - sama seperti peta Google yang dulu gratis menjadi sepenuhnya dibayar, sehingga Yandex secara bertahap bergerak ke arah ini.

Ada OpenStreetMaps terbuka, yang tampaknya membuat Anda menyelesaikan semua masalah dari daftar, tetapi untuk ini Anda perlu menggunakan sendiri, dan di samping proyek Anda, secara terpisah memelihara seluruh infrastruktur untuk peta - sejauh yang diperlukan, semua orang memutuskan sendiri.

Mungkin, dalam ulasan saya tidak menunjukkan beberapa layanan terbaik yang Anda gunakan, atau Anda menggunakan layanan dari ulasan dan Anda memiliki sesuatu untuk ditambahkan ke apa yang sudah ditulis - tulis di komentar, saya akan menambahkan ke teks.

Source: https://habr.com/ru/post/id462011/


All Articles