Géoservices Web. Aperçu des solutions modernes



Dans le cadre de presque tous les produits en ligne, vous pouvez répondre à une tâche qui nécessite l'utilisation d'un service particulier lié aux cartes, au géocodage, au géo-positionnement. Personnellement, je travaille sur un catalogue immobilier en ligne depuis près de 10 ans, et dans le cadre d'un certain nombre d'autres projets, j'ai de l'expérience dans l'utilisation des fonctions spécifiques de divers géo-services en ligne.

Dans cet article, je vais examiner les géo-tâches auxquelles les programmeurs sont le plus souvent confrontés, faire un bref examen des services qui offrent des solutions à ces problèmes et partager mon expérience d'utilisation de ces services.

Je compte également sur la participation de commentateurs - si vous remarquez dans la critique une inexactitude dans la description, le manque de votre bon service ou si vous avez juste quelque chose à ajouter à ce que vous avez déjà écrit - écrivez dans les commentaires, je vais tout rassembler dans le texte principal afin d'avoir toujours une bonne liste d'outils à portée de main pour l'avenir pour toutes les occasions.

Table des matières




Afficher des cartes sur le site


Une tâche très populaire consiste à afficher des cartes en ligne sur un site. Par exemple, pour montrer exactement où se trouve votre bureau sur la carte. Ou où vous pouvez récupérer ce que le créateur de l'annonce vend.

Pour afficher les cartes, deux principaux types d'API sont utilisés:

  • API Javascript (interactive)
  • API statique (statique)

API Javascript


Tous les services que j'ai développés fonctionnent principalement avec la Russie, je vais donc parler des API que j'ai utilisées moi-même et qui sont populaires auprès de nous. Je sais que bing et d'autres fournisseurs de cartes ont des API, mais je ne les ai pas utilisées.

L'API Javascript vous permet d'afficher une carte interactive sur le site avec la possibilité de zoomer, d'afficher des marqueurs, d'interagir avec la carte (glisser des marqueurs, afficher des info-bulles, etc.).

API Javascript Yandex.Maps



API Javascript Google Maps



API 2GIS


  • De très bonnes cartes, mais pas partout.
  • Au revoir gratuitement
  • La fonctionnalitĂ© de l'API est plus faible que Yandex / Google, mais peut ĂŞtre Ă©tendue Ă  l'aide des modules Leaflet
  • Mais il existe des plans d'Ă©tage pour les centres commerciaux
  • api.2gis.ru/doc/maps/ru/quickstart

Cartes Azure



Mapbox


  • docs.mapbox.com/api/maps
  • Cartes mignonnes pour le Web et le mobile.
  • Je peux me tromper, mais les cartes semblent ĂŞtre uniquement en anglais
  • Pour les applications mobiles, libĂ©rez jusqu'Ă  25 000 utilisateurs par mois, sur le Web jusqu'Ă  50 000 tĂ©lĂ©chargements par mois


API statique


L'API statique peut être utilisée là où vous devez afficher uniquement une image de carte, sans interactivité. Par exemple, vous souhaitez joindre une carte à un e-mail ou permettre à l'utilisateur de vous imprimer un itinéraire. Eh bien, ou votre concepteur a dessiné une disposition dans laquelle une carte est utilisée à la place de l'arrière-plan - le chargement de cartes JS complètes pour une telle tâche semble redondant. En outre, une image statique peut être utilisée comme aperçu pour accélérer le chargement d'une page par l'utilisateur - et en la rendant interactive.

API statique Yandex.Maps



API Google Maps statiques



API statique 2GIS


  • Pour une raison quelconque, le site est rĂ©pertoriĂ© comme "obsolète"
  • Au revoir gratuitement
  • Taille maximale 1280x1280
  • Il n'y en a pas partout
  • api.2gis.ru/doc/maps/1.0/static

Mapbox


  • docs.mapbox.com/api/maps
  • Je peux me tromper, mais les cartes semblent ĂŞtre uniquement en anglais
  • Taille maximale 1280x1280
  • Jusqu'Ă  25 000 tĂ©lĂ©chargements de cartes gratuits par mois


Géocodage


Le géocodage est un processus qui vous permet de connaître les coordonnées d'un objet à son adresse. Eh bien, ou géocodage inversé - découvrez par coordonnées le type de géo-objet qui s'y trouve. En fait, tous les services de géocodage fonctionnent avec des adresses saisies dans un format arbitraire, tout en les amenant à leur niveau standard. Je n'ai pas trouvé de services de géocodage entièrement gratuits sur le marché pour le moment.

Les applications typiques du géocodage sont d'afficher l'adresse entrée par l'utilisateur sur la carte, ou vice versa (inverse) - l'utilisateur a mis une marque sur la carte, elle doit être transformée en adresse.

Geocoder Yandex.Map


  • Il y a un taux gratuit limitĂ© Ă  25 000 demandes par jour.
  • En plus du nombre de demandes, il est Ă©galement limitĂ© par le contrat de licence - les rĂ©sultats de codage ne peuvent pas ĂŞtre enregistrĂ©s et utilisĂ©s sans carte (mais peuvent ĂŞtre mis en cache), ils doivent ĂŞtre affichĂ©s uniquement sur les cartes Yandex et uniquement dans le cadre des services publics (accessibles Ă  tous ou avec inscription gratuite et ouverte).
  • Fonctionne très bien en Russie, Ă  la fois directe et inverse.
  • tech.yandex.ru/maps/geocoder

Conseils de DaData


  • DaData dispose d'un service de «conseil» qui vous permet d'implĂ©menter l'auto-complĂ©tion des adresses saisies par l'utilisateur.
  • Il comprend les fonctions d'un gĂ©ocodeur (il peut fournir des coordonnĂ©es par adresse et une adresse par coordonnĂ©es).
  • Cela ne fonctionne qu'en Russie, le revĂŞtement est boiteux - chez les millionnaires au niveau de 75-95%, en moyenne en Russie environ 50%
  • 10000 demandes par jour sont gratuites, mais l'offre ne permet pas de l'utiliser complètement en mode automatique - pour le gĂ©ocodage automatique, vous devez utiliser le service de normalisation.
  • dadata.ru/api/suggest/address

API de géocodage de Google Maps




Graphhopper


  • LibĂ©rez jusqu'Ă  500 demandes par jour.
  • Beaucoup d'autres fonctionnalitĂ©s intĂ©ressantes.
  • Fonctionne avec OpenStreetMaps
  • www.graphhopper.com/developers

Mapbox


  • docs.mapbox.com/api/search
  • La faible base de rues en Russie, au moins Ă  Kazan, les rues sur lesquelles je teste - n'a pas pu trouver
  • Jusqu'Ă  100 000 demandes par mois gratuites

OpenStreetMaps Nominatim



2GIS


  • La documentation de l'API Javascript a dĂ©clarĂ© l'existence de fonctions de gĂ©ocodage, mais en fait je n'ai pas trouvĂ© comment les utiliser dans la documentation. Peut-ĂŞtre en cours de dĂ©veloppement.



Analyse et saisie semi-automatique des adresses


Parfois, il est nécessaire de laisser l'utilisateur entrer une adresse dans un format aléatoire, puis de transformer cette adresse en données structurées - séparément le nom du pays, de la région, de la ville, de la rue et du numéro de maison. Cela est nécessaire pour tous les services qui travaillent avec l'immobilier, il est nécessaire de déterminer les adresses en double, de remplir les reçus de courrier, etc.

En principe, tous les services de géocodage de la liste ci-dessus réalisent cette tâche sans problème. Avec le géocodage direct, en plus des coordonnées, ils renvoient également des informations structurées sur le géo-objet trouvé.

Par ailleurs, il convient de noter le service de «standardisation» de DaData - aux adresses de Russie, elles renvoient de nombreuses informations utiles différentes, 10 kopecks pour chaque adresse:
dadata.ru/api/clean/address

De plus, je me réfère également à cette section les tâches de recherche d'informations supplémentaires sur l'adresse. En particulier, cette détermination du quartier de la ville auquel appartient l'adresse spécifiée et la recherche des stations de métro les plus proches sont des tâches importantes si nous recherchons des annonces par adresse.

Définition de la zone au sein de la ville


À l'heure actuelle, j'ai trouvé deux solutions pour déterminer la zone au sein de la ville. Les deux ne fonctionnent que pour la Russie.

Le premier et le plus évident est DaData. Beaucoup de choses ont été écrites sur ce service, c'est vraiment un bon service pour travailler avec des adresses russes (et ce n'est pas une publicité). Essayez-le vous-même, assurez-vous.

Si vous ne voulez pas dépendre d'un service tiers, il y a une autre solution que j'ai appliquée et continuez d'appliquer jusqu'à présent. C'est la définition du quartier par le code de l'adresse OKATO . Chaque adresse en Russie a son propre code OKATO - 11 chiffres. Parmi ceux-ci, les 5-8 premiers, selon la ville, indiquent clairement la zone.

Pour les villes dont j'ai besoin, j'ai simplement compilé une base de données de codes OKATO pour les districts, j'ai obtenu quelque chose comme ce tableau:

Exemples de codes OKATO


La question suivante est de savoir comment trouver le code d'adresse OKATO? DaData le renvoie dans le cadre de ses services de conseils et de normalisation. Il existe un site okato-oktmo.rf qui à l'adresse affiche le code OKATO en utilisant le même dadat. Notre tâche consiste à trouver indépendamment le code OKATO à l'adresse, quel que soit le service.

Pour ce faire, nous devons télécharger la dernière base de données FIAS et lancer une recherche sur celle-ci. Il y a déjà un article sur le hub avec un exemple de comment importer la base de données FIAS dans MSSQL . En général, vous configurez la recherche par FIASU, trouvez l'adresse dont vous avez besoin là-bas, trouvez son code OKATO, par le code OKATO à partir des listes de districts que vous connaissez le district - c'est tout, le problème est résolu.

Si vous ne souhaitez pas prendre un bain de vapeur en téléchargeant 60 gigaoctets de fichiers XML dans votre base de données, il existe un service moins cher, mais aussi moins fonctionnel que les données qui vous permet de travailler avec la base de données FIAS:
kladr-api.ru/docs

Rechercher les stations de métro les plus proches


Une fonction nécessaire, en particulier pour les habitants de Moscou, lorsque vous devez trouver les stations de métro les plus proches à l'adresse. Pour cette tâche, je connais actuellement deux solutions:

Yandex Geocoder


Vous devez d'abord trouver les coordonnées de l'adresse. Ensuite, comme dans le géocodage inverse, nous passons ces coordonnées comme paramètres de requête et le type du toponyme retourné kind = metro.
Un paramètre distinct définit la taille de la zone dans laquelle il est nécessaire de rechercher la station la plus proche. Empiriquement, j'ai sélectionné des valeurs de 0,02 à 0,05 degrés selon la ville (à Moscou, un rayon de 2 kilomètres du métro est toujours considéré comme une distance de marche, et à Kazan la distance entre les stations est de 1,5 kilomètre).

Il y a aussi un problème avec cette méthode, que parfois le métro le plus proche en coordonnées n'est pas toujours le plus proche en fait (par exemple, c'est de l'autre côté de la rivière, ou quelque chose comme ça). Vous ne pouvez déterminer le métro le plus proche que par accessibilité en utilisant les services de construction d'itinéraires et de matrices de distance, qui seront abordés dans l'article ci-dessous. Pour une détermination approximative de la station la plus proche - le géocodeur Yandex est tout à fait approprié et vous permet d'effectuer jusqu'à 25 000 demandes par jour gratuitement.

DaData


Oui, et DaData peut vous aider dans cette tâche - dans le cadre des tarifs payés du service «prompt» ou «standardisation», les 3 stations de métro les plus proches et les distances qui les séparent sont également renvoyées à chaque adresse.

Rechercher des organisations


Une tâche courante si vous voulez montrer à vos clients une sorte d'organisation dans sa ville. Par exemple, vous vendez des marchandises avec livraison et vous souhaitez montrer à une personne tous les points de livraison d'un service dans sa ville. Ou vous faites des mises en page pour l'impression et montrez à l'utilisateur sur la carte toutes les imprimeries où il peut aller pour imprimer votre mise en page.

Recherche Yandex par organisation


  • tech.yandex.ru/maps/geosearch
  • Jusqu'Ă  500 requĂŞtes par jour sont gratuites, Ă  condition que les rĂ©sultats soient affichĂ©s sur une carte publique.
  • Les rĂ©sultats de la recherche ne peuvent pas ĂŞtre enregistrĂ©s ou affichĂ©s sur des cartes autres que Yandex.

Google place une API


  • developers.google.com/places/web-service/usage-and-billing
  • Un système de tarification très compliquĂ©, je ne le comprenais pas complètement. Peut-ĂŞtre que quelqu'un qui a utilisĂ© Ă©crira dans les commentaires.
  • Si je comprends bien, les requĂŞtes de base sont gratuites, mais toutes ext. les informations (contacts, avis, ...) sont facturĂ©es sĂ©parĂ©ment.

2GIS


La rumeur veut qu'ils disposent d'une API privée payante pour rechercher des organisations. Je n'ai pas encore réussi à y accéder, et il y a assez de recherche d'organisations de Yandex pour nos tâches.

Localisation de l'utilisateur par IP


Une tâche courante sur le Web consiste à comprendre de quelle ville un visiteur est venu sur votre site. Il existe des solutions pour cette tâche sous la forme de services en ligne ou de solutions autonomes pour ceux qui ne veulent pas dépendre de services tiers.

Service en ligne pour déterminer la ville par IP - ici je peux conseiller à nouveau (pour la Russie) DaData: dadata.ru/api/detect_address_by_ip
La limite est de 10 000 demandes par jour. Si votre présence dépasse 10 000 entrées uniques par jour, il est logique de considérer les solutions installées sur votre serveur. Vous pouvez en savoir plus à leur sujet dans la revue DaData de la façon dont ils ont choisi quoi utiliser.

Je vais dupliquer brièvement les informations:
IpGeoBase - était un bon site qui était mis à jour quotidiennement et fournissait une base de données d'adresses IP et de leurs villes respectives dans un format lisible par machine compréhensible qui est facilement importé dans n'importe quelle base de données. Malheureusement, il a cessé de se mettre à jour en 2017.
ipgeobase.ru

SypexGeo - est toujours en cours de mise à jour, il se présente sous la forme d'un script php et d'une base de données pour celui-ci dans son propre format. Fonctionne rapidement, détermine bien
sypexgeo.net/en/download

MaxMind propose de télécharger des bases de données gratuites avec une précision réduite et une API séparée pour elles dans divers langages de programmation. Des bases de données plus précises sont disponibles dans le cadre des produits payants.
dev.maxmind.com/geoip/geoip2/geolite2

Déterminer l'emplacement de l'utilisateur par ses coordonnées


La tâche est similaire à celle du géocodage inversé, avec de légères différences.

Parfois, nous devons déterminer l'emplacement de l'utilisateur lorsque nous connaissons exactement ses coordonnées (par exemple, nous les avons obtenues à l'aide des capteurs GPS de l'appareil ou de l'API de géolocalisation dans le navigateur). Il existe deux options: le géocodage inversé renvoie le nom du lieu où se trouve l'utilisateur. Mais que se passe-t-il si l'internaute se situe quelque part sur l'autoroute entre les villes, ou en banlieue ou simplement dans un champ propre et souhaite voir des annonces de vente de terrain sur ce champ? Pas toujours le géocodeur inversé fera face à cela.

Dans ce cas, je le fais personnellement - j'ai dans ma base de données toutes les coordonnées des villes russes dans lesquelles nous avons des annonces et avec lesquelles nous travaillons généralement. Et selon les coordonnées de l'utilisateur, je détermine simplement la ville la plus proche de lui à partir de notre base de données, sur simple demande:

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


Construction de routes


Parfois, vous devez créer un itinéraire d'un point à un autre. Par exemple, créez une carte de localisation de l'emplacement de l'utilisateur à votre bureau. Il existe des solutions payantes de Yandex et de Google - leur principale différence est que Yandex vend un abonnement avec un paiement annuel, et Google facture les demandes à la pièce et déduit l'argent de la carte une fois par mois pour le mois.
Google dispose également d'un abonnement premium, qui offre certaines fonctions supplémentaires (par exemple, l'augmentation de la taille maximale de l'image de l'API statique) et un dépôt sur les limites. Il existe également une solution de 2GIS - la plus chère en termes de 1 itinéraire construit.

Les tâches de création d'itinéraires sont divisées en plusieurs sous-tâches:
  1. Construire un itinéraire d'un point à un autre est compréhensible
  2. La matrice des distances - un service qui vous permet de construire une matrice des distances et du temps en transit entre un ensemble de points de départ et d'arrivée. Par exemple, si vous devez calculer les itinéraires optimaux pour plusieurs courriers qui doivent livrer des marchandises de différents entrepôts à différents clients. Ou offrez-vous des services de nettoyage et vous devez savoir quel nettoyant sera le plus pratique à la maison pour vous rendre à chacune des commandes d'aujourd'hui et faire un schéma optimal pour déplacer les nettoyeurs.
  3. API Isochrone - construire autour d'une zone ponctuelle, qui peut être atteinte en même temps. Par exemple, «trouvez tous les cafés à moins de 15 minutes à pied de la position de l'utilisateur».

Différents fournisseurs proposent différentes solutions pour toutes ces tâches.

Grâce à 3aiats , une solution Open Source gratuite a été trouvée -

Graphhopper


  • www.graphhopper.com/open-source
  • S'installe sur votre serveur, utilise OpenStreetMap pour crĂ©er des itinĂ©raires, s'exĂ©cute en Java
  • Il existe une API gratuite et payante pour ceux qui ne souhaitent pas installer ce logiciel sur leur serveur.
  • Il existe une API pour le gĂ©ocodage, la construction d'itinĂ©raires, la construction de matrices de distance et l'optimisation d'itinĂ©raires, ainsi que l'isochrone


MapBox (merci ne_kotin )


  • docs.mapbox.com/api/navigation
  • Il existe une API pour le gĂ©ocodage, la construction d'itinĂ©raires, la construction de matrices de distance et l'optimisation d'itinĂ©raires.
  • Jusqu'Ă  100 000 demandes par mois gratuites


Yandex


Une caractéristique commune à tous les services Yandex pour les itinéraires est qu'ils opèrent en Russie, Abkhazie, Azerbaïdjan, Arménie, Biélorussie, Géorgie, Kazakhstan, Kirghizistan, Moldavie, Tadjikistan, Turquie, Ouzbékistan et Ukraine.
  • tech.yandex.ru/routing/router
  • tech.yandex.ru/routing/distance_matrix
  • Tarifs Ă  partir de 120 000 roubles par an
  • Il existe une API pour construire des routes et des matrices de distance
  • Comprend les embouteillages, y compris ceux prĂ©vus pour un moment donnĂ© dans le futur
  • Capable de construire des itinĂ©raires de marche, sur les transports personnels et publics

Il existe un service app.swizz.ru qui utilise l'API Yandex pour créer des itinéraires. Le service n'a pas sa propre API, et il rencontre des problèmes avec les limites de Yandex, mais en substance, vous pouvez voir comment fonctionne le générateur de routes Yandex. Merci pour le lien 3aiats

Google


La principale différence avec Yandex est la tarification à l'utilisation, c'est-à-dire pour chaque demande. Pour les petits volumes, les tarifs seront plus rentables avec Google, pour les grands - avec Yandex.
De plus, Google n'a aucune restriction sur les pays où ils construisent des itinéraires.

API Google Directions


  • developers.google.com/maps/documentation/directions/intro
  • Le tarif est de 5 $ ou 10 $ pour 1000 demandes. 10 - si l'optimisation est utilisĂ©e en tenant compte des embouteillages et des waypoints intermĂ©diaires. 5 - si ce n'est qu'un itinĂ©raire entre 2 points.
  • Par fonctions, un analogue du service Yandex pour la construction de routes entre 2 points, mais avec plus de paramètres
  • Il est notamment en mesure de proposer plusieurs itinĂ©raires alternatifs


API Google Distance Matrix




API Google Roads


Un service Google unique qui vous permet de travailler avec les routes sur lesquelles votre véhicule se déplace.
Relie automatiquement les points de votre itinéraire aux routes, affiche le meilleur schéma de circulation et toutes les informations sur les sections de routes que vous rencontrez en chemin.
Il sait comment lier les sections de route les plus proches aux points (par exemple, sur une piste GPS qui saute d'avant en arrière pour montrer quelles routes l'itinéraire a été réellement traversé).
Capable d'afficher les limites de vitesse sur les routes de l'itinéraire.



WikiRoutes


  • wikiroutes.info/developers
  • Construire des itinĂ©raires en utilisant les transports publics
  • Il existe une API payante pour l'intĂ©gration avec le site


Cartes Azure




2Gis Logistics


  • logistic.2gis.ru
  • Service de construction d'itinĂ©raires
  • 5 itinĂ©raires par jour pour 3 500 roubles par mois, prĂŞts Ă  discuter d'une augmentation de la limite
  • Pour un peu d'argent, il y a le suivi des mouvements de messagerie et d'autres fonctions supplĂ©mentaires


Services d'optimisation de la logistique


En tant que classe distincte de services pour la construction d'itinéraires, il convient de mettre en évidence des solutions toutes faites pour optimiser la logistique, qui sont facturées en fonction du nombre de courriers / véhicules sur la ligne. En effet, ils combinent des outils de construction d'itinéraire et d'autres services pour optimiser au maximum votre logistique. Ce sont des solutions assez complexes et de niche, donc je les ai combinées en une seule liste.
Merci d'avoir ajouté à la liste 3aiats


Conclusion


Dans le monde d'aujourd'hui, vous pouvez trouver un service prêt à l'emploi pour pratiquement toutes les tâches que vous devez résoudre, ou le résoudre en utilisant une combinaison de services de la liste ci-dessus. La seule question est le coût de cette solution, combien elle vous sera bénéfique.

De nombreux services, au fur et à mesure que leur popularité augmente, passent à des systèmes de monétisation de plus en plus sévères - tout comme les cartes Google gratuites de Google sont devenues entièrement payantes, Yandex s'oriente progressivement vers cela.

Il existe des OpenStreetMaps ouverts, qui semblent vous faire résoudre tous les problèmes de la liste, mais pour cela, vous devez les déployer vous-même, et en plus de votre projet, maintenir séparément une infrastructure entière pour les cartes - autant que nécessaire, chacun décide pour lui-même.

Probablement, dans la revue, je n'ai pas indiqué d'excellents services que vous utilisez, ou vous avez utilisé les services de la revue et vous avez quelque chose à ajouter à ce qui a déjà été écrit - écrivez dans les commentaires, je vais ajouter au texte.

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


All Articles