
简介面向地理信息系统专业人员、研究人员及政策制定者的阿拉善盟区县级别行政区划矢量数据包包含阿拉善盟下辖阿拉善左旗、阿拉善右旗和额济纳旗三个旗的行政边界多边形及属性记录可解决区县级地理底图缺乏、行政边界不清晰等问题适用于地理分析、城市规划、生态保护、灾害管理等多种场景。资源为RAR压缩包共十七个文件核心包括存储几何边界的矢量主文件、存储区县属性信息的数据表、定义投影坐标系统的投影文件以及建立空间索引辅助文件可被ArcGIS、QGIS等主流地理信息系统软件直接加载与编辑整体仅八十五KB轻量易用。目前已有四百七十五人学习或下载适合需要阿拉善盟区县级基础底图的地理信息初学者或区域专题研究者尤其适合内蒙古相关研究与教学制图。压缩包内附带坐标系统定义与元数据文件便于校验空间参考属性表包含区县名称、行政区划代码等字段可快速进行地图制图、空间查询与区域统计分析。数据支持坐标转换便于与多源地理数据叠加是开展阿拉善盟地域分析的实用基础资料。1. 阿拉善盟区县级别行政区划shp一份文件省掉半套制图流程做过内蒙古西部项目的人都知道网上不少“全国行政区划shp”在阿拉善盟这里只给一个盟级面打开属性表想找阿拉善左旗、阿拉善右旗、额济纳旗的边界结果一样都没有。就算下载到旗县全量包额济纳旗边界又经常和邻省线状要素交叠处理起来比重新画一份还麻烦。阿拉善盟区县级别行政区划shp文件就是专门补这个缺口的它把阿拉善盟下辖三个旗县做成标准矢量面带名称、区划代码和可用的几何拓扑可以直接用于日常出图、面积核算和空间分析。写这篇笔记面向的是GIS从业者、规划设计院、自然资源和农牧口基层人员目标是让不同经验的人都能在今天之内把这套数据跑通。2. 拿到阿拉善盟区县shp之前数据源、坐标系与属性先对齐2.1 全国shp与盟市专区先确认是“盟界面”还是“旗县面”很多人在找“中国行政区划shp怎么下载”时下载到的其实是全国地市级面文件。在ArcGIS里加载后阿拉善盟在“市”这一级有一个面但面内部没有旗县边界。这种数据只能表示阿拉善盟整体轮廓没法按区县统计。而标题说的是“区县级别”所以第一步不是急着下载而是确认数据粒度。常见做法是去找县级或旗县级行政要素不要把所有希望寄托在一份全国shp上。我实际项目中判断粒度用10秒就能完成打开属性表看阿拉善盟地名所在行如果还有下一级名称字段比如“区县名”“旗县”说明数据到县级如果只有“盟”没有下级就要换数据。另一种更隐蔽的情况是文件包里同时出现“省1”“省2”这种图层名。很多老工程师会把“省1”当省面“省2”当省界线但这只是少数打包者的习惯不是通用标准。最稳妥的办法是用命令行工具看图层类型或者直接拖进QGIS看它是面还是线再决定拿它当底图还是当边界参考。2.2 三条可靠来源天地图、GeoJSON转换和本地测绘成果行政边界不是普通POI更新频率和发布口径有好几套。我一般把来源分成三类按项目用途选数据源粒度常用坐标系为什么选它天地图/国家基础地理信息中心到县级CGCS2000官方口径边界相对规范适合验收材料阿里云DataV GeoAtlas到区县WGS84拿GeoJSON方便前端可视化最快已有测绘成果或委托外业到乡镇或更细按项目统一勘界、确权类项目必须用有法律效力的成果如果你只是做一张专题图或在Web地图里展示用GeoAtlas的JSON转成shp就够了。如果项目要报送自然资源主管部门那就别用网上打包数据直接从天地图或本单位测绘成果里提取。这里有个容易被忽略的点天地图提供的数据通常是按图幅或服务发布不是直接给你一个“阿拉善盟区县.shp”所以还要经历下载、拼接、按盟界裁剪的过程。2.3 用GeoJSON转shp一条ogr2ogr命令解决常见做法是先从GeoAtlas拿到全国县级GeoJSON再按adcode过滤出阿拉善盟的三个旗县。GeoJSON本身是WGS84地理坐标转成ESRI Shapefile用GDAL命令行最省事ogr2ogr -f ESRI Shapefile alshaa_quxian.shp alshaa_quxian.json -lco ENCODINGUTF-8 -preserve_fid这里的-f ESRI Shapefile指定输出格式-lco ENCODINGUTF-8让输出dbf属性表用UTF-8编码-preserve_fid尽量保留JSON里的要素标识后续用adcode关联属性时不容易乱。如果你还不会用命令行可以在QGIS里加载GeoJSON右键图层点击“导出”格式选“ESRI Shapefile”编码选UTF-8坐标系保持WGS84。很多人喜欢用在线“json转shp网站”转换数据量小的时候没问题但遇到阿拉善左旗这种边界节点密集、面内带孔洞的多边形网页工具很容易丢失孔洞或把多部件面拆碎所以本地转换更稳妥。2.4 坐标系对齐WGS84、CGCS2000和北京54的区别阿拉善盟东起贺兰山西麓西至额济纳旗经度范围接近十度如果用3度带高斯克吕格投影一个盟级shp会被切成两个甚至三个分带。因此许多公开发布数据直接用CGCS2000地理坐标系代码4490或WGS84而不是统一的高斯投影。拿到shp后我第一件事就是看.prj文件里的坐标系统。如果写的是“GCS_Beijing_1954”说明这是老北京54坐标系和现在在线地图默认的WGS84叠加会整体偏移几百米。文件命名里带“北京shp”的老数据尤其容易出现这个问题。3. 用Python和QGIS把阿拉善盟区县shp加工成可用底图3.1 读取shp先看字段和几何类型再决定要不要清洗拿到阿拉善盟区县shp后我习惯用GeoPandas先读一遍因为它的打印信息比ArcGIS更直接import geopandas as gpd gdf gpd.read_file(alshaa_quxian.shp, encodingutf-8) print(gdf.columns.tolist()) print(gdf.head(3)) print(gdf[name].tolist()) print(gdf.geometry.geom_type.unique()) print(gdf.crs)这段代码会依次输出字段名、前三条记录、旗县名称列表、几何类型和坐标系。注意encoding参数如果属性表是GBK编码而这里写utf-8name列就会乱码报错时不一定是文件坏了先换encodinggbk再试。几何类型输出应该是Polygon或MultiPolygon如果出现LineString或Point说明这个shp根本不是面数据后续算面积、做裁剪前要先转面。crs输出如果显示EPSG:4326或EPSG:4490至少是地理坐标可以直接用在线底图做视觉叠加如果输出是None说明缺少prj文件需要补定义投影。3.2 坐标系识别为什么阿拉善盟的shp经常“不按常理出牌”阿拉善盟跨经度太大很多原始数据从国家基础地理信息中心拿下来时是分开的图幅或分带图层。你在文件夹里看到“ALSRX_49”“ALSRX_50”这类分带命名的shp其实它们是同一个行政区被投影带切开的成果。直接合并到ArcGIS里两个图层空间位置对不上因为坐标系定义不同。这种情况必须先把所有分带数据定义成同一个地理坐标或同一个投影再做“合并”工具。还有一种情况是.prj文件存在但内容为空只有一行注释ArcGIS会判定为未知坐标系。解决方法是手动从.gfs文件或源数据说明里找到真实坐标系统用“定义投影”重新指定然后检查边界和影像底图的偏差。做这一步时不要凭感觉选一个通用坐标系否则后面所有面积、拓扑计算都会错。3.3 清洗与投影转换一键脚本把数据变成可用状态下面这段脚本我常用来清洗初级数据做完会得到一个字段干净、几何有效、坐标系明确的阿拉善盟区县shpimport geopandas as gpd gdf gpd.read_file(alshaa_quxian_raw.shp, encodinggbk) # 去掉空几何和无效几何避免后续拓扑报错 gdf gdf[gdf.geometry.notna() gdf.geometry.is_valid].copy() # 用区划代码前缀筛出阿拉善盟三个旗县1529开头 alxa gdf[gdf[adcode].astype(str).str.startswith(1529)].copy() # 重命名字段方便出图 alxa alxa.rename(columns{name: 旗县名, adcode: 区划代码}) # 统一转成WGS84地理坐标适合在线底图叠加 alxa_wgs84 alxa.to_crs(epsg4326) # 写出清洗后的shp alxa_wgs84.to_file(alxa_clean.shp, encodingutf-8, driverESRI Shapefile)逻辑说明先读原始shp过滤掉空几何和无效几何因为面拓扑坏掉后在QGIS里可能看不到但计算时会出现警告。再用adcode前缀1529筛出阿拉善左旗、阿拉善右旗、额济纳旗这比按名称筛选稳定因为中文名可能带全角空格。重命名字段后统一转成EPSG:4326这是Web地图最常见的坐标系。最后写出新shp。参数上要注意encodinggbk只影响属性表读取不影响几何如果你确定原始文件是UTF-8编码改成utf-8即可。如果后续要做面积统计不要用这里输出的WGS84需要再投影到等积投影。4. 阿拉善盟区县shp使用避坑乱码、偏移、拓扑与修复4.1 属性表中文乱码不是文件坏了是编码标签丢了现象在ArcGIS里打开shp属性表“阿拉善左旗”显示成类似“°¢Àɽ×óÆì”的乱码。原因DBF属性表是GBK编码但ArcGIS没能识别代码页少数情况下文件本身是UTF-8却被ArcGIS按GBK读。解决在QGIS中加载shp时把编码手动改为GBK或者在shp同目录下新建一个alshaa_quxian.cpg文件里面写UTF-8或GBK让GIS按标签读。更彻底的做法是用GDAL重新导出一次ogr2ogr -f ESRI Shapefile alxa_utf8.shp alxa_gbk.shp -lco ENCODINGUTF-8这条命令会把GBK读取的shp重新编码成UTF-8并写一份新文件。我遇到乱码后不会再手动重输字段因为三五个字段好办几十个字段会疯。4.2 边界整体偏移几百米投影坐标系新老没统一现象把阿拉善盟区县shp叠加到天地图影像上三个旗县边界整体向东或西北偏移几十米到几百米。原因源数据是1954年北京坐标系或1980年西安坐标系没有转换到CGCS2000/WGS84。文件里只要保留老坐标系叠加时就会出现“看起来合理但位置不对”的状态。解决如果你手里只有老坐标系的shp正确做法是找控制点做七参数转换或者使用GIS软件自带的动态转换功能。ArcGIS里在数据框属性设置高精度变换QGIS里在“层→坐标系→变换”中配置布尔莎参数。如果项目只要求地图示意可以在QGIS中将shp的坐标系重新定义为WGS84再平移校准但正式成果不能用这种方法。4.3 shp打不开或要素为0先跑shapechk再决定要不要重画现象双击shp时提示无法识别或在QGIS中加载后图层存在但是要素数为0。原因shp文件缺少.shx索引或.dbf属性表记录数与.shp几何记录数对不上。常见于从微信、网盘下载时丢文件或者第三方软件只写了部分二进制。解决先用shapechk修复工具检查变形。如果它提示文件损坏但能修复就让它重新生成索引如果修复后依然没有要素那就用GeoPandas读一次能读出来就在QGIS里另存为新shp读不出来就直接重新下载。形状修复工具只修文件结构不修边界坐标不要把修复当成万能后悔药。4.4 三旗边界不咬合缝隙和重叠的常见出处现象阿拉善左旗和阿拉善右旗交界处出现细长缝隙或者额济纳旗和左旗的重叠区域在转出KML后特别明显。原因三个旗县的矢量边界来自不同批次、不同精度的测绘成果公共边没有做拓扑统一。全国县级shp里这种情况非常频繁。解决在ArcGIS里用“拓扑”工具把两个面图层加入同一个拓扑规则设为“不能重叠”和“不能有缝隙”然后根据误差容差做对齐。QGIS里也可以用v.clean工具参数选snap和break再重新构建面。注意容差不要设太大否则会把旗县边界拉变形。4.5 面积计算结果离谱用经纬度坐标直接算面积现象在Python中用shapely计算每个旗县面积结果比官方公布国土面积大几十倍或者单位混乱。原因shp坐标是度面面积的计算结果是“度平方”而大家想拿到的单位是平方千米或亩。解决不要在地理坐标系上直接算面积。QGIS字段计算器里用$area表达式它会按椭球面积计算结果除以1000000可以得到平方千米。ArcGIS里可以使用“计算几何”并选择面积单位。如果要用Python先投影到等积投影alxa_aea alxa_wgs84.to_crs(projaea lat_129 lat_245 lat_024 lon_0105 datumCGCS2000) alxa_aea[面积_km2] alxa_aea.geometry.area / 1e6这段代码使用Albers等积圆锥投影投影参数覆盖中国中西部算出来的面积接近真实值。阿拉善盟跨经度带多用高斯投影做面积反而不好。5. 把阿拉善盟区县shp送进其他工具KML、GeoJSON、TXT与MapGIS转换实操5.1 ArcGIS里转KML不是“另存为”而是“图层转KML”ArcGIS中直接右键shp导出KML会把几何转成简易数据属性字段丢失严重。我一般用工具箱里的“图层转KML”工具。把阿拉善盟区县shp加载到ArcMap或ArcGIS Pro打开搜索工具输入“图层转KML”输入图层选择shp输出位置填alxa.kmz参数里把“输出比例”设成10000或20000然后运行。这里容易踩坑的是比例尺参数如果设得太大KML文件会包含过多边界节点网上地图加载慢设得太小边界会变得平直尤其在巴丹吉林沙漠那条带弧度的边界上会难看。另外KML是基于WGS84经纬度的ArcGIS会自动把CGCS2000转成WGS84前提是.prj文件保持完整。转出来后用Google Earth或QGIS验证一次重点看阿拉善盟与甘肃、宁夏交界是否出现锯齿状跳变。5.2 用GDAL一行命令转GeoJSON、KML和回转shp如果你需要的是Web前端能直接加载的GeoJSON或者要给其他部门交KML最快的是GDAL三行命令ogr2ogr -f GeoJSON alshaa.geojson alsha_clean.shp ogr2ogr -f KML alshaa.kml alsha_clean.shp ogr2ogr -f ESRI Shapefile alsha_roundtrip.shp alshaa.kml -lco ENCODINGUTF-8第一条命令把清洗过的shp转成GeoJSON转换规则是按.shp的属性表原样输出字段名所以之前重命名的“旗县名”和“区划代码”会出现在GeoJSON里。第二条命令转KMLKML格式只保留WGS84坐标如果你的shp已经是WGS84就不用加任何参数。第三条命令是KML转回shp的逆操作很多人问kml转shp怎么做其实就是这条命令注意写-lco ENCODINGUTF-8否则回到GIS里又变成乱码。在线转换工具能做短小数据的互转但阿拉善盟边界节点的密度会撑爆网页请求本地命令更稳。5.3 shp转TXT/CSV导出属性表而不是导出坐标“shp转txt”这个搜索词我见得很多。如果你的目标是拿到旗县名称、区划代码、面积这些属性可以用Python把dbf转成文本import geopandas as gpd gdf gpd.read_file(alsha_clean.shp, encodingutf-8) attrs gdf.drop(columnsgeometry) attrs.to_csv(alxa_attributes.txt, sep\t, indexFalse)这段代码读入shp后用drop把geometry列去掉再写成制表符分隔的txt。之所以不用逗号分隔是怕旗县名称和备注字段里本身带逗号用tab更稳定。如果你连每个旗县的中心点坐标也要可以用representative_point()提取一件代表性坐标写入列cent gdf.geometry.representative_point() gdf[中心点_经度] cent.x gdf[中心点_纬度] cent.y这和ArcGIS里“要素转点”是同一个逻辑用途是生成标注位置。反过来如果你手里只有旗县政府驻地的Excel表想把它转成点shp再关联到区县面ArcGIS里用“XY表转点”工具然后在属性连接里把点层与面层按位置关系做空间连接这就是excel点转shp常见的落地方式。5.4 转MapGIS线文件先面转线再导MapGIS很多老单位还在用MapGIS 6.7把阿拉善盟区县shp交过去的流程通常是先提取边界线再导入MapGIS的线文件。直接用“文件转换”导shp面文件到MapGIS里会变成乱线尤其是带岛屿或孔洞的多边形导完会出现飞点。我一般先用ArcGIS或QGIS做一次“面转线”ogr2ogr -f ESRI Shapefile alxa_lines.shp alsha_clean.shp -nlt MULTILINESTRING或者用QGIS的“提取边界”工具得到单独的线shp再在MapGIS里导入。导入时注意投影参数选CGCS2000不要默认选西安80线宽设置建议调成0.1mm以上否则在MapGIS里显示近乎消失。这个方法也适用于CAD文件如果规划方交过来的是dwg先把dwg转shp用CAD的闭合多段线转成面再走同样的“面转线”流程。dwg转shp后常见问题是闭合线端点没接上可以用QGIS的“修复几何”再补一次。6. 进阶用法用一张阿拉善盟区县shp做空间连接与面积核查6.1 按旗县归属做空间连接把点位数据挂到旗县面上手里如果有牧民定居点、样地监测点这类点数据最常做的事情是判断每个点落在哪个旗县。用GeoPandas一行代码就是空间连接import geopandas as gpd points gpd.read_file(projects.shp) alxa gpd.read_file(alxa_clean.shp) merged gpd.sjoin(points, alxa, howleft, opwithin) print(merged.groupby(旗县名).size())howleft表示保留点位所有记录opwithin表示判断点时是否在面内。输出会得到落在阿拉善左旗、右旗、额济纳旗三个旗县的样本量。如果要处理落在边界上的点opintersects会把边界线上靠近两边的点都算进去重复计数所以优先用within。如果你担心SHP里有点在境外或邻省只需看计数结果里有None值就说明数据越界了。6.2 面积核查与批量出图让边界文件产生二次价值我拿到阿拉善盟区县shp后还会做一件小事按旗县分组统计面积比对官方公开的数字差值超过5%基本说明数据源有问题。area_stat alxa.to_crs(projaea lat_129 lat_245 lat_024 lon_0105 datumCGCS2000) print(area_stat.groupby(旗县名)[geometry].area / 1e6)这段代码输出三个旗县的平方公里面积只做数据质量判断不替代国土资源年报。批量出图则可以用QGIS的Atlas功能主图层选择阿拉善盟区县shp覆盖图层选择你的业务点或影像按“旗县名”字段生成三个分页图。如果想做网格化统计还可以在QGIS中先生成渔网再用阿拉善盟区县shp裁剪做渔网分割shp后的密度分析。我自己的两个习惯一是拿到这类shp先打印crs和字段名存成小抄二是绝不直接拿经纬度坐标算面积。哪一次偷懒跳过检查后面叠加在线地图就会翻车。希望这份从数据源到跨平台转换的完整路径能帮到你在一个个项目里少走弯路。本文还有配套的精品资源点击获取