GlobalMapper指令碼應用資料如何批次自動化處理
概述:
GlobalMapper是一款功能強大的小型化GIS柵格影像、向量資料處理、加工軟體,其本身具備了GIS軟體產品的幾乎所有特性,做到了將複雜的問題簡單化,哪怕你是對GIS一無所知的使用者都可以很快的上手,簡單直觀的功能設計都能夠幫助你以最快的速度完成所需要的工作,完成加工資料成品的任務。
介面化的操作,對資料操作之前要先開啟資料,大資料的處理,自動化處理極其不便。其指令碼可以有效解決這些問題。本文主要基於GlobalMapper的指令碼實現對影像、地形、示例資料的大資料指令碼話自動操作。
以下所有指令碼都是基於GlobalMapperV20實現。
1。資料獲取
下載影像資料
1。1圖新地球下載影像資料:
圖新地球有近千種圖源,都可以直接下載為tif格式的影像資料,谷歌影像、谷歌歷史影像、ArcGIS影像、天地圖影像、微軟影像:
1。2圖新地球下載地形資料:
谷歌地形(90米)
ETOP(1。8km地形)
SRTM3 90米地形
Alster30米地形
Alos12米地形
5米地形
1。3快速標繪或者向量化資料;
1。4本教程示例資料
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認為是影像,單通道的認為是地形
並不排除部分影像本身就是單波段。
推薦閱讀:
19級20級谷歌衛星地圖瀏覽下載,清晰度驚人!
國產專業版谷歌地球,高畫質衛星影像瀏覽下載、地形分析秒殺谷歌地球
谷歌地球中國服務正式關閉,國產天地圖完全替代谷歌地球?
谷歌地球不能用了,我敢說大部分人不知道真實原因(附最新解決方案)
全球19級以上高畫質衛星影像地圖檢視下載