0.概述:

GlobalMapper是一款功能强大的小型化GIS栅格影像、矢量数据处理、加工软件,其本身具备了GIS软件产品的几乎所有特性,做到了将复杂的问题简单化,哪怕你是对GIS一无所知的用户都可以很快的上手,简单直观的功能设计都能够帮助你以最快的速度完成所需要的工作,完成加工数据成品的任务。
界面化的操作,对数据操作之前要先打开数据,大数据的处理,自动化处理极其不便。其脚本可以有效解决这些问题。本文主要基于GlobalMapper的脚本实现对影像、地形、示例数据的大数据脚本话自动操作。
以下所有脚本都是基于GlobalMapperV20实现。

1.数据获取

LSV下载数据

1.1lsv获得影像数据:

LSV有近千种图源,都可以直接下载为tif格式的影像数据
谷歌影像、谷歌历史影像、ArcGIS影像、天地图影像、微软影像:
GlobalMapper20脚本应用(数据批量自动化处理) - 图1
**

其他影像数据:
GlobalMapper20脚本应用(数据批量自动化处理) - 图2
各种道路图
GlobalMapper20脚本应用(数据批量自动化处理) - 图3
各种地形晕渲图:
GlobalMapper20脚本应用(数据批量自动化处理) - 图4
各种地质图与地质详图
GlobalMapper20脚本应用(数据批量自动化处理) - 图5
GlobalMapper20脚本应用(数据批量自动化处理) - 图6
天地图各种分省图:
GlobalMapper20脚本应用(数据批量自动化处理) - 图7
各种海图:
GlobalMapper20脚本应用(数据批量自动化处理) - 图8
各种历史图:
GlobalMapper20脚本应用(数据批量自动化处理) - 图9
GlobalMapper20脚本应用(数据批量自动化处理) - 图10
各种气象图:
GlobalMapper20脚本应用(数据批量自动化处理) - 图11

各种透明图;
GlobalMapper20脚本应用(数据批量自动化处理) - 图12

各种专题图:
GlobalMapper20脚本应用(数据批量自动化处理) - 图13

1.2LSV获得的地形数据:

GlobalMapper20脚本应用(数据批量自动化处理) - 图14
谷歌地形(90米)
GlobalMapper20脚本应用(数据批量自动化处理) - 图15
GlobalMapper20脚本应用(数据批量自动化处理) - 图16
ETOP(1.8km地形)
GlobalMapper20脚本应用(数据批量自动化处理) - 图17
SRTM3 90米地形
GlobalMapper20脚本应用(数据批量自动化处理) - 图18
Alster30米地形:
GlobalMapper20脚本应用(数据批量自动化处理) - 图19
Alos12米地形:
GlobalMapper20脚本应用(数据批量自动化处理) - 图20
5米地形:
GlobalMapper20脚本应用(数据批量自动化处理) - 图21

1.3快速标绘或者矢量化数据;

GlobalMapper20脚本应用(数据批量自动化处理) - 图22
GlobalMapper20脚本应用(数据批量自动化处理) - 图23

1.4本教程示例数据

DEM:
GlobalMapper20脚本应用(数据批量自动化处理) - 图24
数据范围:
GlobalMapper20脚本应用(数据批量自动化处理) - 图25
为了让数据适用效果更好,再在右下角绘制一个矩形,并下载影像和
GlobalMapper20脚本应用(数据批量自动化处理) - 图26
GlobalMapper20脚本应用(数据批量自动化处理) - 图27
GlobalMapper20脚本应用(数据批量自动化处理) - 图28

2.tif影像和地形合并脚本

2.1合并指定的tif格式的地形文件到一个文件中

脚本如下:

//地形合并 //脚本标识头 版本固定1.00 【该行必须存在】
GLOBAL_MAPPER_SCRIPT VERSION=1.00 //移除当前加载的所有数据 UNLOAD_ALL //定义输出文件变量 DEFINE_VAR NAME=”OUTPUT_FILE” VALUE=”D:\GlobalMappper\script_sample_data\result\dem_merge.tif” //导入文件名 IMPORT FILENAME=”D:\GlobalMappper\script_sample_data\dem1\SRTM3_V4_90m.tif” ELEV_UNITS=”METERS” IMPORT FILENAME=”D:\GlobalMappper\script_sample_data\dem2\Export14-15-59.tif” ELEV_UNITS=”METERS” //导出地形数据 EXPORT_ELEVATION FILENAME=”%OUTPUT_FILE%” TYPE=GEOTIFF ELEV_UNITS=”METERS”

上述文件,存储为后缀为gms的文本文件
GlobalMapper20脚本应用(数据批量自动化处理) - 图29
注:默认情况下不支持中文,如需支持中文,请设置编码格式为gb2312

脚本执行方式1:

打开GlobalMapper20,文件下的【run script】菜单
GlobalMapper20脚本应用(数据批量自动化处理) - 图30
GlobalMapper20脚本应用(数据批量自动化处理) - 图31
GlobalMapper20脚本应用(数据批量自动化处理) - 图32
GlobalMapper20脚本应用(数据批量自动化处理) - 图33
GlobalMapper20脚本应用(数据批量自动化处理) - 图34
对比一下原始数据,和结果数据:
GlobalMapper20脚本应用(数据批量自动化处理) - 图35

脚本执行方式2:

无需打开globalmapper软件即可直接执行
编写配套的命令行文件:
chcp指编码格式(主要是中文):
chcp 65001 就是换成UTF-8代码页
chcp 936 可以换回默认的GBK
chcp 437 是美国英语
/showprogress 指显示进度信息

@echo off chcp 65001 “C:\Program Files\GlobalMapper20_64bit\global_mapper.exe” merge_dem_tif.gms /showprogress pause

上述文本另存为后缀为bat的文保文件
直接双击即可:
GlobalMapper20脚本应用(数据批量自动化处理) - 图36
GlobalMapper20脚本应用(数据批量自动化处理) - 图37
结果和方法1一致。

2.2合并指定的tif格式的影像文件到一个文件中

//影像合并
//脚本标识头 版本固定1.00 【该行必须存在】

GLOBAL_MAPPER_SCRIPT VERSION=1.00 //移除当前加载的所有数据 UNLOAD_ALL //定义输出文件变量 DEFINE_VAR NAME=”OUTPUT_FILE” VALUE=”D:\GlobalMappper\script_sample_data\result\dom_merge.tif” //导入文件名 IMPORT FILENAME=”D:\GlobalMappper\script_sample_data\dom1\13\dem范围谷歌影像.tif” IMPORT FILENAME=”D:\GlobalMappper\script_sample_data\dom2\13\dem范围2谷歌影像.tif” //导出栅格数据 EXPORT_RASTER FILENAME=”%OUTPUT_FILE%” TYPE=GEOTIFF

结果如下:
GlobalMapper20脚本应用(数据批量自动化处理) - 图38

2.3合并一个文件夹下所有的tif格式的文件

该功能尤其适合smart3d生产的影像或者地形
示例是合并影像,如果需要合并地形,最后一行的【EXPORT_RASTER】改为【EXPORT_ELEVATION 】,并带上单位【ELEV_UNITS=”METERS”】即可
注:最开始没注意,后来发现不带单位的话,默认单位是分米【decimeters】

//脚本标识头 版本固定1.00 【该行必须存在】
GLOBAL_MAPPER_SCRIPT VERSION=1.00 //移除当前加载的所有数据 UNLOAD_ALL //定义输出文件变量 DEFINE_VAR NAME=”OUTPUT_FILE” VALUE=”D:\GlobalMappper\script_sample_data\result\multi_dom_file_export_result.tif” //DIR_LOOP_START遍历目录, DIRECTORY目录位置,FILENAME_MASKS过滤遍历的文件格式 //RECURSE_DIR表示是否搜索子目录 DIR_LOOP_START DIRECTORY=”D:\GlobalMappper\script_sample_data\multi_dom\” FILENAME_MASKS=”*.tif” RECURSE_DIR=YES //导入搜索到的tif文件 IMPORT FILENAME=”%FNAME_W_DIR%” DIR_LOOP_END //输出合并后的TIF文件 EXPORT_RASTER FILENAME=”%OUTPUT_FILE%” TYPE=GEOTIFF

3.tif影像和地形裁剪脚本

LSV绘制一个用于进行裁剪的面,另存为clip.shp
如需裁剪地形,只需把【EXPORT_RASTER】改为【EXPORT_ELEVATION】,并带上单位【ELEV_UNITS=”METERS”】即可
另外,2.2当中的整个目录的遍历形式也可应用,可动手尝试
GlobalMapper20脚本应用(数据批量自动化处理) - 图39
GlobalMapper20脚本应用(数据批量自动化处理) - 图40

//影像裁剪 //脚本标识头 版本固定1.00 【该行必须存在】
GLOBAL_MAPPER_SCRIPT VERSION=1.00 //移除当前加载的所有数据 UNLOAD_ALL //定义输出文件变量 DEFINE_VAR NAME=”OUTPUT_FILE” VALUE=”D:\GlobalMappper\script_sample_data\result\dom_clip.tif” //导入文件名 IMPORT FILENAME=”D:\GlobalMappper\script_sample_data\dom1\13\dem范围谷歌影像.tif” //导出栅格数据 //GEN_WORLD_FILE=YES : EXPORT TWF EXPORT_RASTER FILENAME=”%OUTPUT_FILE%” TYPE=GEOTIFF PALETTE=OPTIMIZED GEN_WORLD_FILE=YES POLYGON_CROP_FILE=”D:\GlobalMappper\script_sample_data\clip\clip.shp”

GlobalMapper20脚本应用(数据批量自动化处理) - 图41

4.tif影像和地形投影转换脚本

投影转换可以指定目标投影的prj文件,也可以通过EPSG代号的方式进行指定
国家2000 三度分带 中央经线108 坐标不含分带:4545
84经纬度坐标系:4326

投影转换方式1:EPSG

//投影转换 //脚本标识头 版本固定1.00 【该行必须存在】
GLOBAL_MAPPER_SCRIPT VERSION=1.00 //移除当前加载的所有数据 UNLOAD_ALL //定义输出文件变量 DEFINE_VAR NAME=”OUTPUT_FILE” VALUE=”D:\GlobalMappper\script_sample_data\result\dom_project_convert.tif” //导入文件名 IMPORT FILENAME=”D:\GlobalMappper\script_sample_data\dom1\13\dem范围谷歌影像.tif” //通过EPSG参数加载新的全局投影 LOAD_PROJECTION PROJ=”EPSG:4545” //输出新的重投影后的文件 EXPORT_RASTER FILENAME=”%OUTPUT_FILE%” TYPE=GEOTIFF

显示的是2000平面坐标
GlobalMapper20脚本应用(数据批量自动化处理) - 图42

投影转换方式2:prj文件

//投影转换 //脚本标识头 版本固定1.00 【该行必须存在】
GLOBAL_MAPPER_SCRIPT VERSION=1.00 //移除当前加载的所有数据 UNLOAD_ALL //定义输出文件变量 DEFINE_VAR NAME=”OUTPUT_FILE” VALUE=”D:\GlobalMappper\script_sample_data\result\dom_project_convert_prj.tif” //导入文件名 IMPORT FILENAME=”D:\GlobalMappper\script_sample_data\dom1\13\dem范围谷歌影像.tif” //从PRJ文件加载新的全局投影 LOAD_PROJECTION FILENAME=”D:\GlobalMappper\script_sample_data\script\4545.prj” //输出新的重投影后的文件 EXPORT_RASTER FILENAME=”%OUTPUT_FILE%” TYPE=GEOTIFFGEN_WORLD_FILE=YES 如果需要生产prj或者tfw文件,设置如下参数即可 //输出新的重投影后的文件 EXPORT_RASTER GEN_PRJ_FILE=YES GEN_WORLD_FILE=YES FILENAME=”%OUTPUT_FILE%” TYPE=GEOTIFF

5.用面文件对kml进行分隔/裁剪

用西宁市建筑轮廓的shp文件,转为kml(lsv和globalmapper都可以转)
对于面数据,裁剪的时候会自动闭合

//kml裁剪 //脚本标识头 版本固定1.00 【该行必须存在】
GLOBAL_MAPPER_SCRIPT VERSION=1.00 //移除当前加载的所有数据 UNLOAD_ALL //导入kml文件 IMPORT FILENAME=”D:\GlobalMappper\script_sample_data\kml\xining_jianzhu_lunkuo.kml” LOAD_FLAGS=”0” //根据shp文件的形状大小裁切后输出kml文件 EXPORT_VECTOR FILENAME=”D:\GlobalMappper\script_sample_data\result\kml_clip.kml” TYPE=KML POLYGON_CROP_FILE=”D:\GlobalMappper\script_sample_data\clip\clip_xining.shp” //移除当前加载的所有数据 UNLOAD_ALL

GlobalMapper20脚本应用(数据批量自动化处理) - 图43

6.kml参数输出csv

丽水市的poi的shp文件,转为kml作为示例数据,13万条记录
kml转CSV

//脚本标识头 版本固定1.00 【该行必须存在】
GLOBAL_MAPPER_SCRIPT VERSION=1.00 //移除当前加载的所有数据 UNLOAD_ALL //导入Kml文件 IMPORT FILENAME=”D:\GlobalMappper\script_sample_data\kml\li_shui_shi.kml” LOAD_FLAGS=”0” //通过EXPORT_VECTOR 导出csv文件 //COORD_DELIM表示逗号分割,COORD_ORDER采用WKT中的坐标字符串 ,EXPORT_ATTRS表示属性样式 //EXPORT_HEADER表示头部是否导出,POINTS_ONLY表示是否仅添加点 //USE_COMMA_FOR_DECIMAL 指定是否应使用十进制逗号的欧洲样式,而不是使用句点。 EXPORT_VECTOR FILENAME=”D:\GlobalMappper\script_sample_data\result\lishuishi_poi.csv” TYPE=CSV COORD_DELIM=COMMA COORD_ORDER=WKT EXPORT_ATTRS=NO_STYLE EXPORT_HEADER=NO USE_COMMA_FOR_DECIMAL POINTS_ONLY=NO //移除当前加载的所有数据 UNLOAD_ALL

GlobalMapper20脚本应用(数据批量自动化处理) - 图44

7.shp文件的投影转换

用法和影像、地形基本一致,不过多介绍

//脚本标识头 版本固定1.00 【该行必须存在】 GLOBAL_MAPPER_SCRIPT VERSION=1.00 //移除当前加载的所有数据 UNLOAD_ALL //加载SHP文件 IMPORT FILENAME=”shp/data.shp” LOAD_FLAGS=”0” //通过EPSG参数加载新的全局投影 LOAD_PROJECTION PROJ=”EPSG:3857” //采用EXPORT_VECTOR输出SHP文件 //GEN_PRJ_FILE是否生成投影文件,矢量类型 SHAPE_TYPE EXPORT_VECTOR GEN_PRJ_FILE=YES FILENAME=”output/data.shp” TYPE=SHAPEFILE SHAPE_TYPE=AREAS //移除当前加载的所有数据 UNLOAD_ALL

8.文件的循环遍历(csv的读取)

脚本示例:(xxx.gms)

//脚本标识头 版本固定1.00 【该行必须存在】 GLOBAL_MAPPER_SCRIPT VERSION=1.00 //移除当前加载的所有数据 UNLOAD_ALL //调用CMD命令 //RUN_COMMAND COMMAND_LINE=”cmd /c del logs\log.txt /f” //设置日志文件APPEND_TO_FILE表示不追加(NO)或者追加写入(YES)文件 SET_LOG_FILE FILENAME=”logs\log.txt” APPEND_TO_FILE=NO //定义用来查找CSV文件数据的变量表state_codes DEFINE_VAR_TABLE NAME=”state_codes” \ FILENAME=”file_003.csv” END_VAR_TABLE //从表state_codes中循环读取参数如:id,name //VAR_NAME表示用户存储当前循环值的变量, 使用方法:%ROW:xxx% VAR_LOOP_START VALUE_TABLE=”state_codes” VAR_NAME=”%ROW%” //记录日志 LOG_MESSAGE %ROW:id% %ROW:name% VAR_LOOP_END

CSV文件内容:(xxx.csv)
id,name
01,xxx01.tif
02,xxx02.tif
执行结果如下:
扩展:
//也可以通过COMPARE_STR比较值来直接获取单行文件的其它值
DEFINE_VAR NAME=”name01” VALUE_TABLE=”state_codes” VALUE_COLUMN=”name” \
COMPARE_STR=”id=01”
LOG_MESSAGE %name01%

9.变量的定义

脚本示例:(xxx.gms)

//脚本标识头 版本固定1.00 【该行必须存在】 GLOBAL_MAPPER_SCRIPT VERSION=1.00 //采用DEFINE_VAR来定义变量,NAME变量名,VALUE变量值 DEFINE_VAR NAME=”VAR1” VALUE=”val2” DEFINE_VAR NAME=”VAR2” VALUE=”10” //记录日志 采用%VAR1%来调用变量 LOG_MESSAGE %VAR1% — %VAR2%

10.if语句的使用

脚本示例:(xxx.gms)

//脚本标识头 版本固定1.00 【该行必须存在】 GLOBAL_MAPPER_SCRIPT VERSION=1.00 //采用DEFINE_VAR来定义变量,NAME变量名,VALUE变量值 DEFINE_VAR NAME=”VAR1” VALUE=”val2” DEFINE_VAR NAME=”VAR2” VALUE=”10” //通过COMPARE_STR来判断变量%VAR1%的值是否为val1 IF COMPARE_STR=”%VAR1%=val1” IF COMPARE_STR=”%VAR2%>10” LOG_MESSAGE %VAR2% > 10 END_IF ELSE_IF COMPARE_STR=”%VAR1%=val2” LOG_MESSAGE %VAR1% == val2 ELSE LOG_MESSAGE %VAR1% != val1 END_IF

11.for循环的应用

脚本示例:(xxx.gms)

//脚本标识头 版本固定1.00 【该行必须存在】 GLOBAL_MAPPER_SCRIPT VERSION=1.00 //二级循环:与for循环类似,采用VAR_LOOP_START开始,VAR_LOOP_END结束 //VAL_FORMAT表示将小于10的数值格式化为2位数如:01 //VAR_NAME表示用户存储当前循环值的变量 VAR_LOOP_START VAL_START=1 VAL_STOP=10 VAL_STEP=1 VAL_FORMAT=”%02d” VAR_NAME=”%ROW%” VAR_LOOP_START VAL_START=1 VAL_STOP=10 VAL_STEP=1 VAR_NAME=”%COL%” LOG_MESSAGE %ROW% — %COL% VAR_LOOP_END VAR_LOOP_END

12.文件夹下文件的遍历

脚本示例:(xxx.gms)

//脚本标识头 版本固定1.00 【该行必须存在】 GLOBALMAPPER_SCRIPT VERSION=1.00 //DIR_LOOP_START遍历目录, DIRECTORY目录位置,FILENAME_MASKS过滤遍历的文件格式 //RECURSE_DIR表示是否搜索子目录 DIR_LOOP_START DIRECTORY=”shp\” FILENAME_MASKS=”*.shp” RECURSE_DIR=NO //当前文件的完整路径 LOG_MESSAGE %DIR% //当前文件的完整路径和文件名 LOG_MESSAGE %FNAME_W_DIR% //当前文件的文件名,不带扩展名 LOG_MESSAGE %FNAME_WO_EXT% //文件的父目录的名称 LOG_MESSAGE %PARENT_DIR% //某个父目录级别的名称,其中“N”是级别, %PARENT_DIR1%%PARENT DIR2% LOG_MESSAGE %PARENT_DIRN% //文件夹递归到原始搜索文件夹之外:C:\ path\to\my\data\sub\folder\my\u file.dem值为’sub\folder’ LOG_MESSAGE %RECURSE_FOLDER% DIR_LOOP_END

13.多脚本同时执行(参数传递)

脚本示例:(xxx.gms)

//脚本标识头 版本固定1.00 【该行必须存在】 GLOBAL_MAPPER_SCRIPT VERSION=1.00 //移除当前加载的所有数据,%var1%为获取的传参的值 LOG_MESSAGE Get var1 <%var1%> //导入文件%var1%,即传参data.tif //ANTI_ALIAS表示是否通过在像素之间进行细调来移除锯齿边 IMPORT FILENAME=”%var1%” ANTI_ALIAS=NO bat文件: @rem-var1表示传递的变量名称,data表示变量-var1的值 global_mapper.exe xxx.gms -var1 data.tif

14.关联知识点:

14.1投影文件的获取

http://epsg.io
http://spatialreference.org

14.2影像、地形文件的介绍

多数3通道的tif认为是影像,单通道的认为是地形
并不排除部分影像本身就是单波段。