Python obtiene el rango especificado de PDI a través de la interfaz del mapa de Gaode

Fuente de referencia: https://blog.csdn.net/weixin_47796965/article/details/108372378

Los datos de PDI de AutoNavi Map están abiertos para su uso. Recientemente vi un artículo de referencia y decidí probarlo. La solicitud de uso gratuito devuelve hasta 1000 piezas de información. Este artículo utiliza principalmente solicitudes de bloque para el área objetivo para lograr eludir las restricciones y lograr el objetivo de resolver el problema.

Pasos:
1. Obtenga el rango del área objetivo del mapa de AutoNavi
2. Divida el rango objetivo en una cantidad apropiada de áreas y genere el punto central
3. Calcule los cuatro puntos del punto central y asigne el punto central
4 Escribe el programa. De acuerdo con la función de búsqueda de polígono abierto de AutoNavi Map LBS, se realiza la recuperación y adquisición de PDI de cada área

1. Tome Kunming como ejemplo: obtenga el alcance de la ciudad de Kunming en el mapa de Gaode

Abra la plataforma de alto peso, registre y autentique a los desarrolladores individuales e inicie sesión

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

Ingrese los parámetros como se muestra en la figura a continuación
Inserte la descripción de la imagen aquípara obtener el rango de límite similar a un punto, como el parámetro de polilínea en distinto en la figura a continuación. Lo copiamos al mundo, buscamos las coordenadas del área pequeña y lo eliminamos, y luego copiamos los datos restantes en Excel en filas, y luego realizamos la operación de columna en Excel, agregamos encabezados xey y los guardamos como Excel 97 -Archivos 2013xls para facilitar la siguiente operación de arcmap.

Aquí, el autor original encontró el problema de las anomalías causadas por un área pequeña en el proceso de procesamiento de datos en Shenzhen, pero no encontró el problema del procesamiento de datos en Kunming, pero encontró el problema de no poder guardar todos los datos en Por lo tanto, este artículo usa el formato csv para el almacenamiento, y las operaciones de regularización de datos relacionadas se procesan directamente usando Python, lo que trae algunas pequeñas diferencias.

Inserte la descripción de la imagen aquí
La regulación de datos aquí es principalmente: 1. Separe la latitud y la longitud en columnas, 2. Cambie el ";" a dos nuevas líneas. Los datos del código y los resultados son los siguientes:

#%%

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()

Inserte la descripción de la imagen aquíResultado de conversión
Inserte la descripción de la imagen aquí

En segundo lugar, ArcGIS convierte puntos de coordenadas en extensión espacial.

Importe los datos csv en ArcGIS, convierta los datos en archivos SHP y luego realice una operación punto a línea en los datos.

Todas son operaciones de rutina, por lo que no las describiré, si es necesario, puede dejar un mensaje y escribiré un artículo para complementarlo. Puede consultar el artículo del autor original.

Al importar datos, el sistema de coordenadas debe establecerse en WGS1984. Aunque es diferente del sistema de coordenadas de AutoNavi Map, la diferencia no es demasiado grande y puede haber algunos errores, pero puede ser mínima en el estudio de la prefectura. ciudades niveladas.

3. Dibuja la red de pesca y obtén las coordenadas del punto central de la red de pesca.

El objetivo es utilizar el rango de cuatro a uno construido por redes de pesca, utilizando la función de recuperación de POI poligonal proporcionada por Gaode Maps

  1. Generación de rejilla

arctoolbox >> herramientas de gestión de datos >> clase de entidad >> crear red de pesca

Inserte la descripción de la imagen aquíConfigurar rangos

Inserte la descripción de la imagen aquíFinalmente, la red de pesca se muestra en la figura
Inserte la descripción de la imagen aquíy los puntos fuera de la cuadrícula redundante se eliminan, reduciendo la descarga de datos redundantes. El resultado final es el siguiente

Inserte la descripción de la imagen aquí

Verifique la extensión de la red de pesca de cuatro a cuatro, determine las cuatro a cuatro de cada cuadrícula y asigne las coordenadas de cuatro a latitud y longitud al punto central
Inserte la descripción de la imagen aquí

  1. Calcule la latitud y longitud del punto central de la red de pesca y las coordenadas
    Inserte la descripción de la imagen aquí
    de la cuatro a la cuarta coordenada de la ciudad de Kunming, calcule el tamaño de cada red de pesca, aquí está la imagen:
    Inserte la descripción de la imagen aquí
    coloqué 10 cuadrículas horizontalmente, por lo que la longitud horizontal de cada cuadrícula es:) / 10

Establecí 15 cuadrículas verticalmente, por lo que la longitud de la cuadrícula vertical es: (de arriba a abajo) / 15

Dado que el punto es el punto central, debido a que las coordenadas del punto central se conocen en el paso anterior, los cuatro puntos de cada punto central se pueden configurar en lotes a través de los parámetros de cuadrícula de la misma especificación.

Arriba = latituta + (de arriba a abajo) / 15/2

Abajo = latituta - (de arriba a abajo) / 15/2

Izquierda = logitute - (derecha-izquierda) / 10/2

Derecha = logitute + (derecha-izquierda) / 10/2

Hay un error aquí, que puede resultar en una adquisición de datos incompleta. Simplemente vuelva a calcular las líneas centrales superior, inferior, izquierda y derecha de acuerdo con la cuadrícula generada (2021/01/07)

Los ejemplos de resultados son los siguientes:
Inserte la descripción de la imagen aquí

Finalmente adjuntar el código en el artículo de referencia. He modificado algunos aquí, pero hay un problema, es decir, se recorren 100 páginas cada vez, pero a veces no hay tantas páginas. Busqué una explicación, y hay ningún parámetro para devolver el número de páginas., por lo que la eficiencia del código se puede mejorar aún más. (También puede utilizar la simultaneidad segmentada)

Aquí puede solicitar una vez para determinar cuántas páginas de datos hay y luego realizar más solicitudes, lo que ayudará a reducir las solicitudes no válidas y mejorar la eficiencia (2021/01/07)
—————————————————————————————
Desafortunadamente, el método anterior no es factible, el recuento no representa la cantidad de datos obtenidos. Para guardar el número de solicitudes y mejorar la eficiencia, solo puede juzgar por el valor nulo, de lo contrario causará problemas como la pérdida de datos (9 de enero , 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()

Mi negocio no se desarrolla aquí, 30.000 llamadas son más que suficientes. .
Inserte la descripción de la imagen aquí
Los resultados son los siguientes: ¡
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquíGracias de nuevo al autor original por su contribución!
@wenlulan

Artículo de referencia: https://blog.csdn.net/weixin_47796965/article/details/108372378

Supongo que te gusta

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