Python obtém o intervalo especificado de POI por meio da interface do mapa Gaode

Fonte de referência: https://blog.csdn.net/weixin_47796965/article/details/108372378

Os dados de POI do AutoNavi Map estão abertos para uso. Recentemente, vi um artigo de referência e decidi experimentá-lo. A solicitação de uso gratuito retorna até 1000 informações. Este artigo usa principalmente solicitações de bloqueio para a área de destino para contornar as restrições e atingir o objetivo de resolver o problema.

Passos:
1. Obtenha o intervalo da área de destino do mapa AutoNavi
2. Divida o intervalo de destino em uma quantidade apropriada de áreas e gere o ponto central
3. Calcule os quatro pontos do ponto central e atribua o ponto central
4 Escreva o programa. De acordo com a função de busca de polígono aberto do AutoNavi Map LBS, a recuperação e aquisição de POI de cada área são realizadas

1. Pegue Kunming como um exemplo - obtenha o alcance da cidade de Kunming no mapa de Gaode

Abra a plataforma high lbs, registre e autentique desenvolvedores individuais e faça login

https://lbs.amap.com/api/webservice/guide/api/district/

Insira os parâmetros conforme mostrado na figura abaixo
Insira a descrição da imagem aquipara obter o intervalo de limite semelhante a um ponto, como o parâmetro polilinha distinto na figura abaixo. Nós copiamos para o mundo, encontramos as coordenadas da pequena área e excluímos, e então copiamos os dados restantes para o Excel em linhas, e então realizamos a operação de coluna no Excel e adicionamos cabeçalhos xey e os salvamos como Excel 97 Arquivos -2013xls. Para facilitar a próxima operação de mapa de arco.

Aqui, o autor original encontrou o problema de anormalidades causadas por uma pequena área no processo de processamento de dados em Shenzhen, mas não encontrou o problema de processamento de dados em Kunming, mas encontrou o problema de não ser capaz de salvar todos os dados em a célula do Excel. Portanto, este artigo usa o formato csv para armazenamento e as operações de regularização de dados relacionadas são processadas diretamente usando python, o que traz algumas pequenas diferenças.

Insira a descrição da imagem aqui
O regulamento de dados aqui é principalmente: 1. Separe a latitude e longitude em colunas; 2. Altere o ";" para duas novas linhas. Os dados do código e os resultados são os seguintes:

#%%

with open(r"\kunming_poi.csv",'rb') as csvfile:

  f.write('x,y')

  for i in csvfile:

     line_value = str(i,encoding='utf8')

     \#print(i,type(i))

csvfile.close()

 

\# %%

value_list = line_value.split(';')

print(value_list)

with open(r'result.csv','w') as f:

  for value in value_list:

     f.write(value)

     f.write('\n')

f.close()

Insira a descrição da imagem aquiResultado da conversão
Insira a descrição da imagem aqui

Em segundo lugar, o ArcGIS converte pontos de coordenadas em extensão espacial

Importe os dados csv para o ArcGIS e converta os dados em arquivos SHP e, a seguir, execute a operação ponto-a-linha nos dados.

São todas operações rotineiras, então não vou descrevê-las, se precisar, pode deixar uma mensagem e eu escreverei um artigo para complementá-la. Você pode consultar o artigo do autor original

Ao importar dados, o sistema de coordenadas precisa ser definido como WGS1984. Embora seja diferente do sistema de coordenadas do AutoNavi Map, a diferença não é muito grande e pode haver alguns erros, mas pode ser mínima no estudo da prefeitura- cidades de nível.

3. Desenhe a rede de pesca e obtenha as coordenadas do ponto central da rede

O objetivo é usar o intervalo de quatro para um construído por redes de pesca, usando a função de recuperação de POI poligonal fornecida pelo Gaode Maps

  1. Geração Fishnet

arctoolbox >> ferramentas de gerenciamento de dados >> classe de recursos >> criar rede arrastão

Insira a descrição da imagem aquiConfigurar classificações

Insira a descrição da imagem aquiPor fim, a rede de pesca é mostrada na figura
Insira a descrição da imagem aqui, e os pontos fora da grade redundante são excluídos, reduzindo o download de dados redundantes. O resultado final é o seguinte

Insira a descrição da imagem aqui

Verifique a extensão de quatro para o alcance da rede de pesca, determine os quatro para quatro de cada grade e atribua as coordenadas de quatro para a latitude e longitude para o ponto central
Insira a descrição da imagem aqui

  1. Calcule a latitude e longitude do ponto central da rede de pesca e as coordenadas
    Insira a descrição da imagem aqui
    dos quatro à quarta coordenada da cidade de Kunming, calcule o tamanho de cada rede de pesca, aqui está a imagem:
    Insira a descrição da imagem aqui
    Eu coloquei 10 grades horizontalmente, então o comprimento horizontal de cada grade é:) / 10

Defini 15 grades verticalmente, então o comprimento da grade vertical é: (topo-fundo) / 15

Uma vez que o ponto é o ponto central, porque as coordenadas do ponto central são conhecidas na etapa anterior, os quatro pontos de cada ponto central podem ser definidos em lotes através dos parâmetros de grade da mesma especificação.

Top = latitute + (top-bottom) / 15/2

Bottom = latitute - (top-bottom) / 15/2

Esquerda = logituto - (direita-esquerda) / 10/2

Direita = logituto + (direita-esquerda) / 10/2

Há um erro aqui, que pode resultar em aquisição de dados incompleta. Basta recalcular as linhas centrais superior, inferior, esquerda e direita de acordo com a grade gerada (2021/01/07)

Exemplos de resultados são os seguintes:
Insira a descrição da imagem aqui

Por fim, anexe o código no artigo de referência. Modifiquei alguns aqui, mas há um problema, ou seja, 100 páginas são percorridas todas as vezes, mas às vezes não há tantas páginas. Procurei uma explicação, e há nenhum parâmetro para retornar o número de páginas., Assim, a eficiência do código pode ser melhorada. (Você também pode usar simultaneidade segmentada)

Aqui você pode solicitar uma vez para determinar quantas páginas de dados existem e, em seguida, fazer mais solicitações, o que ajudará a reduzir as solicitações inválidas e melhorar a eficiência (2021/01/07)
———————————————————————————————
Infelizmente, o método acima não é viável, a contagem não representa a quantidade de dados obtidos. Para salvar o número de solicitações e melhorar a eficiência, você só pode julgar pelo valor nulo, caso contrário, causará problemas como perda de dados (9 de janeiro , 2021)

#%%
import pandas as pd
import requests
key = r'******************'   #高德地图开发者平台申请的key
keywords = "商场|超市|商店"
types = "060000"
url_head = r"https://restapi.amap.com/v3/place/polygon?"
text1 = pd.read_csv(r"昆明市范围_高德数据采集点.txt")  #从arcmap中导出的text文件地址
#%%
print(len(text1))
#输入表头
with open("poi_gaode.txt", 'a') as f:
    f.write('poi_name;poi_adname;poi_address;poi_location;poi_tel\n")
    f.close()
#%%
#for i in range(0, len(text1)):  #获取全部矩阵数据时,有可能超过高德地图配置的每天30000条数据限额,可选择先获取前35条,第二天再获取剩余数据

for i in range(51, 124):
	#经度和纬度用","分割,经度在前,纬度在后,坐标对用"|"分割,经纬度小数点后不得超过6位。
    con_location = str(round(text1["long_left"][i], 6)) + ',' + str(round(text1['lat_top'][i], 6)) + '|' + str(round(
        text1['long_right'][i], 6)) + ',' + str(round(text1['lat_bottom'][i], 6))
    
    url_ttl = url_head + "polygon=" + con_location + "&keywords=" + keywords + "&key=" + key + "&types=" + types + "&output=json&offset=20&extensions=all"
    # rep0 = requests.get(url_ttl)
    # json0 = rep0.json()
    # count0 = json0["count"]
    print("开始进行第%d个网格的数据提取." % i)
    # print("一共%d条数据" % int(count0))
    for p in range(1, 101):  #遍历100页
        url = url_ttl + '&page=' + str(p)
        rep1 = requests.get(url)
        json1 = rep1.json()
        pois_data = json1['pois']
        for poi in pois_data:
            poi_name = str(poi["name"])
            poi_adname = str(poi["adname"])
            poi_address = str(poi.get("address", "无详细地址"))
            poi_location = str(poi["location"])
            poi_tel = str(poi.get("tel", "无联系方式"))
            poi_info = poi_name + ";" + poi_adname + ";" + poi_address + ";" + poi_location + ";" + poi_tel + "\n"
            poi_info = poi_info.encode('gbk', 'ignore').decode("gbk", "ignore")    #避免编码错误
            with open("poi_gaode.txt", 'a') as f:
                f.write(poi_info)
            print("正在写入数据...")
print("数据提取完成")
f.close()

Meu negócio não está desenvolvido aqui, 30.000 ligações são mais que suficientes. .
Insira a descrição da imagem aqui
Os resultados são os seguintes:
Insira a descrição da imagem aqui
Insira a descrição da imagem aquiObrigado novamente ao autor original por sua contribuição!
@wenlulan

Artigo de referência: https://blog.csdn.net/weixin_47796965/article/details/108372378

Acho que você gosta

Origin blog.csdn.net/u010472858/article/details/108486414
Recomendado
Clasificación