Estamos felizes em anunciar o lançamento da versão 4.5 openrouteservice , que expõe serviços exclusivos para dois de nossos principais APIs, roteamento e isócrono . Agora você pode restringir as rotas para evitar cruzar as fronteiras e obter instantâneas contagens populacionais de isócronas.

O openrouteservice está em operação há mais de 10 anos e em casa no instituto HeiGIT em Heidelberg. Está fortemente ancorada na comunidade humanitária desde a sua criação e continua a desempenhar um papel vital durante catástrofes naturais e humanitárias através do Desastre ORS. Também estamos tentando servir o resto do mundo com recursos de roteamento de código aberto, que hospedam recursos de roteamento cada vez mais exclusivos.

Você sabia?

Começaremos uma série em breve apresentando notebooks Jupyter para casos de uso relevantes que pode ser coberto com nossa crescente pilha de APIs. Então fique atento

Limitando as fronteiras em openrouteservice

Você já quis fazer uma rota entre países na Europa, mas apenas cruzar as fronteiras de Schengen? Ou talvez rota de Detroit para Buffalo sem atravessar para o Canadá? Com openrouteservice você pode! Com nossas novas restrições de passagem de fronteira em perfis de direção, você pode dizer à API openrouteservice para evitar: todas as fronteiras, fronteiras controladas ou países específicos. Por exemplo,
... & options = {"avoid_borders": "controlled"} & ...
diria ao mecanismo de roteamento evitar cruzar fronteiras controladas, mas ainda permitir a passagem de fronteiras abertas (por exemplo, fronteiras Schengen) . Para evitar países específicos, você pode usar a opção avoid_countries. Por exemplo,
... & options = {"avoid_countries": "17 | 117"} & ...
diz ao serviço para evitar a travessia para a Bélgica e o Luxemburgo. Obter a lista completa de mapeamentos de países ID aqui

Restringir fronteiras é útil para empresas de logística em todo o mundo para evitar restrições de condução nacionais e / ou atrasos desnecessários nos postos de controle aduaneiros. Este é um exemplo de uma rota de Ludwigshafen, na Alemanha, para Milão, na Itália, fazendo um desvio sobre a Áustria para evitar a Suíça . Um caso de uso comum para empresas da Europa Central, os costumes suíços são conhecidos por se comportarem de forma particular (sem ofensa, Suíça, todos nós amamos você)

Estatísticas da população de Isochrones

GHSL – Camada Global de Assentamento Humano

Também estamos entusiasmados com um novo recurso útil para a API de isócronas. A partir de agora, é possível retornar a contagem de população para cada isócrono que você está calculando. Este é um passo imperativo para a análise de acessibilidade inclusiva. O conjunto de dados, que torna isso possível, é publicado pela Comissão Européia em seu Programa Global de Assentamento Humano . Ele possui 250 m x 250 m de tamanho de célula em todo o mundo e é o melhor conjunto de dados aberto granulado do seu tipo. Para acessar esse recurso em tempo de execução, é necessário especificá-lo como atributo na solicitação isochrone:
https://api.openrouteservice.org/isochrones?api_key=your-api-key&locations=8.34234%2C48.23424&profile=driving-car&range = 600% 2C% 201800 e atributos = total_pop
que responderão a contagem total de população neste polígono:

 "properties": {"group_index": 0,
              "valor": 600,
              "center": [8.34234,48.23424],
              "total_pop": 8373, "total_area_km": 43.9361
              }, ... 

Respondendo em GeoJSON

Por último, mas não menos importante, finalmente introduzimos o recurso muito esperado para responder no GeoJSON. Com suas bibliotecas geoespaciais, não é necessária a análise manual de JSON. Isso também pode ser útil para uma rápida olhada na geometria das rotas. A resposta pode ser importada diretamente para o QGIS via “adicionar camada vetorial”, selecionar “protocolo” como o tipo de fonte e inserir o url (com o parâmetro format = geojson url)!

Bônus QGIS

Aqui também há um hack populacional rápido para o console QGIS Python (nota apenas para v3.0 ligeiramente diferente em v2.18). As estatísticas da população ainda não estão disponíveis no plug-in do QGIS e, de qualquer forma, apenas pela diversão de pyqgis. Insira sua própria chave de API certifique-se de que sua primeira camada seja uma camada de ponto (ou especifique outra ID) e cole-a no console do QGIS Python:

 import sys
sys.path.insert (0, '/home/nilsnolde/anaconda3/lib/python3.6/site-packages/') # primeiro instale o pacote openrouteservice via pip
do cliente de importação openrouteservice, isochrones
clnt = client.Client (key = 'seu-ḱey')
features_in = iface.mapCanvas (). layer (0) .getFeatures (QgsFeatureRequest ()) # cria o iterador para todos os recursos de layer_id = 0
poly_out = QgsVectorLayer ("Polígono? crs = EPSG: 4326", "Isócronas", "memória") # criar camada
poly_out.dataProvider (). addAttributes ([QgsField("AA_MINS", QVariant.Int)],
                                      [QgsField("TOTAL_POP", QVariant.Int)]) # adicionar campos
poly_out.updateFields ()
para o ponto em features_in:
    coords_point = point.geometry (). asPoint ()
    response = clnt.isochrones (locations = coords, # deixa o módulo openrouteservice criar o pedido
                               perfil = 'carro de condução',
                               intervalos = [600,1800],
                               atributos = ['total_pop'])
    isócronas = resposta ['features']
    para idx, isócrono em enumerar (isócronas):
        isochrone_coords = [QgsPointXY(x, y) for x, y in isochrones[idx]['geometry']['coordinates'][0]]
        isochrone_props = isócrono [idx]['properties']
         feat = QgsFeature () anúncio curto
        feat.setGeometry (QgsGeometry.fromPolygonXY ([isochrone_coords]))
        feat.setAttributes ([isochrone_props['value'] / 60, isochrone_props ['total_pop']])
        poly_out.dataProvider (). addFeature (feat)

poly_out.updateExtents ()
QgsProject.instance (). AddMapLayer (poly_out)

Fonte: Digital-Geography
Autor: nilsnolde