0.概述:

GlobalMapper是一款功能强大的小型化GIS栅格影像、矢量数据处理、加工软件,其本身具备了GIS软件产品的几乎所有特性,做到了将复杂的问题简单化,哪怕你是对GIS一无所知的用户都可以很快的上手,简单直观的功能设计都能够帮助你以最快的速度完成所需要的工作,完成加工数据成品的任务。

界面化的操作,对数据操作之前要先打开数据,大数据的处理,自动化处理极其不便。其脚本可以有效解决这些问题。本文主要基于GlobalMapper的脚本实现对影像、地形、示例数据的大数据脚本话自动操作。

以下所有脚本都是基于GlobalMapperV20实现。

1.数据获取

LSV下载数据

1.1lsv获得影像数据:

LSV有近千种图源,都可以直接下载为tif格式的影像数据

谷歌影像、谷歌历史影像、ArcGIS影像、天地图影像、微软影像:

                                             

 

 

其他影像数据:

image

各种道路图

image

各种地形晕渲图:

image

各种地质图与地质详图

image

image

天地图各种分省图:

image

各种海图:

image

各种历史图:

image

image

各种气象图:

image

 

各种透明图;

image

 

各种专题图:

image

 

1.2LSV获得的地形数据:

image

谷歌地形(90米)

image

image

ETOP(1.8km地形)

image

SRTM3 90米地形

image

Alster30米地形:

image

Alos12米地形:

image

5米地形:

image

 

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

image

image

1.4本教程示例数据

DEM:

image

数据范围:

image

为了让数据适用效果更好,再在右下角绘制一个矩形,并下载影像和

image

image

image

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的文本文件

image

注:默认情况下不支持中文,如需支持中文,请设置编码格式为gb2312

脚本执行方式1:

打开GlobalMapper20,文件下的【run script】菜单

image

image

image

image

image

对比一下原始数据,和结果数据:

image

脚本执行方式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的文保文件

直接双击即可:

image

image

结果和方法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

结果如下:

image

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当中的整个目录的遍历形式也可应用,可动手尝试

image

image

//影像裁剪

//脚本标识头 版本固定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"

image

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平面坐标

image

投影转换方式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

image

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

image

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 【该行必须存在】

GLOBAL_MAPPER_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认为是影像,单通道的认为是地形

并不排除部分影像本身就是单波段。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐