
Como parte de casi cualquier producto en línea, puede cumplir con una tarea que requiere el uso de un servicio particular relacionado con mapas, geocodificación, geo-posicionamiento. Personalmente, he estado trabajando en un catálogo de bienes raíces en línea durante casi 10 años, y como parte de una serie de otros proyectos, tengo experiencia en el uso de funciones específicas de diversos servicios geográficos en línea.
En este artículo, examinaré las tareas geográficas que los programadores enfrentan con mayor frecuencia, haré una breve revisión de los servicios que ofrecen soluciones para estos problemas y compartiré mi experiencia al usar estos servicios.
También cuento con la participación de comentaristas: si observa en la revisión una inexactitud en la descripción, la falta de su buen servicio o simplemente tiene algo que agregar a lo que ya escribió, escriba en los comentarios, recolectaré todo en el texto principal para que siempre tenga una buena lista de herramientas disponibles para el futuro para todas las ocasiones
Tabla de contenidos
Mostrar mapas en el sitio
Una tarea muy popular es mostrar mapas en línea en un sitio. Por ejemplo, para mostrar exactamente en qué parte del mapa se encuentra su oficina. O donde puede recoger lo que vende el autor del anuncio.
Para mostrar mapas, se utilizan dos tipos principales de API:
- API de Javascript (interactiva)
- API estática (estática)
API Javascript
Todos los servicios que desarrollé funcionan principalmente con Rusia, por lo que hablaré sobre las API que utilicé yo mismo y que son populares entre nosotros. Sé que Bing y otros proveedores de mapas tienen API, pero no los utilicé.
La API de Javascript le permite mostrar un mapa interactivo en el sitio con la capacidad de hacer zoom, mostrar marcadores, interactuar con el mapa (arrastrar marcadores, mostrar información sobre herramientas, etc.).
Javascript API Yandex.Maps
Javascript API Google Maps
API 2GIS
- Muy buenas cartas, pero no en todas partes.
- Adiós gratis
- La funcionalidad de la API es más débil que Yandex / Google, pero se puede ampliar utilizando módulos de folleto
- Pero hay mapas de piso para centros comerciales.
- api.2gis.ru/doc/maps/ru/quickstart
Mapas de Azure
Mapbox
- docs.mapbox.com/api/maps
- Lindas tarjetas para web y móvil.
- Puedo estar equivocado, pero las cartas parecen estar solo en inglés
- Para aplicaciones móviles, gratis hasta 25,000 usuarios por mes, en la web hasta 50,000 descargas por mes
API estática
La API estática se puede usar donde necesita mostrar solo una imagen de mapa, sin interactividad. Por ejemplo, desea adjuntar un mapa a un correo electrónico o permitir que el usuario le imprima instrucciones. Bueno, o su diseñador dibujó un diseño en el que se usa un mapa en lugar del fondo: cargar tarjetas JS completas para tal tarea parece redundante. Además, una imagen estática se puede usar como una vista previa para acelerar la carga de una página por parte del usuario, y al hacerla interactiva.
API estática Yandex.Maps
API estática Google maps
API estática 2GIS
Mapbox
- docs.mapbox.com/api/maps
- Puedo estar equivocado, pero las cartas parecen estar solo en inglés
- Tamaño máximo 1280x1280
- Gratis hasta 25,000 descargas de mapas por mes
Geocodificación
La geocodificación es un proceso que le permite encontrar las coordenadas de un objeto en su dirección. Bueno, o geocodificación inversa: descubra por coordenadas qué tipo de geoobjeto se encuentra allí. De hecho, todos los servicios de geocodificación funcionan con direcciones ingresadas en un formato arbitrario, al mismo tiempo que las llevan a su estándar. Por el momento no he encontrado ningún servicio de geocodificación completamente gratuito en el mercado.
Las aplicaciones típicas de la geocodificación son mostrar la dirección ingresada por el usuario en el mapa, o viceversa (al revés): el usuario coloca una marca en el mapa, debe convertirse en una dirección.
Geocoder Yandex.Map
- Hay una tarifa gratuita limitada a 25,000 solicitudes por día.
- Además del número de solicitudes, también está limitado por el acuerdo de licencia: los resultados de la codificación no se pueden guardar y usar sin una tarjeta (pero se pueden almacenar en caché), deben mostrarse solo en los mapas de Yandex y solo en el marco de los servicios públicos (accesibles para todos o con registro abierto gratuito).
- Funciona muy bien en Rusia, tanto directa como inversa.
- tech.yandex.ru/maps/geocoder
Consejos de DaData
- DaData tiene un servicio de "pistas" que le permite implementar el autocompletado de las direcciones ingresadas por el usuario.
- Incluye las funciones de un geocodificador (puede proporcionar coordenadas por dirección y dirección por coordenadas).
- Funciona solo en Rusia, el revestimiento es pobre: en millonarios al nivel del 75-95%, en promedio en Rusia alrededor del 50%
- 10,000 solicitudes por día son gratuitas, pero la oferta no permite que se use completamente en modo automático; para la geocodificación automática, debe usar el servicio de estandarización.
- dadata.ru/api/suggest/address
API de geocodificación de Google Maps
Graphhopper
Mapbox
- docs.mapbox.com/api/search
- La base débil de las calles en Rusia, al menos en Kazán, las calles en las que pruebo, no pudieron encontrar
- Gratis hasta 100,000 solicitudes por mes
OpenStreetMaps Nominatim
2GIS
- La documentación para la API de Javascript declaró la existencia de funciones de geocodificación, pero de hecho no encontré cómo usarlas en la documentación. Quizás mientras está en desarrollo.

Analizar y autocompletar direcciones
A veces es necesario dejar que el usuario ingrese una dirección en un formato aleatorio y luego convertir esta dirección en datos estructurados, por separado el nombre del país, región, ciudad, calle y número de casa. Esto es necesario para todos los servicios que funcionan con bienes raíces, es necesario determinar direcciones duplicadas, completar recibos de correo, etc.
En principio, todos los servicios de geocodificación de la lista anterior hacen frente a esta tarea sin problemas. Con la geocodificación directa, además de las coordenadas, también devuelven información estructurada sobre el geoobjeto encontrado.
Por separado, vale la pena señalar el servicio de "estandarización" de DaData: a las direcciones de Rusia devuelven mucha información útil diferente, 10 kopeks por cada dirección:
dadata.ru/api/clean/addressAdemás, también me refiero a esta sección sobre las tareas de encontrar información adicional sobre la dirección. En particular, esta determinación de a qué distrito de la ciudad pertenece la dirección especificada y la búsqueda de las estaciones de metro más cercanas son tareas importantes si buscamos anuncios por dirección.
Definición del área dentro de la ciudad.
Por el momento, he encontrado dos soluciones para determinar el área dentro de la ciudad. Ambos funcionan solo para Rusia.
El primero y más obvio es DaData. Mucho se ha escrito sobre este servicio, es realmente un buen servicio para trabajar con direcciones rusas (y esto no es un anuncio). Pruébalo tú mismo, asegúrate.
Si no desea depender de un servicio de terceros, hay otra solución que he aplicado y que sigo aplicando hasta ahora. Esta es la definición del distrito por el código de
las direcciones
OKATO . Cada dirección dentro de Rusia tiene su propio código OKATO: 11 dígitos. De estos, los primeros 5-8, dependiendo de la ciudad, indican claramente el área.
Para esas ciudades que necesito, simplemente compilé una base de datos de códigos OKATO para los distritos, obtuve algo como esta matriz:
La siguiente pregunta es cómo averiguar el código de dirección de OKATO. DaData lo devuelve como parte de sus servicios de Consejos y Normalización. Hay un sitio
okato-oktmo.rf que en la dirección muestra el código OKATO usando el mismo dadat. Nuestra tarea es encontrar independientemente el código OKATO en la dirección, independientemente de cualquier servicio.
Para hacer esto, necesitamos descargar la última
base de datos FIAS y configurar una búsqueda en ella. Ya hay un artículo en el concentrador con un ejemplo de
cómo importar la base de datos FIAS en MSSQL . En general, configura la búsqueda por FIASU, encuentra la dirección que necesita allí, encuentra su código OKATO, por el código OKATO de las listas de distritos que conoce el distrito, eso es, el problema está resuelto.
Si no desea tomar un baño de vapor con la descarga de 60 gigabytes de archivos XML a su base de datos, existe un servicio más barato, pero también menos funcional que el servicio de datos que le permite trabajar con la base de datos FIAS:
kladr-api.ru/docsBusca estaciones de metro cercanas
Una función necesaria, especialmente para los residentes de Moscú, cuando necesita encontrar las estaciones de metro más cercanas en la dirección. Para esta tarea en este momento conozco dos soluciones:
Yandex Geocoder
Primero necesitas encontrar las coordenadas de la dirección. Luego, como en la geocodificación inversa, pasamos estas coordenadas como parámetros de solicitud y el tipo del topónimo devuelto kind = metro.
Un parámetro separado establece el tamaño del área dentro de la cual es necesario buscar la estación más cercana. Empíricamente, seleccioné valores de 0.02 a 0.05 grados dependiendo de la ciudad (en Moscú, un radio de 2 kilómetros desde el metro todavía se considera distancia a pie, y en Kazán la distancia entre estaciones es de 1.5 kilómetros).
También hay un problema con este método, que a veces el metro más cercano en coordenadas no siempre es el más cercano (por ejemplo, está al otro lado del río, o algo así). Solo puede determinar el metro más cercano por accesibilidad utilizando los servicios de construcción de rutas y matrices de distancia, que se discutirán en el artículo a continuación. Para una determinación aproximada de la estación más cercana, el geocodificador Yandex es bastante adecuado y le permite realizar hasta 25,000 solicitudes por día de forma gratuita.
DaData
Sí, y DaData puede ayudar en esta tarea: dentro de las tarifas pagadas del servicio "rápido" o de "estandarización", las 3 estaciones de metro más cercanas y las distancias a ellas también se devuelven a cada dirección.
Busque organizaciones
Una tarea común si desea mostrar a sus clientes algún tipo de organización en su ciudad. Por ejemplo, vende productos con entrega y desea mostrarle a una persona todos los puntos de entrega de algún servicio en su ciudad. O puede hacer diseños para imprimir y mostrar al usuario en el mapa todas las imprentas donde puede ir a imprimir su diseño.
Yandex búsqueda por organización
- tech.yandex.ru/maps/geosearch
- Hasta 500 consultas por día son gratuitas, siempre que los resultados se muestren en un mapa público.
- Los resultados de búsqueda no se pueden guardar ni mostrar en mapas que no sean Yandex.
Google lugares api
- developers.google.com/places/web-service/usage-and-billing
- Un sistema de aranceles muy complicado, no lo entendí completamente. Quizás alguien que usó escriba los comentarios.
- Según tengo entendido, las consultas básicas son gratuitas, pero todas ext. La información (contactos, comentarios, ...) se cobra por separado.
2GIS
Se rumorea que tienen una API privada pagada para buscar organizaciones. Todavía no he logrado acceder a él, y hay bastante búsqueda de organizaciones de Yandex para nuestras tareas.
Ubicación del usuario por IP
Una tarea común en la web es comprender desde qué ciudad llegó un visitante a su sitio. Existen soluciones para esta tarea en forma de servicios en línea o soluciones independientes para aquellos que no desean depender de servicios de terceros.
Servicio en línea para determinar la ciudad por IP: aquí puedo aconsejar (para Rusia) DaData nuevamente:
dadata.ru/api/detect_address_by_ipEl límite es de 10,000 solicitudes por día. Si su asistencia excede las 10,000 entradas únicas por día, tiene sentido considerar las soluciones que están instaladas en su servidor. Puede leer más sobre ellos en
la revisión de DaData sobre cómo eligieron qué usar.
Duplicaré brevemente la información:
IpGeoBase : solía ser un buen sitio que se actualizaba diariamente y proporcionaba una base de datos de direcciones IP y sus respectivas ciudades en un formato comprensible legible por máquina que se importa fácilmente a cualquier base de datos. Desafortunadamente, dejó de actualizarse en 2017.
ipgeobase.ruSypexGeo : todavía se está actualizando, viene en forma de script php y una base de datos para este en su propio formato. Funciona rápido, determina bien
sypexgeo.net/en/downloadMaxMind ofrece descargar bases de datos gratuitas con precisión reducida y una API separada para ellas en varios lenguajes de programación. Las bases de datos más precisas están disponibles como parte de los productos pagos.
dev.maxmind.com/geoip/geoip2/geolite2Determinar la ubicación del usuario por coordenadas
La tarea es similar a la tarea de geocodificación inversa, con ligeras diferencias.
A veces necesitamos determinar la ubicación del usuario cuando conocemos sus coordenadas exactamente (por ejemplo, las obtuvimos utilizando los sensores GPS del dispositivo o la API de geolocalización en el navegador). Hay dos opciones: la geocodificación inversa devuelve el nombre del lugar donde se encuentra el usuario. Pero, ¿qué sucede si el usuario está en algún lugar de la carretera entre las ciudades, o en los suburbios o simplemente en un campo limpio y quiere ver anuncios de venta de terrenos en este campo? No siempre el geocodificador inverso hará frente a esto.
En este caso, personalmente hago esto: tengo en mi base de datos todas las coordenadas de las ciudades rusas en las que tenemos anuncios y con las que generalmente trabajamos. Y de acuerdo con las coordenadas del usuario, simplemente determino la ciudad más cercana a él de nuestra base de datos, con una simple solicitud:
ORDER BY (|lng - :lng| + |lat - :lat|) ASC LIMIT 1
Construcción de la ruta
A veces necesitas construir una ruta de un punto a otro. Por ejemplo, cree un mapa de ubicación desde la ubicación del usuario hasta su oficina. Existen soluciones pagas de Yandex y de Google: su principal diferencia es que Yandex vende una suscripción con un pago anual, y Google cobra las solicitudes por pieza y deduce dinero de la tarjeta una vez al mes durante el mes.
Google también tiene una suscripción premium, que ofrece algunas funciones adicionales (por ejemplo, aumentar el tamaño máximo de la imagen de API estática) y un depósito en los límites. También hay una solución de 2GIS: la más cara en términos de 1 ruta construida.
Las tareas de construcción de rutas se dividen en varias subtareas:
- Construir una ruta de punto a punto es comprensible
- La matriz de distancias: un servicio que le permite construir una matriz de distancias y tiempo en tránsito entre un conjunto de puntos de partida y llegada. Por ejemplo, si necesita calcular las rutas óptimas para varios correos que necesitan entregar productos de diferentes almacenes a diferentes clientes. ¿O ofrece servicios de limpieza y necesita saber qué limpiador será más conveniente desde su hogar para llegar a cada uno de los pedidos de hoy y hacer un esquema óptimo para mover los limpiadores?
- API de Isochrone: construya alrededor de un área de puntos, que se puede alcanzar al mismo tiempo. Por ejemplo, "encuentre todos los cafés a 15 minutos a pie desde la posición del usuario".
Diferentes proveedores ofrecen diferentes soluciones para todas estas tareas.
Gracias a
3aiats , se
encontró una solución gratuita de código abierto:
Graphhopper
- www.graphhopper.com/open-source
- Se instala en su servidor, usa OpenStreetMap para construir rutas, se ejecuta en Java
- Existe una API gratuita y de pago para aquellos que no desean instalar este software en su servidor.
- Hay una API para geocodificar, construir rutas, construir matrices de distancia y optimizar rutas, así como isocrona
MapBox (gracias ne_kotin )
- docs.mapbox.com/api/navigation
- Hay una API para geocodificar, construir rutas, construir matrices de distancia y optimizar rutas.
- Gratis hasta 100,000 solicitudes por mes
Yandex
Una característica común de todos los servicios de Yandex para rutas es que operan en Rusia, Abjasia, Azerbaiyán, Armenia, Bielorrusia, Georgia, Kazajstán, Kirguistán, Moldavia, Tayikistán, Turquía, Uzbekistán y Ucrania.
Existe un servicio
app.swizz.ru que utiliza la API de Yandex para crear rutas. El servicio no tiene su propia API y está experimentando problemas con los límites de Yandex, pero en esencia allí puede ver cómo funciona el generador de rutas Yandex. Gracias por el enlace
3aiatsGoogle
La principal diferencia con Yandex es el precio de pago por uso, es decir, para cada solicitud. Para volúmenes pequeños, las tarifas serán más rentables con Google, para grandes, con Yandex.
Además, Google no tiene restricciones en los países donde construyen rutas.
API de direcciones de Google
- developers.google.com/maps/documentation/directions/intro
- La tarifa es de $ 5 o $ 10 por 1000 solicitudes. 10 - si se utiliza la optimización teniendo en cuenta los embotellamientos y los puntos intermedios. 5 - si solo es una ruta entre 2 puntos.
- Por funciones, un análogo del servicio Yandex para construir rutas entre 2 puntos, pero tiene más configuraciones
- En particular, puede ofrecer varias rutas alternativas
API de matriz de distancia de Google
API de Google Roads
Un servicio único de Google que le permite trabajar con las carreteras por las que viaja su vehículo.
Vincula automáticamente los puntos de su ruta a las carreteras, muestra el mejor patrón de tráfico y toda la información sobre los tramos de carreteras que encuentra en el camino.
Sabe cómo vincular las secciones de carretera más cercanas a los puntos (por ejemplo, en una pista GPS que salta de un lado a otro para mostrar qué caminos se cruzó realmente la ruta).
Capaz de mostrar límites de velocidad en las carreteras de la ruta.
WikiRoutes
Mapas de Azure
2Gis Logistics
- logistics.2gis.ru
- Servicio de construcción de rutas.
- 5 rutas por día por 3,500 rublos por mes, listo para discutir un aumento de límite
- Por algo de dinero, hay un seguimiento del movimiento de mensajería y otras funciones adicionales
Servicios para optimizar la logística.
Como una clase separada de servicios para la construcción de rutas, vale la pena destacar las soluciones preparadas para optimizar la logística, que se cobran en función del número de correos / vehículos en la línea. De hecho, combinan herramientas de construcción de rutas y otros servicios para optimizar su logística tanto como sea posible. Estas son soluciones bastante complejas y de nicho, por lo que las combiné en una lista.
Gracias por
agregar a la lista
3aiatsConclusión
En el mundo actual, puede encontrar un servicio listo para prácticamente cualquier tarea que necesite resolver, o resolverlo utilizando una combinación de servicios de la lista anterior. La única pregunta es el costo de esta solución, cuánto será beneficioso para usted.
Muchos servicios, a medida que crece su popularidad, cambian a sistemas de monetización cada vez más estrictos, al igual que los mapas de Google, que alguna vez fueron gratuitos, se pagaron por completo, por lo que Yandex se está moviendo gradualmente hacia esto.
Hay OpenStreetMaps abiertos, que parecen hacer que resuelva todos los problemas de la lista, pero para esto necesita implementarlos usted mismo y, además de su proyecto, mantener por separado una infraestructura completa para mapas, en la medida en que sea necesario, todos deciden por sí mismos.
Probablemente, en la revisión no indiqué algunos servicios excelentes que usa, o usó los servicios de la revisión y tiene algo que agregar a lo que ya se ha escrito; escriba en los comentarios, lo agregaré al texto.