前言
前段时间做了一个网点采集的需求,需求里有行政区的字段要求,但是拿下来的数据是经纬度,因此需要将经纬度映射成行政区,但是数据量也不大而且还都是上海的,没有必要去找地图的官方API,因此决定用mysql的geometry这数据类型来解决
geometry
具体的介绍可以看这个文章
MySQL Geometry的使用
我这次用到的很简单,数据结构用到了点坐标和多面
数据来源
mysql只是提供一个存储处理的工具,还是得有省市的点和面坐标,可以从阿里云的数据可视化平台里找到
阿里云地理小工具
导入到mysql之后就是这样的
映射代码
直接贴代码,拿下来改改表名就可以用了
from db_config import engine_crawler
import pandas as pd
if __name__ == '__main__':
df=pd.read_sql("select * from kuaidian_copy1 where 行政区 is null",engine_crawler())
for index,row in df.iterrows():
jingdu=row['经度']
weidu=row['维度']
sql=r"""SELECT
id,
NAME,
ext_path,
polygon
FROM
AreaCity_Geo_20230301
WHERE
ST_intersects ( polygon, ST_GeomFromText ( 'POINT({} {})', 0 ) ) =1""".format(jingdu,weidu)
df_1=pd.read_sql(sql,engine_crawler())
if len(df_1)!=0:
qu=df_1['ext_path'][0]
sql_update="update kuaidian_copy1 set 行政区='{}' where id={}".format(qu,row['id'])
print(sql_update)
engine_crawler().execute(sql_update)