我们做项目时,有时必不可少需要获取到所在区域的工业企业,该如何获取其信息呢?
大多数情况下,我们会一点一点对着百度地图去寻找,这样会非常耗时;当我们努力花两晚上找到了,也未必找得全,兢兢业业的我们可能会因为一直持续性承担最基础最繁杂的工作而无(被)法(边)成(缘)长(化);那么接下来便会大大提高我们的工作效率了,主要方式如下:
1、获取百度地图的AK,打开:https://lbsyun.baidu.com/登录百度账号。在控制台中创建应用,并获得AK码,这个码只有三次有效期;
2、运行代码。代码包括如下步骤:1、输入百度AK;2、搜索区域;3、给出工业关键词;4、百度POI (point of interest, 包含唯一ID,名称,经纬度坐标,类别标签以及地址,同时也有电话及营业时间等)关键词搜索;5、运行主程序;6、保存excel及生成GIS点位文件。
搞定!代码附下
-- coding: utf-8 --
import requests
import time
import pandas as pd
import geopandas as gpd
from shapely.geometry import Point
==============================
1. 百度地图AK
==============================
AK = "QCXXXXXXXXXXXXXXXXXXXXz"(进行替换)
==============================
2. 搜索区域
==============================
REGIONS = ["上饶市信州区"]
==============================
3. 工业关键词
==============================
KEYWORDS = [
"制造",
"工厂",
"加工厂",
"生产基地",
"实业有限公司",
"机械",
"设备制造",
"自动化",
"电子",
"光电",
"光学",
"新材料",
"金属",
"铜",
"新能源",
"电池",
"光伏"
]
==============================
4. 百度POI区域搜索
==============================
def baidu_search(keyword, region):
url = "https://api.map.baidu.com/place/v3/region"
# 百度分页
for page in range(0,20):
params={
"query":keyword,
"region":region,
"page_num":page,
"page_size":20,
"output":"json",
"ak":AK
}
try:
r=requests.get(
url,
params=params,
timeout=10
)
data=r.json()
except Exception as e:
print(e)
break
if "results" not in data:
break
if len(data["results"])==0:
break
for item in data["results"]:
loc=item.get(
"location",
{}
)
result.append({
"uid":
item.get("uid"),
"企业名称":
item.get("name"),
"地址":
item.get("address"),
"电话":
item.get("telephone",""),
"纬度":
loc.get("lat"),
"经度":
loc.get("lng"),
"搜索关键词":
keyword,
"区域":
region
})
time.sleep(0.3)
return result
==============================
5. 主程序
==============================
def main():
for region in REGIONS:
for keyword in KEYWORDS:
print(
"正在搜索:",
region,
keyword
)
data=baidu_search(
keyword,
region
)
all_company.extend(data)
print(
"原始数量:",
len(all_company)
)
# ==============================
# 去重
# ==============================
df=pd.DataFrame(
all_company
)
# 删除无坐标
df=df.dropna(
subset=[
"经度",
"纬度"
]
)
# UID去重
df=df.drop_duplicates(
subset=[
"uid"
]
)
print(
"去重后:",
len(df)
)
# ==============================
# 保存Excel
# ==============================
df.to_excel(
"上饶信州区工业企业.xlsx",
index=False
)
# ==============================
# 生成GIS点文件
# ==============================
geometry=[
Point(x,y)
for x,y in zip(df["经度"],df["纬度"])]
gdf=gpd.GeoDataFrame(
df,
geometry=geometry,
crs="EPSG:4326"
)
gdf.to_file(
"上饶信州区工业企业.shp",
encoding="utf-8"
)
print("完成!")
if name=="main":
main()
如此方式,便可获取到研究区域内的工业企业及其经纬度坐标值以及shp点位。
此方法也可应用于研究区域内排水户的查找,如居住小区商业办公等
