0.概述:
GlobalMapper是一款功能強(qiáng)大的小型化GIS柵格影像、矢量數(shù)據(jù)處理喂饥、加工軟件消约,其本身具備了GIS軟件產(chǎn)品的幾乎所有特性,做到了將復(fù)雜的問題簡單化员帮,哪怕你是對GIS一無所知的用戶都可以很快的上手或粮,簡單直觀的功能設(shè)計都能夠幫助你以最快的速度完成所需要的工作,完成加工數(shù)據(jù)成品的任務(wù)捞高。
界面化的操作氯材,對數(shù)據(jù)操作之前要先打開數(shù)據(jù),大數(shù)據(jù)的處理硝岗,自動化處理極其不便氢哮。其腳本可以有效解決這些問題。本文主要基于GlobalMapper的腳本實現(xiàn)對影像型檀、地形冗尤、示例數(shù)據(jù)的大數(shù)據(jù)腳本話自動操作。
以下所有腳本都是基于GlobalMapperV20實現(xiàn)胀溺。
1.數(shù)據(jù)獲取
LSV下載數(shù)據(jù)
1.1lsv獲得影像數(shù)據(jù):
LSV有近千種圖源裂七,都可以直接下載為tif格式的影像數(shù)據(jù)
谷歌影像:
谷歌歷史影像:
ArcGIS影像:
天地圖影像:
微軟影像:
其他影像數(shù)據(jù):
各種道路圖
各種地形暈渲圖:
各種地質(zhì)圖與地質(zhì)詳圖
天地圖各種分省圖:
各種海圖:
各種歷史圖:
各種氣象圖:
各種透明圖;
各種專題圖:
1.2LSV獲得的地形數(shù)據(jù):
谷歌地形(90米)
ETOP(1.8km地形)
SRTM3 90米地形
Alster30米地形:
Alos12米地形:
5米地形:
1.3LSV獲得的POI數(shù)據(jù)
1.4LSV能獲得的建筑輪廓數(shù)據(jù)
1.5快速標(biāo)繪或者矢量化數(shù)據(jù)月幌;
1.6本教程示例數(shù)據(jù)
DEM:
數(shù)據(jù)范圍:
為了讓數(shù)據(jù)適用效果更好碍讯,再在右下角繪制一個矩形,并下載影像和
2.tif影像和地形合并腳本
2.1合并指定的tif格式的地形文件到一個文件中
腳本如下:
//地形合并
//腳本標(biāo)識頭 版本固定1.00 【該行必須存在】 ?
GLOBAL_MAPPER_SCRIPT VERSION=1.00
//移除當(dāng)前加載的所有數(shù)據(jù)
UNLOAD_ALL
//定義輸出文件變量
DEFINE_VAR NAME="OUTPUT_FILE" VALUE="D:\GlobalMappper\script_sample_data\result\dem_merge.tif"
//導(dǎo)入文件名
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"
//導(dǎo)出地形數(shù)據(jù)
EXPORT_ELEVATION FILENAME="%OUTPUT_FILE%" TYPE=GEOTIFF? ELEV_UNITS="METERS"
上述文件扯躺,存儲為后綴為gms的文本文件
注:默認(rèn)情況下不支持中文捉兴,如需支持中文蝎困,請設(shè)置編碼格式為gb2312
腳本執(zhí)行方式1:
打開GlobalMapper20,文件下的【run script】菜單
對比一下原始數(shù)據(jù)倍啥,和結(jié)果數(shù)據(jù):
腳本執(zhí)行方式2:
無需打開globalmapper軟件即可直接執(zhí)行
編寫配套的命令行文件:
chcp指編碼格式(主要是中文):
chcp 65001 ?就是換成UTF-8代碼頁
chcp 936 可以換回默認(rèn)的GBK
chcp 437 是美國英語?
/showprogress 指顯示進(jìn)度信息
@echo off
chcp 65001
"C:\Program Files\GlobalMapper20_64bit\global_mapper.exe" merge_dem_tif.gms /showprogress
pause
上述文本另存為后綴為bat的文保文件
直接雙擊即可:
結(jié)果和方法1一致禾乘。
2.2合并指定的tif格式的影像文件到一個文件中
//影像合并
//腳本標(biāo)識頭 版本固定1.00 【該行必須存在】 ?
GLOBAL_MAPPER_SCRIPT VERSION=1.00
//移除當(dāng)前加載的所有數(shù)據(jù)
UNLOAD_ALL
//定義輸出文件變量
DEFINE_VAR NAME="OUTPUT_FILE" VALUE="D:\GlobalMappper\script_sample_data\result\dom_merge.tif"
//導(dǎo)入文件名
IMPORT FILENAME="D:\GlobalMappper\script_sample_data\dom1\13\dem范圍谷歌影像.tif"
IMPORT FILENAME="D:\GlobalMappper\script_sample_data\dom2\13\dem范圍2谷歌影像.tif"
//導(dǎo)出柵格數(shù)據(jù)
EXPORT_RASTER FILENAME="%OUTPUT_FILE%" TYPE=GEOTIFF
結(jié)果如下:
2.3合并一個文件夾下所有的tif格式的文件
該功能尤其適合smart3d生產(chǎn)的影像或者地形
示例是合并影像,如果需要合并地形虽缕,最后一行的【EXPORT_RASTER】改為【EXPORT_ELEVATION 】,并帶上單位【ELEV_UNITS="METERS"】即可
注:最開始沒注意始藕,后來發(fā)現(xiàn)不帶單位的話,默認(rèn)單位是分米【decimeters】
//腳本標(biāo)識頭 版本固定1.00 【該行必須存在】 ?
GLOBAL_MAPPER_SCRIPT VERSION=1.00
//移除當(dāng)前加載的所有數(shù)據(jù)
UNLOAD_ALL
//定義輸出文件變量
DEFINE_VAR NAME="OUTPUT_FILE" VALUE="D:\GlobalMappper\script_sample_data\result\multi_dom_file_export_result.tif"
//DIR_LOOP_START遍歷目錄, DIRECTORY目錄位置氮趋,F(xiàn)ILENAME_MASKS過濾遍歷的文件格式
//RECURSE_DIR表示是否搜索子目錄
DIR_LOOP_START DIRECTORY="D:\GlobalMappper\script_sample_data\multi_dom\" FILENAME_MASKS="*.tif" RECURSE_DIR=YES
//導(dǎo)入搜索到的tif文件
IMPORT FILENAME="%FNAME_W_DIR%"
DIR_LOOP_END
//輸出合并后的TIF文件
EXPORT_RASTER FILENAME="%OUTPUT_FILE%" TYPE=GEOTIFF
3.tif影像和地形裁剪腳本
LSV繪制一個用于進(jìn)行裁剪的面伍派,另存為clip.shp
如需裁剪地形,只需把【EXPORT_RASTER】改為【EXPORT_ELEVATION】剩胁,并帶上單位【ELEV_UNITS="METERS"】即可
另外诉植,2.2當(dāng)中的整個目錄的遍歷形式也可應(yīng)用,可動手嘗試
//影像裁剪
//腳本標(biāo)識頭 版本固定1.00 【該行必須存在】 ?
GLOBAL_MAPPER_SCRIPT VERSION=1.00
//移除當(dāng)前加載的所有數(shù)據(jù)
UNLOAD_ALL
//定義輸出文件變量
DEFINE_VAR NAME="OUTPUT_FILE" VALUE="D:\GlobalMappper\script_sample_data\result\dom_clip.tif"
//導(dǎo)入文件名
IMPORT FILENAME="D:\GlobalMappper\script_sample_data\dom1\13\dem范圍谷歌影像.tif"
//導(dǎo)出柵格數(shù)據(jù)
//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影像和地形投影轉(zhuǎn)換腳本
投影轉(zhuǎn)換可以指定目標(biāo)投影的prj文件昵观,也可以通過EPSG代號的方式進(jìn)行指定
國家2000 三度分帶 中央經(jīng)線108 坐標(biāo)不含分帶:4545
84經(jīng)緯度坐標(biāo)系:4326
投影轉(zhuǎn)換方式1:EPSG
//投影轉(zhuǎn)換
//腳本標(biāo)識頭 版本固定1.00 【該行必須存在】 ?
GLOBAL_MAPPER_SCRIPT VERSION=1.00
//移除當(dāng)前加載的所有數(shù)據(jù)
UNLOAD_ALL
//定義輸出文件變量
DEFINE_VAR NAME="OUTPUT_FILE" VALUE="D:\GlobalMappper\script_sample_data\result\dom_project_convert.tif"
//導(dǎo)入文件名
IMPORT FILENAME="D:\GlobalMappper\script_sample_data\dom1\13\dem范圍谷歌影像.tif"
//通過EPSG參數(shù)加載新的全局投影
LOAD_PROJECTION PROJ="EPSG:4545"
//輸出新的重投影后的文件
EXPORT_RASTER FILENAME="%OUTPUT_FILE%" TYPE=GEOTIFF
顯示的是2000平面坐標(biāo)
投影轉(zhuǎn)換方式2:prj文件
//投影轉(zhuǎn)換
//腳本標(biāo)識頭 版本固定1.00 【該行必須存在】 ?
GLOBAL_MAPPER_SCRIPT VERSION=1.00
//移除當(dāng)前加載的所有數(shù)據(jù)
UNLOAD_ALL
//定義輸出文件變量
DEFINE_VAR NAME="OUTPUT_FILE" VALUE="D:\GlobalMappper\script_sample_data\result\dom_project_convert_prj.tif"
//導(dǎo)入文件名
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
如果需要生產(chǎn)prj或者tfw文件晾腔,設(shè)置如下參數(shù)即可
//輸出新的重投影后的文件
EXPORT_RASTER GEN_PRJ_FILE=YES GEN_WORLD_FILE=YES FILENAME="%OUTPUT_FILE%" TYPE=GEOTIFF
5.用面文件對kml進(jìn)行分隔/裁剪
用西寧市建筑輪廓的shp文件,轉(zhuǎn)為kml(lsv和globalmapper都可以轉(zhuǎn))
對于面數(shù)據(jù)啊犬,裁剪的時候會自動閉合
//kml裁剪
//腳本標(biāo)識頭 版本固定1.00 【該行必須存在】 ?
GLOBAL_MAPPER_SCRIPT VERSION=1.00
//移除當(dāng)前加載的所有數(shù)據(jù)
UNLOAD_ALL
//導(dǎo)入kml文件
IMPORT FILENAME="D:\GlobalMappper\script_sample_data\kml\xining_jianzhu_lunkuo.kml" LOAD_FLAGS="0"
//根據(jù)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"
//移除當(dāng)前加載的所有數(shù)據(jù)
UNLOAD_ALL
6.kml參數(shù)輸出csv
麗水市的poi的shp文件灼擂,轉(zhuǎn)為kml作為示例數(shù)據(jù),13萬條記錄
kml轉(zhuǎn)CSV
//腳本標(biāo)識頭 版本固定1.00 【該行必須存在】 ?
GLOBAL_MAPPER_SCRIPT VERSION=1.00
//移除當(dāng)前加載的所有數(shù)據(jù)
UNLOAD_ALL
//導(dǎo)入Kml文件
IMPORT FILENAME="D:\GlobalMappper\script_sample_data\kml\li_shui_shi.kml" LOAD_FLAGS="0"
//通過EXPORT_VECTOR 導(dǎo)出csv文件
//COORD_DELIM表示逗號分割觉至,COORD_ORDER采用WKT中的坐標(biāo)字符串 ,EXPORT_ATTRS表示屬性樣式
//EXPORT_HEADER表示頭部是否導(dǎo)出剔应,POINTS_ONLY表示是否僅添加點
//USE_COMMA_FOR_DECIMAL ?指定是否應(yīng)使用十進(jìn)制逗號的歐洲樣式,而不是使用句點语御。
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
//移除當(dāng)前加載的所有數(shù)據(jù)
UNLOAD_ALL
7.shp文件的投影轉(zhuǎn)換
用法和影像领斥、地形基本一致,不過多介紹
//腳本標(biāo)識頭 版本固定1.00 【該行必須存在】?
GLOBAL_MAPPER_SCRIPT VERSION=1.00
//移除當(dāng)前加載的所有數(shù)據(jù)
UNLOAD_ALL
//加載SHP文件
IMPORT FILENAME="shp/data.shp" LOAD_FLAGS="0"
//通過EPSG參數(shù)加載新的全局投影
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
//移除當(dāng)前加載的所有數(shù)據(jù)
UNLOAD_ALL
8.文件的循環(huán)遍歷(csv的讀仍侣濉)
腳本示例:(xxx.gms)
//腳本標(biāo)識頭 版本固定1.00 【該行必須存在】?
GLOBAL_MAPPER_SCRIPT VERSION=1.00
//移除當(dāng)前加載的所有數(shù)據(jù)
UNLOAD_ALL
//調(diào)用CMD命令
//RUN_COMMAND COMMAND_LINE="cmd /c del logs\log.txt /f"
//設(shè)置日志文件APPEND_TO_FILE表示不追加(NO)或者追加寫入(YES)文件
SET_LOG_FILE FILENAME="logs\log.txt" APPEND_TO_FILE=NO
//定義用來查找CSV文件數(shù)據(jù)的變量表state_codes
DEFINE_VAR_TABLE NAME="state_codes" \
FILENAME="file_003.csv"
END_VAR_TABLE
//從表state_codes中循環(huán)讀取參數(shù)如:id,name
//VAR_NAME表示用戶存儲當(dāng)前循環(huán)值的變量, 使用方法:%ROW:xxx%
VAR_LOOP_START VALUE_TABLE="state_codes" VAR_NAME="%ROW%"
//記錄日志
LOG_MESSAGE %ROW:id% %ROW:name%
VAR_LOOP_END
CSV文件內(nèi)容:(xxx.csv)
id,name
01,xxx01.tif
02,xxx02.tif
執(zhí)行結(jié)果如下:
擴(kuò)展:
//也可以通過COMPARE_STR比較值來直接獲取單行文件的其它值
DEFINE_VAR NAME="name01" VALUE_TABLE="state_codes" VALUE_COLUMN="name" \
COMPARE_STR="id=01"
LOG_MESSAGE %name01%
9.變量的定義
腳本示例:(xxx.gms)
//腳本標(biāo)識頭 版本固定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%來調(diào)用變量
LOG_MESSAGE %VAR1% -- %VAR2%
10.if語句的使用
腳本示例:(xxx.gms)
//腳本標(biāo)識頭 版本固定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循環(huán)的應(yīng)用
腳本示例:(xxx.gms)
//腳本標(biāo)識頭 版本固定1.00 【該行必須存在】?
GLOBAL_MAPPER_SCRIPT VERSION=1.00
//二級循環(huán):與for循環(huán)類似惜辑,采用VAR_LOOP_START開始唬涧,VAR_LOOP_END結(jié)束
//VAL_FORMAT表示將小于10的數(shù)值格式化為2位數(shù)如:01
//VAR_NAME表示用戶存儲當(dāng)前循環(huán)值的變量
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)
//腳本標(biāo)識頭 版本固定1.00 【該行必須存在】?
GLOBAL_MAPPER_SCRIPT VERSION=1.00
//DIR_LOOP_START遍歷目錄,?DIRECTORY目錄位置,F(xiàn)ILENAME_MASKS過濾遍歷的文件格式
//RECURSE_DIR表示是否搜索子目錄
DIR_LOOP_START DIRECTORY="shp\" FILENAME_MASKS="*.shp" RECURSE_DIR=NO
//當(dāng)前文件的完整路徑
LOG_MESSAGE %DIR%
//當(dāng)前文件的完整路徑和文件名
LOG_MESSAGE %FNAME_W_DIR%
//當(dāng)前文件的文件名盛撑,不帶擴(kuò)展名
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.多腳本同時執(zhí)行(參數(shù)傳遞)
腳本示例:(xxx.gms)
//腳本標(biāo)識頭 版本固定1.00 【該行必須存在】?
GLOBAL_MAPPER_SCRIPT VERSION=1.00
//移除當(dāng)前加載的所有數(shù)據(jù),%var1%為獲取的傳參的值
LOG_MESSAGE Get var1 <%var1%>
//導(dǎo)入文件%var1%抵卫,即傳參data.tif
//ANTI_ALIAS表示是否通過在像素之間進(jìn)行細(xì)調(diào)來移除鋸齒邊
IMPORT FILENAME="%var1%" ANTI_ALIAS=NO
bat文件:
@rem-var1表示傳遞的變量名稱狮荔,data表示變量-var1的值
global_mapper.exe? xxx.gms -var1 data.tif
14.關(guān)聯(lián)知識點:
14.1投影文件的獲取
http://epsg.io
http://spatialreference.org
14.2影像胎撇、地形文件的介紹
多數(shù)3通道的tif認(rèn)為是影像,單通道的認(rèn)為是地形
并不排除部分影像本身就是單波段殖氏。