ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

GIS数据交付实战:shape、mxd与GeoTIFF三件套标准化指南

GIS数据交付实战:shape、mxd与GeoTIFF三件套标准化指南 简介资源为羌塘高原区的标准shape文件包面向GIS科研人员与制图用户集成地理位置与海拔高度数据可直接用于区域专题制图、空间分析与论文插图。包体共14个文件约186.07MB核心包含可编辑mxd制图工程、标准shp系列文件、TIF格式标准成图并附带TIF格式全国高程数据、中国行政区划及世界国家级数据方便按需裁剪docx文档可在下载前预览成图样式。目前已有80人学习。借助可编辑mxd用户可根据出版规范或个人偏好灵活调整符号、图例与注记标准shape与TIF成图则保证开箱即用免去从原始数据加工的繁琐流程。配套的国界与行政区划shape为需要叠加边界、裁剪研究范围或制作高标准地图的场景提供充分支撑适合人文地理、生态遥感及地学相关课题使用。1. 羌塘高原shape文件mxd、shape、TIF三件套的正确打开方式在羌塘高原这类大范围高海拔区域做数据交付最常见的不是缺数据而是数据“能用但没法验”。甲方或合作方要的往往是一套固定组合可编辑的mxd工程文件、标准shape文件、标准成图TIF。mxd管图面编排和后续修改shape管地理位置和海拔高度等属性TIF管最终出图效果。三件套里只要坐标系、字段设计、成图分辨率任何一环没对齐换个软件打开就会错位。这套交付方式对 GIS 数据生产、测绘内业、自然资源调查和规划制图的人都适用。难点不在ArcMap操作本身而在“标准”两个字什么投影、什么字段类型、什么压缩方式才算能跨软件、跨部门流转。下面按我实际交付时的顺序展开先立标准再搭工程最后出图验收。2. 把地理位置和海拔做成标准shape坐标基准、字段设计与检验2.1 shape的三个文件只是外壳PRJ与编码才是“标准”的关键一个完整的shape文件远不止shp、shx、dbf三个文件。严谨交付时还要带上prj坐标投影文件、cpg字符编码文件、sbn/sbx空间索引以及可选的xml元数据。缺了prj别的软件只能用坐标值硬猜缺了cpg中文属性名打开就是乱码。羌塘高原东西跨多个投影带选坐标基准时不能只图“看着不歪”。常见做法是存储层与工作层分离数据源统一用CGCS2000地理坐标系EPSG:4490保证经纬度字段不随投影变化制图输出时再投影到CGCS2000 3度带高斯投影中央经线按区域选87°E、90°E或93°E即EPSG:4546、4547这类。用途坐标系EPSG说明源数据存储CGCS2000 geographic coordinate system4490经纬度单位适合属性库存储制图投影中西段CGCS2000 / 3-degree Gauss-Kruger CM 87E4546适合83°E–90°E区域制图投影中东段CGCS2000 / 3-degree Gauss-Kruger CM 90E4547适合87°E–93°E区域海拔基准1985国家高程基准—高程值必须写清基准不能只写“海拔”这里有个常被忽略的坑ArcMap识别不出某些高程基准时会把prj降级成unknownshape文件整体仍能打开但跨软件后高程值会被当成普通浮点数。所以高程基准不要只写在图层属性里还要写进交付说明最好同时写进shapefile的xml元数据。2.2 地理位置与海拔高度的字段设计要点shapefile属性字段名最长10个字符超过会被截断截断后字段含义会变得很难猜。交付标准shape时字段名建议全英文、大写下划线风格中文含义写进字段别名。地理位置信息不能只留一个“位置”字符串那对空间分析没有意义。下面是我在高原制图交付里常用的一套字段模板字段名类型长度/精度含义示例NAMEText50地名或点号双湖LONDouble10,6CGCS2000经度88.838400LATDouble10,6CGCS2000纬度32.659500ELEVDouble10,2海拔高度米4923.68ELEV_MINDouble10,2最低海拔4860.00ELEV_MAXDouble10,2最高海拔5020.00SOURCEText30数据来源SRTM_V3REMARKText100备注湖岸点海拔建议单独放一列不要塞进NAME字段。特别是从DEM里提取高程时输出的浮点值往往带很多尾数字段精度不够会四舍五入最高最低海拔也会失真。ELEV_MIN和ELEV_MAX用于面状要素能显著减少后续查询压力。拿到原始数据后我一般会用GDAL先做一轮基础检查确认字段结构和数值范围from osgeo import ogr ogr.UseExceptions() src ogr.Open(rD:\delivery\qiangtang, 0) layer src.GetLayerByName(elev_points) # 字段存在性检查 field_names [f.GetName() for f in layer.schema] required [NAME, LON, LAT, ELEV] for col in required: if col not in field_names: print(missing field:, col) # 坐标值域与海拔值域检查 for feat in layer: lon feat.GetField(LON) lat feat.GetField(LAT) elev feat.GetField(ELEV) if lon is not None and not (79 lon 93): print(lon out of range:, feat.GetFID(), lon) if lat is not None and not (29 lat 37): print(lat out of range:, feat.GetFID(), lat) if elev is not None and (elev -100 or elev 9000): print(elev suspect:, feat.GetFID(), elev) src None这段脚本解决两个高频问题一是坐标写反、经纬度写错导致点跑到国界外二是DEM NODATA值没被过滤直接以-32768这类值进入属性表。实际生产中高程异常值往往不是单纯脏数据而是湖面、雪山和空洞区域造成的需要回到原始影像判断不能直接用0填充。2.3 从“能显示”到“标准”几何与属性完整性检查很多shape文件在ArcMap里打开一切正常一做到空间连接或拓扑检查就报错。原因通常是几何自相交、重复点、空几何。标准交付前至少要跑两遍检查。第一遍是几何检查。在ArcMap里用ArcToolbox Data Management Tools Features Check Geometry对要素类检查完再跑Repair Geometry。跑完看报告不要忽略“空几何”记录空几何在后续加载到PostGIS或超图平台时会直接失败。第二遍是属性与值域检查。除前面脚本查值域外还要确认字段里没有 和空字符串混用的情况。有的shape里NAME为空字符串有的为NULL连接表时匹配不上。统一做法是无数据就留空不填空格字符说明性字段无内容时填UNK。在海拔数据这块还要注意“负值”不一定错。羌塘高原内陆湖泊的湖底、干涸盐湖部分区域在DEM上可能显示负值但基准面如果用EGM2008结果又会不同。所以不能一刀切把所有负值改成0要结合SOURCE字段回溯数据原始版本。3. 构建可编辑mxd数据源组织、符号化与图层结构3.1 可编辑的关键mxd相对路径与数据源打包mxd被称为“可编辑工程文件”但它本身不存数据只存数据源路径。如果路径写死成D:\项目部\2025\qiangtang\data\xx.shp换个电脑就满屏红色感叹号谈何可编辑。标准做法是把mxd与数据放在同一个交付根目录下并在ArcMap里开启相对路径存储。打开菜单File Map Document Properties勾选Store relative pathnames to data sources。需要批处理时用ArcPy设置更直接import arcpy mxd arcpy.mapping.MapDocument(rD:\delivery\qiangtang\map.mxd) mxd.relativePaths True mxd.save() del mxd对应的目录结构推荐做成这样D:\delivery\qiangtang\ ├── map.mxd ├── data\ │ ├── elev_points.shp │ ├── boundary.shp │ ├── lake.shp │ └── hillshade.tif └── output\ └── qiangtang_standard.tif注意mxd所在位置不能比data目录低两级以上。ArcMap在相对路径下如果找不到数据会自动往上层目录找层级太深偶尔会漏掉。mxd工程根目录尽量全英文中文路径在部分ArcGIS 10.x版本导出TIF时会出问题。3.2 用ArcPy统一图层符号与标注mxd的“可编辑”体现在后续还要调图所以图层符号化的统一性很重要。手动点几十个图层太慢常见做法是先做一个模板mxd再用ArcPy批量套用图层符号。下面这段代码处理高频设置图层透明度、标注开关和标注表达式import arcpy mxd arcpy.mapping.MapDocument(rD:\delivery\qiangtang\map.mxd) for lyr in arcpy.mapping.ListLayers(mxd): # DEM山体阴影统一半透明叠到底图上 if lyr.isRasterLayer and hillshade in lyr.name.lower(): lyr.transparency 40 # 高程点显示地名和海拔 if lyr.isFeatureLayer and lyr.name elev_points: lyr.showLabels True lbl lyr.labelClasses[0] lbl.expression [NAME] \ \ [ELEV] lyr.showLabels True mxd.save() del mxd参数说明transparency是0到100的整数值40表示底图透明度40%山体阴影会透出下层影像labelClasses[0]对应图层的第一个标注类别expression里字段名要加方括号字符串拼接用加号和英文引号。这段代码在ArcGIS Desktop 10.4以上版本都能跑ArcGIS Pro如果读mxd需要先用导入工具转换。需要做分级设色时比如把高程点按海拔分成5段手动设置的效率太低。我一般先在ArcMap里手工调好一个图层右键另存为.lyr图层文件再用arcpy.ApplySymbologyFromLayer_management批量应用apply_layer rD:\delivery\qiangtang\symbology\elev_class.lyr target_layer rD:\delivery\qiangtang\data\elev_points.shp arcpy.ApplySymbologyFromLayer_management(target_layer, apply_layer)这样符号在交付后还可以继续编辑不是烧死在图片上这是“可编辑mxd”区别于纯图片出图的核心。3.3 图层顺序、比例尺与固定范围mxd排版落到版式里mxd出图不是简单把图层摞在一起。羌塘高原这种区域图层顺序决定了图面层次是否合理。标准顺序是最底层放影像或山体阴影往上依次是面状水系、等高线、道路与居民点、高程点、边界线最上层放注记。图层序图层名透明度作用1影像/山体阴影40%底图纹理2湖泊/河流面0背景水系3等高线0地形表达4道路0交通要素5高程点0海拔数值6注记0地名标注版式定稿时还必须在数据框属性里锁定Extent。右键数据框进入Data Frame Properties选Data Frame页签在Extent下拉框里选择Fixed Extent然后手动框定羌塘高原主体范围。不做这一步每次打开mxd地图范围都可能受上次操作影响PDF和TIF两次出图范围不一致。mxd里的比例尺最好用“标准比例尺”而不是“自适应比例尺”出图时不会因图框微调而变成难看尾数。图例、指北针、经纬网格也需要放进Layout并在输出前检查“图例显示不全”的经典问题符号太大或图例框太挤在TIF里才能看出来。4. 从mxd导出标准成图TIF分辨率、压缩与CAD定位4.1 导出前的页面与数据框参数设定在ArcMap里切到Layout View去设定页面尺寸。A3是297×420mmA4是210×297mm。如果需要打印到工程图纸或做成汇报挂图一般设置成A2或A1。页面大小会影响最终TIF的像素总量比如A3幅面300DPI时输出尺寸大约是3508×4961像素这个体量在Photoshop和CAD里都比较好处理。DPI参数建议屏幕浏览和快速交付用300印刷出版用600。超过600对矢量要素没有意义只会让TIF文件膨胀到几百MB。打开ArcMap的File Export Map对话框格式选TIFF就可以看到分辨率设置项。4.2 带地理参考的GeoTIFF导出参数与踩坑标准成图TIF不能只是普通图片必须带地理坐标信息否则后续无法与shape套合。ArcMap导出TIF时在Export Map对话框里把Write World File勾上这样会额外生成一个tfw世界文件如果选择Write Georeference Information则把坐标写入TIF自身生成真正的GeoTIFF。ArcPy导出时对应参数是这样的import arcpy mxd arcpy.mapping.MapDocument(rD:\delivery\qiangtang\map.mxd) out_tif rD:\delivery\qiangtang\output\qiangtang_standard.tif arcpy.mapping.ExportToTIFF( mxd, out_tif, PAGE_LAYOUT, resolution300, world_fileTRUE, color_mode24-BIT_TRUE_COLOR, compressionLZW ) del mxd参数说明PAGE_LAYOUT代表按整个版面导出而不是只导数据框resolution300是DPIworld_fileTRUE会生成tfw文件compressionLZW是无损压缩能显著缩小TIF体积而且不损失坐标信息。要注意部分老GIS软件对LZW压缩的GeoTIFF支持不好如果明确是给CAD或其他平台用保守做法是compressionNONE。TFW世界文件只有6行内容非常直观2.50000000 0.0000000 0.0000000 -2.5000000 512345.678 3456789.012第1、4行是单个像素在X、Y方向的地面尺寸米第2、3行是旋转参数标准正北出图都为0第5、6行是左上角像素中心坐标。ArcMap导出时勾选Write World File这6行会自动生成。CAD和很多GIS软件都是靠读这个文件完成影像定位的。4.3 带地理坐标的TIF如何让CAD自动定位“tif影像图怎么在cad中自动定位”这类问题很常见原因是普通TIF在CAD里只能按图幅摆无法与既有线划图对齐。解决路径是把带tfw或内嵌坐标的GeoTIFF插入CAD让CAD从世界文件读取定位参数。常见做法是使用AutoCAD Map 3D的插入命令MAPIINSERT。操作流程如下。命令行输入MAPIINSERT回车。选择TIF文件注意tfw文件要和TIF同名同目录。在插入参数里把坐标系设为与shape一致的坐标系。插入点输入0,0缩放比例保持1不要手动拖框。命令提示“是否嵌入影像的地理参考信息”时选“是”。如果使用的不是Map 3D而是普通AutoCADIMAGEATTACH也能插入TIF但它默认不读tfw需要手工指定插入点坐标和缩放比例。这时可以先用MAPIINSERT或GIS软件查一下影像左下角坐标再手动填入。单位也很关键CAD里如果图形单位是毫米而TIF单位是米插入后位置就跑到十万八千里此时把INSERTUNITS设置为6米即可。遇到插入后影像翻转或位置偏移优先检查两件事tfw里第5、6行坐标是否为负数或超出范围CAD当前坐标系单位是否设成米。还有一类隐蔽问题是TIF本身带了GeoTIFF标签但tfw也被同时读取两套坐标发生冲突此时删掉tfw只保留内嵌坐标重新插入。5. 交付前验证用一组快速检查确认shape、mxd与TIF对齐5.1 用GDAL验证TIF的地理范围与shape一致拿到输出的TIF后先用最直接的方式确认它和shape在空间上真的套合。打开命令行工具分别读取两边的范围信息gdalinfo -stats D:\delivery\qiangtang\output\qiangtang_standard.tif ogrinfo -so D:\delivery\qiangtang\data\boundary.shp boundarygdalinfo输出里的Upper Left和Lower Right坐标要落在羌塘高原合理范围且和boundary.shp的extent一致。正北成图的TIF坐标轴旋转参数应为0。更稳妥一点直接在ArcMap加载TIF和shape用Swipe工具左右拖动看是否有偏移这是最直观的验收方式。5.2 检查mxd的数据源状态打开mxd时如果图层名旁边有红色感叹号说明数据源路径断了。即使刚才设置过相对路径复制目录时仍然可能出现这种问题。用ArcPy把所有图层的数据源打印出来逐项核对import arcpy mxd arcpy.mapping.MapDocument(rD:\delivery\qiangtang\map.mxd) for lyr in arcpy.mapping.ListLayers(mxd): if lyr.supports(DATASOURCE): print(lyr.name, -, lyr.dataSource) del mxd对照输出的路径看是否有某个shape指向了C:\temp\这类临时目录。发现断链后用ArcMap图层属性里的Set Data Source重新指认一次再保存。交付前把mxd关闭后重新打开红色感叹号清零才算通过。5.3 高程异常与数据来源的快速排查海拔属性最容易出的问题不是“错”而是“没出处”。一个ELEV字段如果说不清是SRTM还是ASTER GDEM提取的验收方基本不敢使用。交付时SOURCE字段必须写清楚数据版本例如SRTM_V3或GDEM_V2。排查高程异常时可以在属性表里按ELEV排序重点观察最低值和最高值。低于0且不在湖泊范围的高程点大概率是原始DEM噪声或被NODATA污染超过9000米则接近可疑。发现异常后不要直接手改先回到等高线或原始DEM上核实确认是采集误差再修改并同步更新REMARK字段说明原因。这套验证在QGIS里也能做用Field Calculator把ELEV筛选出异常值导出成临时图层叠加影像检查。最后再提醒一点mxd文件里的相对路径在拷贝到其他电脑后第一次打开会稍微慢一些因为ArcMap要重新定位所有数据源。此时不要顺手点掉“忽略缺失数据源”的弹窗让ArcMap完成自动定位后再把mxd另存一次工程文件才算真正可交付。本文还有配套的精品资源点击获取
返回列表