Hola a todos! Estamos desarrollando
Okdesk , un servicio de asistencia basado en la nube para el servicio posventa para clientes de b2b. Entre los usuarios de nuestro producto se encuentran los centros centrales de calefacción y automatización para cajas registradoras, integradores para la automatización del comercio, servicios operativos de redes minoristas, empresas que prestan servicios a bienes raíces comerciales y muchas otras empresas de servicios. La característica específica del servicio en tales empresas es una gran cantidad de trabajo "en el campo": trabajo con equipos, mantenimiento de infraestructura, trabajos de mantenimiento programado; todo esto requiere la presencia física de un especialista en la instalación. Esta circunstancia impone una serie de requisitos adicionales para la solución de Helpdesk, a saber: la estación de trabajo móvil del ingeniero y la visualización del trabajo planificado en el mapa con la visualización de los empleados más cercanos. La aplicación móvil Okdesk para ingenieros (para iOS y Android) apareció hace mucho tiempo y continuamos desarrollándola activamente. Pero la visualización de las aplicaciones y los empleados más cercanos en el mapa que lanzamos el otro día.

Pero el artículo no se centrará en la nueva funcionalidad: los interesados pueden obtener una cuenta de prueba gratuita de 14 días en el
sitio y conocer el sistema por su cuenta. Se tratará de la elección de servicios de mapeo para la implementación de la funcionalidad y qué requisitos del producto se les deben presentar. Si para su proyecto la tarea de elegir soluciones para módulos cartográficos es relevante, bienvenido a cat.
Problemas y criterios de selección de decisiones
Entonces, ¿qué queremos? Queremos transferir la dirección al servicio de mapas y obtener la visualización de esta dirección en el mapa. Pero no funciona así. Solo se pueden mostrar las coordenadas en el mapa. Por lo tanto, primero debe traducir la representación de cadena de la dirección en la coordenada. En la jerga SIG, esto se llama "geocodificación".
Como hacerlo Aquí se debe hacer una pequeña digresión. El hecho es que en los detalles del servicio b2b, las solicitudes de servicio están vinculadas a direcciones prefijadas (objetos de servicio). Una aplicación no puede tener una dirección arbitraria y previamente desconocida. Todas las direcciones se fijan al final de un contrato de servicio, y la adición de nuevas direcciones no ocurre repentinamente en el proceso de nuevas solicitudes. Por lo tanto, la opción podría ser adecuada para nosotros, cuando el administrador, al ingresar la dirección en la base de datos, mira las coordenadas de la estructura correspondiente en los mapas públicos de Yandex y las ingresa manualmente en la tarjeta del objeto de servicio:

Pero este enfoque no nos causó entusiasmo: el usuario se sentiría incómodo (aunque, repito, en nuestro caso sería una operación única cuando el objeto de servicio se inserta en el sistema). Y decidimos buscar una forma de completar automáticamente las coordenadas en la dirección. Existen tales servicios, solo queda elegir. Y para esto necesita establecer los criterios de selección. Procedimos de los siguientes requisitos:
- La geocodificación debería funcionar en las direcciones de Rusia y la antigua URSS de habla rusa (el principal mercado de Okdesk hoy). Sería ideal encontrar un único servicio de geocodificación que funcione bien en todo el mundo, pero mirando hacia el futuro, diré que no lo encontramos;
- La geocodificación debería proporcionar la capacidad de almacenar coordenadas en nuestra base de datos sin ninguna restricción. No queremos realizar geocodificación cada vez que necesitemos mostrar esta dirección en el mapa (este requisito puede parecer extraño, pero no todos los servicios lo permiten);
- Costo razonable y términos de uso (la geocodificación es una de las funciones auxiliares de Okdesk, y hoy no estamos listos para pagar cientos de miles de rublos al año por ello);
- La geocodificación debe ofrecer sugerencias al ingresar una dirección (cuando un usuario ingresa caracteres de dirección, al usuario se le ofrecen dinámicamente opciones para la selección correspondiente a los caracteres ingresados):

Cuando las coordenadas de la dirección ya se conocen, se pueden mostrar en el mapa. Teníamos los requisitos mínimos para un servicio de mapas):
- La relevancia de la información en el mapa;
- Costo razonable y términos de uso.
Entonces, decidimos qué herramientas necesitamos y con qué criterios las elegiremos. Es hora de analizar los servicios disponibles y elegir la configuración adecuada para resolver el problema.
Candidatos
Para seleccionar una solución, identificamos una lista de posibles candidatos. Se convirtieron en:
- Servicio dadata.ru (geocodificación);
- Geoservicios 2GIS (geocodificación y mapas);
- Servicios geográficos de Google (geocodificación y mapas);
- Servicios geográficos de Yandex (geocodificación y mapas);
- Servicios del proyecto OpenStreetMaps (geocodificación y mapas).
Selección de geocodificación
Dadata.ru
Dadata.ru tiene muchos servicios útiles para trabajar con datos. En nuestro caso, estamos hablando del servicio
"Consejos en la dirección" . Dadata tiene muchas ventajas. Las sugerencias funcionan "fuera de la caja" y están técnicamente integradas en productos de terceros. No solo las coordenadas, sino también otra información se devuelve a la dirección (en nuestro caso esto no es relevante, pero puede ser útil para alguien). Los datos son "frescos" y pueden almacenarse en casa. Hay una tarifa gratuita, que se limita a 10,000 solicitudes por día, pero la tarifa pagada tiene un precio más que asequible (de 7,000 rublos por año para organizaciones y 5,000 rublos por año para individuos).
Pero hay un inconveniente: el servicio solo funciona en direcciones rusas.
Geoservicios 2GIS
2GIS tiene una gran cantidad de geoservicios de referencia, y la geocodificación es uno de ellos. Según datos oficiales, los servicios geográficos operan en 370 ciudades en 9 países del mundo. Esto brinda una buena (pero peor que Dadata) cobertura para Rusia (buscamos selectivamente, en ciudades de 100k habitantes todo está bien, pero en ciudades más pequeñas, por 50k residentes, más a menudo hay detalles solo en la calle) y una cobertura bastante débil para otros. países de la antigua URSS de habla rusa (por ejemplo, la relativamente grande ciudad de Ekibastuz en Kazajstán, con más de 130,000 residentes, falta en el directorio 2GIS). Fuera de la ex URSS, el servicio es puntual.
Hay desventajas significativas. En primer lugar, hay una prohibición de almacenar los datos recibidos. Es decir siempre que sea necesario, muestre la dirección en el mapa, deberá hacer una solicitud de coordenadas. Tampoco hay una tarifa gratuita en el servicio: el paquete mínimo cuesta 5000 rublos por mes e incluye 5000 solicitudes a la API de geocodificación (es decir, para un rublo por solicitud). Con un aumento en el número de solicitudes, el costo por 1 solicitud disminuye. Por ejemplo, si realiza más de 5,000,000 solicitudes por mes, el costo de una solicitud se reducirá a 5 kopeks. Curiosamente, una solicitud se considera una solicitud de sugerencias al ingresar una dirección, y una solicitud de las coordenadas de una dirección al elegir entre sugerencias (es decir, el número mínimo de solicitudes para obtener coordenadas en una dirección es de 2 piezas). Junto con el hecho de que los datos de geocodificación no se pueden almacenar en casa y cada vez que dibuja un objeto en el mapa, debe realizar una solicitud de geocodificación, el uso de geocodificación de 2GIS resultará en una cantidad significativa en nuestro caso.
Sí, además de esto, también hay una "tarifa de entrada", una tarifa única de 15,000 rublos cuando se conecta. Parece una especie de travesura :)
(La información sobre el costo es relevante para el primer semestre de 2019, pero no creo que todo haya cambiado drásticamente desde nuestra inmersión en las posibilidades y condiciones del servicio).
Google Geo Services
Los servicios geográficos de Google se fusionan bajo la marca
Google Maps Platform . Entre ellos también hay geocodificación con pistas. El sitio reclama cobertura en el 99% de las direcciones de nuestro planeta. No verificamos el 99%, pero solo verificamos Rusia. Y, les digo, la calidad y relevancia de los datos sobre Rusia deja mucho que desear. Por ejemplo, según Google, el complejo residencial donde vivo no existe (Moscú, más de 10 millones de habitantes), aunque las primeras casas fueron encargadas hace más de 3 años. Pero el "complejo residencial" en el que nací y crecí (Penza, más de 500 mil habitantes) todavía existe, aunque en realidad ya ha sido enviado a demolición durante 4 años. Como una pequeña excusa para Google Maps Platform, puede agregar que los datos en los panoramas son mucho más relevantes: tienen mi hogar actual y mi hogar "padre" se ve así:

Esto podría finalizar la revisión de geocodificación de Google; con la cobertura y relevancia descritas, no es aplicable para nuestros propósitos. Pero, para ser sincero, comenzamos el estudio del servicio desde el otro extremo: con condiciones y precios. Por lo tanto, escribiremos sobre ellos de todos modos.
Entonces, las condiciones son bastante humanas. Todas las solicitudes se facturan: de 4 a 5 dólares por cada 1000 solicitudes de geocodificación, y las propinas se facturan por separado: 2,83 dólares por cada 1000 solicitudes. Además, Google cobra mensualmente 200 dólares virtuales a la cuenta, que se pueden usar para pagar los servicios de la plataforma.
Google incluso le permite guardar los resultados de la geocodificación en casa. Pero solo puede mostrarlos en un mapa si ese mapa es Google Maps, como se indica explícitamente en la primera sección del documento de
Políticas de Geocoding API :
Visualización de resultados de la API de geocodificación
Puede mostrar los resultados de la API de geocodificación en un mapa de Google o sin un mapa. Si desea mostrar los resultados de la API de geocodificación en un mapa, estos resultados deben mostrarse en un mapa de Google. Está prohibido utilizar datos de la API de geocodificación en un mapa que no sea un mapa de Google.
Es una pena que no todos los colegas en el proceso de leer la decisión lean información legal. Con este enfoque, puede sustituir fácilmente a sus clientes, dándoles la oportunidad de recibir resultados de geocodificación de Google, pero mostrar objetos en, por ejemplo, OpenStreetMaps.
Yandex geo services
El servicio Yandex para geocodificación se llama
Geocoder . Excelente cobertura en Rusia: hay direcciones incluso para asentamientos con un par de miles de habitantes. Para los países de la ex URSS de habla rusa, la cobertura no es peor. La cobertura global es simbólica. La relevancia de los datos es alta.
En general, todo sería excelente si no fuera por los términos de uso para proyectos comerciales (para los no comerciales, de forma gratuita con una serie de restricciones).
Los términos de uso para proyectos comerciales son los siguientes. El costo mínimo es de 120,000 rublos por año, y a este ritmo, el límite diario es de 1,000 solicitudes. Con un aumento en el número de solicitudes diarias, el costo por 1 solicitud cae. En general, el costo no es impactante si no hubiera un PERO: si desea mantener los datos de geocodificación en el hogar, se agregarán otros 500,000 rublos al costo de la tarifa anual (enfatizo: no una vez, sino anualmente). Como resultado, el "umbral de entrada" para nosotros comienza con 620,000 rublos por año con un límite de 1000 solicitudes por día. Tales cosas
Geo Services OpenStreetMaps
OpenStreetMaps (OSM) es un proyecto de mapeo web sin fines de lucro destinado a crear un mapa geográfico detallado y gratuito del mundo por parte de la comunidad de participantes: usuarios de Internet. (c) Wikipedia.
OSM tiene un servicio de geocodificación llamado
Nominatim . Los datos son mantenidos y actualizados "por todo el mundo". En general, los datos son relevantes, pero la cobertura no es profunda: en Rusia, en ciudades con una población de 20-30 mil personas, los detalles del número de casa a menudo no están disponibles.
Términos de uso - gratis. Los datos se pueden almacenar en casa, los datos se pueden utilizar de cualquier manera legal. En general, como fuente auxiliar para geocodificar, ¡servirá! (spoiler: decidimos usarlo en este estado).
Tabla dinámica de geocodificación
Y ahora todo es igual, pero brevemente en la tabla:
Elección del servicio de mapas
Un poco más arriba, examinamos los pros y los contras de varias geocodificaciones. Al elegir las tarjetas, nos guiamos por el hecho de que las tarjetas deben ser relevantes, la cobertura es buena y el costo y los términos de uso: levantamiento. Dado que la relevancia y la cobertura de los mapas se corresponde totalmente con la relevancia de la geocodificación (y no tiene sentido duplicar esta información), en la descripción general de los mapas nos centraremos solo en el costo y los términos.
Mapa 2GIS
Las condiciones para usar tarjetas de 2GIS son bastante leales. La facturación no se basa en el número de solicitudes / representación de la tarjeta, sino a un costo fijo. El costo consiste en una "tarifa de entrada", una tarifa única de 15,000 rublos, y una tarifa de suscripción anual de 60,000 rublos.
Mapas de Google
Como en el caso de la geocodificación, el uso de mapas de Google se basa en la cantidad de solicitudes (solicitud = visualización del mapa). Pero el costo de la solicitud depende de qué mapa desea mostrar y dónde.
Por ejemplo, si necesita mostrar un mapa estático con las características y etiquetas especificadas (es decir, cuando solicita un mapa, Google le devolverá una imagen de la pieza dada con las etiquetas especificadas); esto costará $ 2 por 1000 solicitudes. Si usa el mismo formato para aplicaciones en Android, de forma gratuita. Por cierto, para las aplicaciones móviles, los mapas de Google son ampliamente gratuitos. Pero no te hagas ilusiones: Google puede cambiar los términos de uso de forma unilateral en cualquier momento. Por ejemplo, en 2018, Google aumentó el costo de usar mapas en la interfaz web en 14 veces.
Para nuestros escenarios de uso (mapas dinámicos en la interfaz web), el costo por cada 1000 impresiones de tarjeta es de $ 7. Cuando se excede el número de impresiones de 100,000,000 (cien millones) por mes, el costo "cae" a $ 5.6 por 1000 impresiones.
Dado que la "cuenta personal" de la compañía es la misma para todos los servicios de Google Maps Platform, puede pagar por el uso de tarjetas de Google con los mismos $ 200 virtuales que Google cobra mensualmente.
Yandex Maps
Si tiene un proyecto gratuito, el acceso a los mapas no requiere el registro de los usuarios en el proyecto, y realiza menos de 25,000 llamadas a tarjetas por día, entonces puede usar Yandex.Maps gratis. De lo contrario, solo el uso comercial está disponible para su proyecto. La solicitud que al geocodificador, que a las tarjetas, se cobra lo mismo. La suscripción anual comienza a partir de 120 000 rublos por año (se incluyen 1000 solicitudes por día, 120 rublos por cada 1000 solicitudes posteriores que excedan el límite diario). El límite de solicitudes de geocodificador y mapas es general.
Y si desea mantener los resultados de las consultas en casa, debe pagar más de 500,000 rublos al año.
Abrir mapas de calles
Seré breve: libre y libre. Pero hay un matiz: a veces las cartas en Rusia se ralentizan.
upd: hay un matiz más: si utiliza los servicios en línea de OSM (y no los implementa en sus servidores), existen restricciones informales que se expresan en la redacción:
El uso intensivo (por ejemplo, la distribución de una aplicación que utiliza mosaicos desde openstreetmap.org) está prohibido sin el permiso previo de los Administradores del sistema. Vea a continuación las alternativas.
Es decir Los servicios OSM no son adecuados para proyectos grandes con uso intensivo del mapa, pero puede implementarlos en sus servidores y usarlos sin restricciones.
Tabla resumen
¿Qué elegimos?
Geocodificación
Para la geocodificación, elegimos una solución híbrida del servicio Dadata.ru y el servicio Nominatim de OpenStreetMaps. La geocodificación funciona de la siguiente manera.
Cuando ingresa la dirección, el usuario muestra mensajes del servicio Dadata.ru. Si las solicitudes contienen lo que el usuario estaba buscando, hace clic en la solicitud, la dirección seleccionada se muestra en el mapa y las coordenadas se muestran bajo la representación de texto de la dirección (recibida de Dadata.ru).
Video de YoutubeSi la dirección ingresada por el usuario en el servicio Dadata.ru no está disponible, el usuario puede presionar Enter, y la solicitud de la dirección irá al servicio Nominatim. Si la dirección se encuentra en los resultados de búsqueda, el usuario hace clic en la dirección, la dirección se muestra en el mapa y las coordenadas se muestran debajo de la representación de cadena de la dirección.
Video de YoutubeY, finalmente, si la dirección no se encuentra en Dadata.ru o Nominatim, el usuario simplemente puede elegir y señalar un punto en el mapa, y las coordenadas del punto especificado se agregarán a la representación de cadena ingresada de la dirección.
Video de YoutubeTarjetas
Seré breve Elegimos OpenStreetMaps. Hay muchas ventajas, no hay desventajas significativas.
Video extra: cómo funcionan las tarjetas en Okdesk
Pero en este video puede ver cómo funciona la visualización de aplicaciones en el mapa con la asignación de responsabilidad al empleado más cercano en Okdesk:
Por cierto, registre una cuenta de prueba
en el sitio y pruebe gratis durante 14 días.