
Como parte de quase qualquer produto on-line, você pode executar uma tarefa que requer o uso de um serviço específico relacionado a mapas, geocodificação e posicionamento geográfico. Pessoalmente, trabalho em um catálogo on-line de imóveis há quase 10 anos e, como parte de vários outros projetos, tenho experiência no uso de funções específicas de vários serviços geográficos on-line.
Neste artigo, examinarei as tarefas geográficas que os programadores geralmente enfrentam, fará uma breve revisão dos serviços que oferecem soluções para esses problemas e compartilharei minha experiência no uso desses serviços.
Também conto com a participação de comentaristas - se você notar na revisão uma imprecisão na descrição, a falta de seu bom serviço ou se apenas tiver algo a acrescentar ao que já escreveu - escreva nos comentários, colecionarei tudo no texto principal para ter sempre uma boa lista de ferramentas à mão para o futuro para todas as ocasiões.
Sumário
Exibir mapas no site
Uma tarefa muito popular é exibir mapas online em um site. Por exemplo, para mostrar exatamente onde no mapa o seu escritório está localizado. Ou onde você pode escolher o que o criador do anúncio vende.
Para exibir mapas, dois tipos principais de API são usados:
- API Javascript (interativa)
- API estática (estática)
API Javascript
Todos os serviços que desenvolvi funcionam principalmente com a Rússia, por isso vou falar sobre as APIs que usei e que são populares entre nós. Eu sei que o Bing e outros provedores de mapas têm APIs, mas não os usei.
A API Javascript permite mostrar um mapa interativo no site com a capacidade de ampliar, exibir marcadores, interagir com o mapa (arrastar marcadores, exibir dicas de ferramentas etc.).
API Javascript Yandex.Maps
API Javascript Google Maps
API 2GIS
- Cartões muito bons, mas não em todos os lugares.
- Tchau de graça
- A funcionalidade da API é mais fraca que o Yandex / Google, mas pode ser expandida usando os módulos Leaflet
- Mas existem mapas de chão para shopping centers
- api.2gis.ru/doc/maps/ru/quickstart
Mapas do Azure
Mapbox
- docs.mapbox.com/api/maps
- Cartões fofos para web e dispositivos móveis.
- Posso estar enganado, mas os cartões parecem estar apenas em inglês
- Para aplicativos móveis, liberte até 25.000 usuários por mês, na web até 50.000 downloads por mês
API estática
A API estática pode ser usada onde você precisa mostrar apenas uma imagem do mapa, sem interatividade. Por exemplo, você deseja anexar um mapa a um email ou permitir que o usuário imprima uma rota para você. Bem, ou o seu designer desenhou um layout no qual um mapa é usado em vez do plano de fundo - carregar cartões JS completos para essa tarefa parece redundante. Além disso, uma imagem estática pode ser usada como uma visualização para acelerar o carregamento de uma página pelo usuário e torná-la interativa.
API estática Yandex.Maps
API estática do Google Maps
API estática 2GIS
Mapbox
- docs.mapbox.com/api/maps
- Posso estar enganado, mas os cartões parecem estar apenas em inglês
- Tamanho máximo 1280x1280
- Grátis até 25.000 downloads de mapas por mês
Geocodificação
A geocodificação é um processo que permite descobrir as coordenadas de um objeto em seu endereço. Bem, ou geocodificação reversa - descubra por coordenadas que tipo de objeto geográfico está localizado lá. De fato, todos os serviços de geocodificação trabalham com endereços inseridos em um formato arbitrário, trazendo-os ao seu padrão. No momento, não encontrei nenhum serviço de geocodificação totalmente gratuito no mercado.
As aplicações típicas de geocodificação são exibir o endereço digitado pelo usuário no mapa ou vice-versa (reverso) - o usuário coloca uma marca no mapa, deve ser transformado em um endereço.
Geocoder Yandex.Map
- Há uma taxa gratuita limitada a 25.000 solicitações por dia.
- Além do número de solicitações, também é limitado pelo contrato de licença - os resultados da codificação não podem ser salvos e usados sem um cartão (mas podem ser armazenados em cache); eles devem ser exibidos apenas nos mapas Yandex e somente na estrutura de serviços públicos (acessível a todos ou com registro gratuito e aberto).
- Funciona muito bem na Rússia, direta e reversa.
- tech.yandex.ru/maps/geocoder
Dicas do DaData
- O DaData possui um serviço de "dica" que permite implementar o preenchimento automático de endereços inseridos pelo usuário.
- Inclui as funções de um geocoder (pode fornecer coordenadas por endereço e endereço por coordenadas).
- Funciona apenas na Rússia, o revestimento é coxo - em milionários no nível de 75-95%, em média na Rússia, cerca de 50%
- 10.000 solicitações por dia são gratuitas, mas a oferta não permite que ela seja usada completamente no modo automático - para geocodificação automática, você precisa usar o serviço de padronização.
- dadata.ru/api/suggest/address
API de geocodificação do Google Maps
Graphhopper
Mapbox
- docs.mapbox.com/api/search
- A fraca base de ruas na Rússia, pelo menos em Kazan, as ruas nas quais eu testei - não conseguiu encontrar
- Grátis até 100.000 solicitações por mês
OpenStreetMaps Nominatim
2GIS
- A documentação da API Javascript declarou a existência de funções de geocodificação, mas, na verdade, não encontrei como usá-las na documentação. Talvez enquanto esteja em desenvolvimento.

Analisar e preencher automaticamente endereços
Às vezes, é necessário permitir que o usuário insira um endereço em um formato aleatório e depois transformá-lo em dados estruturados - separadamente o nome do país, região, cidade, rua e número da casa. Isso é necessário para todos os serviços que trabalham com imóveis, é necessário determinar endereços duplicados, preencher recibos de correio, etc.
Em princípio, todos os serviços de geocodificação da lista acima lidam com essa tarefa sem problemas. Com a geocodificação direta, além das coordenadas, eles também retornam informações estruturadas sobre o objeto geográfico encontrado.
Separadamente, vale a pena notar o serviço de “padronização” do DaData - para endereços da Rússia eles retornam muitas informações úteis diferentes, 10 copias para cada endereço:
dadata.ru/api/clean/addressAlém disso, também refiro a esta seção as tarefas de encontrar informações adicionais sobre o endereço. Em particular, essa determinação de qual distrito da cidade o endereço especificado pertence e a busca pelas estações de metrô mais próximas são tarefas importantes se procurarmos anúncios por endereço.
Definição da área dentro da cidade
No momento, encontrei duas soluções para determinar a área dentro da cidade. Ambos funcionam apenas para a Rússia.
O primeiro e mais óbvio é o DaData. Muito foi escrito sobre esse serviço, é realmente um bom serviço para trabalhar com endereços russos (e isso não é um anúncio). Tente você mesmo, certifique-se.
Se você não deseja depender de um serviço de terceiros, existe outra solução que eu apliquei e continuo aplicando até o momento. Esta é a definição do distrito pelo código
OKATO . Cada endereço na Rússia tem seu próprio código OKATO - 11 dígitos. Destes, os primeiros 5-8, dependendo da cidade, indicam claramente a área.
Para as cidades de que preciso, simplesmente compilei um banco de dados de códigos OKATO para os distritos, obtive algo parecido com este array:
A próxima pergunta é como descobrir o código de endereço OKATO? O DaData o devolve como parte de seus serviços de Dicas e padronização. Existe um site
okato-oktmo.rf que no endereço mostra o código OKATO usando o mesmo dadat. Nossa tarefa é descobrir independentemente o código OKATO no endereço, independentemente de qualquer serviço.
Para fazer isso, precisamos fazer o download do
banco de dados FIAS mais recente e configurar uma pesquisa nele. Já existe um artigo no hub com um exemplo de
como importar o banco de dados FIAS no MSSQL . Em geral, você configura a pesquisa pelo FIASU, encontra o endereço necessário, encontra o código OKATO, pelo código OKATO nas listas de distritos que você conhece o distrito - é isso, o problema está resolvido.
Se você não quiser tomar um banho de vapor com o download de 60 gigabytes de arquivos XML em seu banco de dados, existe um serviço mais barato, mas também menos funcional que o dadata, que permite trabalhar com o banco de dados FIAS:
kladr-api.ru/docsPesquise estações de metrô próximas
Uma função necessária, especialmente para os residentes de Moscou, quando você precisa encontrar as estações de metrô mais próximas no endereço. Para esta tarefa no momento, conheço duas soluções:
Geocoder Yandex
Primeiro você precisa descobrir as coordenadas de endereço. Então, como na geocodificação reversa, passamos essas coordenadas como parâmetros de solicitação e o tipo do topônimo retornado kind = metro.
Um parâmetro separado define o tamanho da área dentro da qual é necessário procurar a estação mais próxima. Empiricamente, selecionei valores de 0,02 a 0,05 graus, dependendo da cidade (em Moscou, um raio de 2 quilômetros do metrô ainda é considerado uma curta distância, e em Kazan, a distância entre as estações é de 1,5 quilômetros).
Também existe um problema com esse método, que às vezes o metrô mais próximo em coordenadas nem sempre é o mais próximo (por exemplo, fica do outro lado do rio, ou algo assim). Você só pode determinar o metrô mais próximo acessibilidade usando os serviços de construção de rotas e matrizes de distância, que serão discutidos no artigo abaixo. Para uma determinação aproximada da estação mais próxima - o geocoder Yandex é bastante adequado e permite executar até 25.000 solicitações por dia gratuitamente.
DaData
Sim, e o DaData pode ajudar nessa tarefa - como parte das tarifas pagas do serviço "pronto" ou "padronização", as 3 estações de metrô mais próximas e as distâncias a elas também são retornadas para cada endereço.
Pesquisar organizações
Uma tarefa comum se você deseja mostrar a seus clientes algum tipo de organização na cidade dele. Por exemplo, você vende mercadorias com entrega e deseja mostrar a uma pessoa todos os pontos de entrega de algum serviço em sua cidade. Ou você cria layouts para impressão e mostra ao usuário no mapa todas as gráficas onde ele pode ir para imprimir seu layout.
Pesquisa Yandex por organização
- tech.yandex.ru/maps/geosearch
- Até 500 consultas por dia são gratuitas, desde que os resultados sejam exibidos em um mapa público.
- Os resultados da pesquisa não podem ser salvos ou exibidos em mapas que não sejam o Yandex.
API do Google Places
- developers.google.com/places/web-service/usage-and-billing
- Um sistema de tarifas muito complicado, eu não o entendi completamente. Talvez alguém que usou escreva nos comentários.
- Pelo que entendi, as consultas básicas são gratuitas, mas todas ext. informações (contatos, críticas, ...) são cobradas separadamente.
2GIS
Dizem que eles têm uma API privada paga para pesquisar organizações. Ainda não consegui obter acesso a ele e há pesquisas suficientes para organizações do Yandex para nossas tarefas.
Localização do usuário por IP
Uma tarefa comum na web é entender de que cidade um visitante chegou ao seu site. Existem soluções para esta tarefa na forma de serviços online ou soluções independentes para aqueles que não desejam depender de serviços de terceiros.
Serviço online para determinar a cidade por IP - aqui posso aconselhar (para a Rússia) o DaData novamente:
dadata.ru/api/detect_address_by_ipO limite é de 10.000 solicitações por dia. Se a sua participação exceder 10.000 entradas exclusivas por dia, faz sentido considerar as soluções instaladas no servidor. Você pode ler mais sobre eles na
revisão do DaData sobre como eles escolheram o que usar.
Vou duplicar brevemente as informações:
IpGeoBase - costumava ser um bom site que era atualizado diariamente e fornecia um banco de dados de endereços IP e suas respectivas cidades em um formato compreensível de leitura por máquina que é facilmente importado para qualquer banco de dados. Infelizmente, ele parou de atualizar em 2017.
ipgeobase.ruSypexGeo - ainda está sendo atualizado, vem na forma de um script php e um banco de dados em seu próprio formato. Funciona rápido, determina bem
sypexgeo.net/en/downloadO MaxMind oferece o download de bancos de dados gratuitos com precisão reduzida e uma API separada para eles em várias linguagens de programação. Bancos de dados mais precisos estão disponíveis como parte de produtos pagos.
dev.maxmind.com/geoip/geoip2/geolite2Determinando a localização do usuário por coordenadas
A tarefa é semelhante à tarefa de geocodificação reversa, com pequenas diferenças.
Às vezes, precisamos determinar a localização do usuário quando conhecemos exatamente suas coordenadas (por exemplo, obtivemos o uso dos sensores GPS do dispositivo ou da API de geolocalização no navegador). Existem duas opções - geocodificação reversa retorna o nome do local em que o usuário está localizado. Mas o que acontece se o usuário estiver em algum lugar na estrada entre as cidades, ou nos subúrbios ou apenas em um campo limpo e quiser ver anúncios para a venda de terrenos nesse campo? Nem sempre o geocoder reverso vai lidar com isso.
Nesse caso, eu pessoalmente faço isso - tenho no meu banco de dados todas as coordenadas das cidades russas nas quais temos anúncios e com os quais geralmente trabalhamos. E de acordo com as coordenadas do usuário, eu simplesmente determino a cidade mais próxima a ele do nosso banco de dados, com um simples pedido:
ORDER BY (|lng - :lng| + |lat - :lat|) ASC LIMIT 1
Construção de rotas
Às vezes, você precisa construir uma rota de um ponto para outro. Por exemplo, crie um mapa de localização a partir da localização do usuário para o seu escritório. Existem soluções pagas da Yandex e do Google - a principal diferença é que a Yandex vende uma assinatura com um pagamento anual, e o Google cobra solicitações da peça e deduz dinheiro do cartão uma vez por mês durante o mês.
O Google também possui uma assinatura premium, que fornece algumas funções adicionais (por exemplo, aumentar o tamanho máximo da imagem da API estática) e um depósito em limites. Também existe uma solução do 2GIS - a mais cara em termos de 1 rota construída.
As tarefas de construção de rotas são divididas em várias subtarefas:
- Construir uma rota de um ponto a outro é compreensível
- A matriz de distâncias - um serviço que permite criar uma matriz de distâncias e tempo em trânsito entre um conjunto de pontos de partida e chegada. Por exemplo, se você precisar calcular as rotas ideais para vários correios que precisam entregar mercadorias de diferentes armazéns para diferentes clientes. Ou você oferece serviços de limpeza e precisa descobrir qual limpador será mais conveniente para receber cada um dos pedidos de hoje em casa e fazer um esquema ideal para mover os limpadores.
- API Isochrone - construa em torno de uma área pontual, que pode ser alcançada ao mesmo tempo. Por exemplo, "encontre todos os cafés a uma caminhada de 15 minutos da posição do usuário".
Diferentes fornecedores oferecem soluções diferentes para todas essas tarefas.
Graças ao
3aiats , uma solução de código aberto gratuita foi encontrada -
Graphhopper
- www.graphhopper.com/open-source
- Instala no servidor, usa o OpenStreetMap para construir rotas, roda em Java
- Existe uma API gratuita e paga para quem não deseja instalar este software em seu servidor.
- Existe uma API para geocodificação, construção de rotas, construção de matrizes de distância e otimização de rotas, além de isocrono
MapBox (obrigado ne_kotin )
- docs.mapbox.com/api/navigation
- Existe uma API para geocodificação, construção de rotas, construção de matrizes de distância e otimização de rotas.
- Grátis até 100.000 solicitações por mês
Yandex
Uma característica comum de todos os serviços Yandex para rotas é que eles operam na Rússia, Abkhazia, Azerbaijão, Armênia, Bielorrússia, Geórgia, Cazaquistão, Quirguistão, Moldávia, Tajiquistão, Turquia, Uzbequistão e Ucrânia.
Há um serviço
app.swizz.ru que usa a API Yandex para criar rotas. O serviço não possui sua própria API e está enfrentando problemas com os limites do Yandex, mas, em essência, você pode ver como o construtor de rotas Yandex funciona lá. Obrigado pelo link
3aiatsGoogle
A principal diferença do Yandex é o preço de pagamento conforme o uso, ou seja, para cada solicitação. Para pequenos volumes, as tarifas serão mais lucrativas com o Google, para grandes - com o Yandex.
Além disso, o Google não tem restrições nos países onde eles constroem rotas.
API do Google Directions
- developers.google.com/maps/documentation/directions/intro
- A tarifa é de US $ 5 ou US $ 10 por 1.000 solicitações. 10 - se a otimização for usada levando em consideração engarrafamentos e waypoints intermediários. 5 - se apenas uma rota entre 2 pontos.
- Por funções, um análogo do serviço Yandex para construir rotas entre 2 pontos, mas tem mais configurações
- Em particular, é capaz de oferecer várias rotas alternativas
API do Google Distance Matrix
API do Google Roads
Um serviço exclusivo do Google que permite que você trabalhe com as estradas nas quais seu veículo viaja.
Vincula automaticamente os pontos do seu percurso às estradas, mostra o melhor padrão de tráfego e todas as informações sobre os trechos das estradas que você encontra no caminho.
Ele sabe como vincular as seções de estrada mais próximas aos pontos (por exemplo, usando uma faixa de GPS que pula para frente e para trás para mostrar quais estradas a rota foi realmente percorrida).
Capaz de mostrar limites de velocidade nas estradas da rota.
WikiRoutes
Mapas do Azure
2Gis Logistics
- logística.2gis.ru
- Serviço para construção de rotas
- 5 rotas por dia por 3.500 rublos por mês, prontos para discutir um aumento de limite
- Por algum dinheiro, há rastreamento de movimento de correio e outras funções adicionais
Serviços para otimizar a logística
Como uma classe separada de serviços para a construção de rotas, vale destacar as soluções prontas para otimizar a logística, que são cobradas com base no número de correios / veículos na linha. De fato, eles combinam ferramentas de construção de rotas e outros serviços para otimizar sua logística o máximo possível. Como são soluções complexas e de nicho, eu as combinei em uma lista.
Obrigado por
adicionar à lista
3aiatsConclusão
No mundo de hoje, você pode encontrar um serviço pronto para praticamente qualquer tarefa que precise resolver ou resolvê-lo usando uma combinação de serviços da lista acima. A única questão é o custo dessa solução, quanto será benéfico para você.
Muitos serviços, à medida que sua popularidade cresce, mudam para sistemas de monetização cada vez mais difíceis - assim como os mapas do Google, uma vez gratuitos do Google, foram completamente pagos, então o Yandex está gradualmente avançando nessa direção.
Existem OpenStreetMaps abertos, que parecem fazer com que você resolva todos os problemas da lista, mas para isso você precisa implantá-los e, além do seu projeto, manter separadamente uma infraestrutura inteira para mapas - sempre que necessário, todos decidem por si mesmos.
Provavelmente, na revisão, não indiquei alguns serviços excelentes que você usa, ou você utilizou os serviços da revisão e você tem algo a acrescentar ao que já foi escrito - escreva nos comentários, acrescentarei ao texto.