GlobalMapper脚本应用(数据批量自动化处理)

0.概述:

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

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

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

1.数据获取

LSV下载数据

1.1lsv获得影像数据:

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

谷歌影像:

谷歌历史影像:

ArcGIS影像:

天地图影像:

微软影像:

其他影像数据:

各种道路图

各种地形晕渲图:

各种地质图与地质详图

天地图各种分省图:

各种海图:

各种历史图:

各种气象图:

各种透明图;

各种专题图:

1.2LSV获得的地形数据:

谷歌地形(90米)

ETOP(1.8km地形)

SRTM3 90米地形

Alster30米地形:

Alos12米地形:

5米地形:

1.3LSV获得的POI数据

1.4LSV能获得的建筑轮廓数据

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

1.6本教程示例数据

DEM:

数据范围:

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

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

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

脚本执行方式1:

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

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

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

直接双击即可:

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

结果如下:

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

//影像裁剪

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

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

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

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容