AOI 坐标串转 GIS 数据
Overview
从高德 / 百度 / 腾讯地图抓到的 AOI 边界,本质上是一长串用分号隔开的坐标对。本技能把它拆成经纬度两列,并直接产出能拖进 QGIS / ArcGIS 的 Shapefile —— 同时完成 GCJ-02 / BD-09 到 WGS-84 的纠偏,这是最容易被忽略、也最容易毁掉一张图的一步。
何时使用
- 用户贴来一段
103.588,30.961;103.589,30.961;...这样的坐标串 - 用户说「拆成经度纬度两列」「做个 excel 表格」
- 用户说「转成 shp」「导进 ArcGIS / QGIS」
- 用户的数据来自中国境内商业地图,需要判断和纠偏坐标系
运行前:确认依赖
脚本需要 openpyxl(写 Excel)和 pyshp(写 Shapefile)。缺哪个就跳过哪个格式,不会整体失败,但首次使用应先装好:
pip install openpyxl pyshp
Windows 本机若用隔离环境,python 解释器路径见下方「本机环境」一节。
工作流
第 1 步:判定源坐标系与书写顺序
查 references/crs-cheatsheet.md 的对照表。默认假设:
- 高德 / 腾讯 / 微信 →
--source-crs gcj02,顺序多为lng-lat - 百度 →
--source-crs bd09,顺序需确认 - 天地图 / OSM / Google Earth / 测绘院 CAD →
wgs84或cgcs2000
顺序的土办法判定:在中国境内经度 73–135、纬度 3–54。若第一个数落在 3–54、第二个数落在 73–135,就是 lat-lng。
不确定的时候,把坐标首尾点报给用户让他对照地图确认,不要猜。 判错方向会导致点落在完全不同的省份。
第 2 步:运行脚本
python scripts/aoi_to_gis.py --input "103.588,30.961;103.589,30.961;..." \
--name 熊猫谷 --outdir ./out
常用参数:
| 参数 | 说明 |
|---|---|
--input |
坐标串本身;坐标很长时也可用 --file path.txt |
--name |
要素名,同时用于输出文件名和属性表 Name 字段 |
--outdir |
输出目录,不存在会自动创建 |
--source-crs |
gcj02(默认)/ bd09 / wgs84 / cgcs2000 |
--order |
lng-lat(默认)/ lat-lng |
--formats |
xlsx,shp,geojson(默认全出),可只选需要的 |
--close-ring |
auto(默认,未闭合则自动补)/ yes / no |
--no-zip |
不打包 zip |
输入串支持多部件:lng,lat;lng,lat|lng,lat;lng,lat,用 | 分隔多个环。
第 3 步:读脚本输出的体检报告
脚本会自动打印并写入 Excel「说明」表,必须逐条检查:
- 节点数与闭合状态 —— 未闭合会无法成面
- 自相交警告 —— AOI 数据常见,成面后 GIS 里会显示异常,需要人工修
- 面积 / 周长 / 外接矩形 —— 用来做尺度对照,也是判断数据是否合理的最快手段
- 坐标偏移量 —— 脚本会算出来「WGS-84 相对源坐标向西 X m、向北 Y m」
脚本自带三道体检,触发时不要忽略:
| 体检项 | 表现 | 怎么办 |
|---|---|---|
| 经纬度填反 | 直接中止并报错,不生成文件 | 换 --order 重跑 |
| 自相交 | 警告,并指出第几段 | 人工修点,或转线不用面 |
| 面积异常小(< 外接矩形 1%) | 警告 | 几乎都是自相交导致面积抵消 |
若用户给的坐标串触发了中止,把报错原话转给用户并给出修正建议,不要自行猜测着改数据。
第 4 步:交付时必须说明的三件事
无论用户问没问,都要讲:
- 用哪套文件。叠加卫星影像、和甲方 CAD 对位,一律用
*_WGS84.shp;要导回高德/微信看,才用*_GCJ02.shp。两套在属性表CoordSys字段有标注。 - AOI 不是红线。商业地图的 AOI 是管理/营业边界,不等于用地权属、不等于研究范围,通常比实际场地小。只能当底图参考。
- 面积是球面近似值,精度约 0.5%;正式出图前应在投影坐标系下重算。
第 5 步:呈现结果
用 present_files 交付 xlsx(最优先)和 zip。若用户只需要 Excel,仍建议顺带留着 shp —— 最终目的通常是进 GIS,多这一步不费力。
输出文件清单
以 --name 熊猫谷 为例:
熊猫谷_界址点坐标.xlsx 序号/环编号/经度_源CRS/纬度_源CRS/经度_WGS84/纬度_WGS84/备注
熊猫谷_界址点坐标.xlsx → 第二张表「说明」 元信息、量算结果、三条警告
熊猫谷_GCJ02.shp/.shx/.dbf/.prj/.cpg 原始坐标系
熊猫谷_WGS84.shp/.shx/.dbf/.prj/.cpg 纠偏后,叠加影像用这个
熊猫谷_GCJ02.geojson / 熊猫谷_WGS84.geojson
熊猫谷_坐标与shp.zip
.cpg 文件(内容 UTF-8)保证 ArcGIS 读中文字段不乱码。
本机环境(Windows)
隔离 venv 路径,直接用绝对路径调用:
C:\Users\hanerutsuru\.workbuddy\binaries\python\envs\default\Scripts\python.exe
系统 bash 里 coreutils(ls/rm/tail 等)不在 PATH,需要用 find / 删文件这类操作时改用 Python 或 Glob/Grep 工具,不要在 bash 里硬试。
延伸判断
- 面积量算若用户要求精确,提示投影到 3 度带高斯-克吕格(成都一带 EPSG:4544,上海一带 EPSG:4547),别用 Web Mercator。
- 若用户拿 AOI 面积和某个规范指标做对照(如「一个二阶段野化培训圈 0.2–0.3 km²」),主动帮他做这个尺度对比,往往比单纯交付文件更有价值。
- 若用户后续要叠加分析(坡度、敏感性评价),提醒先把所有图层统一到同一投影坐标系,而不是只统一地理坐标系。