目錄
ogr2ogr
在文件格式之間轉換簡單要素數據。
概要
ogr2ogr [--help-general] [-skipfailures] [-append] [-update] [-select field_list] [-where restricted_where|\@filename] [-progress] [-sql <sql statement>|\@filename] [-dialect dialect] [-preserve_fid] [-fid FID] [-limit nb_features] [-spat xmin ymin xmax ymax] [-spat_srs srs_def] [-geomfield field] [-a_srs srs_def] [-t_srs srs_def] [-s_srs srs_def] [-ct string] [-f format_name] [-overwrite] [[-dsco NAME=VALUE] ...] dst_datasource_name src_datasource_name [-lco NAME=VALUE] [-nln name] [-nlt type|PROMOTE_TO_MULTI|CONVERT_TO_LINEAR|CONVERT_TO_CURVE] [-dim XY|XYZ|XYM|XYZM|2|3|layer_dim] [layer [layer ...]] # Advanced options [-gt n] [[-oo NAME=VALUE] ...] [[-doo NAME=VALUE] ...] [-clipsrc [xmin ymin xmax ymax]|WKT|datasource|spat_extent] [-clipsrcsql sql_statement] [-clipsrclayer layer] [-clipsrcwhere expression] [-clipdst [xmin ymin xmax ymax]|WKT|datasource] [-clipdstsql sql_statement] [-clipdstlayer layer] [-clipdstwhere expression] [-wrapdateline] [-datelineoffset val] [[-simplify tolerance] | [-segmentize max_dist]] [-makevalid] [-addfields] [-unsetFid] [-relaxedFieldNameMatch] [-forceNullable] [-unsetDefault] [-fieldTypeToString All|(type1[,type2]*)] [-unsetFieldWidth] [-mapFieldType type1|All=type2[,type3=type4]*] [-fieldmap identity | index1[,index2]*] [-splitlistfields] [-maxsubfields val] [-explodecollections] [-zfield field_name] [-gcp ungeoref_x ungeoref_y georef_x georef_y [elevation]]* [-order n | -tps] [-nomd] [-mo "META-TAG=VALUE"]* [-noNativeData]
描述
ogr2ogr可用於在文件格式之間轉換簡單要素數據。它還可以在此過程中執行各種操作,例如空間或屬性選擇,減少屬性集,設置輸出座標系甚至在轉換過程中重新投影要素。
-f <format_name>
輸出文件格式的名稱,例如ESRI Shapefile,MapInfo File,PostgreSQL 。從GDAL 2.3開始,如果未指定,則從擴展名猜測格式(以前是ESRI Shapefile)。
-append
附加到現有圖層,而不是創建新圖層
-overwrite
刪除輸出層並重新創建爲空
-update
在更新模式下打開現有的輸出數據源,而不是嘗試創建一個新的數據源
-select <field_list>
輸入層中要複製到新層的字段的逗號分隔列表。即使輸入層具有重複的字段名稱,如果列表中前面已提及,也將跳過該字段。(默認爲all;如果找到具有相同名稱的後續字段,則將跳過任何字段。)也可以在列表中指定幾何字段。
請注意,此設置不能和-append一起使用。要在添加到圖層時控制字段的選擇,請使用-fieldmap或-sql。
-progress
在終端上顯示進度。僅在輸入圖層具有“快速要素計數”功能時纔有效。
-sql <sql_statement>
要執行的SQL語句。結果將保存到輸出中。從GDAL 2.1開始,該@filename語法可用於指示內容位於指向的文件名中。
-dialect <dialect>
SQL語言。在某些情況下,可以通過傳遞OGRSQL來使用(未優化的)OGR SQL代替RDBMS的本機SQL。“ SQLITE”語言也可以與任何數據源一起使用。
-where restricted_where
屬性查詢(如SQL WHERE)。從GDAL 2.1開始,該@filename 語法可用於指示內容位於指向的文件名中。
-skipfailures
失敗後繼續,跳過失敗的功能。
-spat <xmin> <ymin> <xmax> <ymax>
空間查詢範圍,位於源層(或用指定的層)的SRS中-spat_srs。僅選擇幾何形狀與範圍相交的要素。除非-clipsrc指定,否則幾何不會被裁剪 。
-spat_srs <srs_def>
覆蓋空間濾波器SRS。
-geomfield <field>
空間過濾器所基於的幾何字段的名稱。
-dsco NAME=VALUE
數據集創建選項(特定於格式)
-lco NAME=VALUE
圖層創建選項(特定於格式)
-nln <name>
爲新圖層分配一個備用名稱
-nlt <type>
爲創建的圖層定義幾何類型。包括NONE, GEOMETRY,POINT,LINESTRING,POLYGON, GEOMETRYCOLLECTION,MULTIPOINT,MULTIPOLYGON, MULTILINESTRING,CIRCULARSTRING,COMPOUNDCURVE, CURVEPOLYGON,MULTICURVE,和MULTISURFACE非線性幾何類型。在類型名稱中添加Z,M或ZM以使用高程,量度或高程和量度指定座標。PROMOTE_TO_MULTI可用於將mix polygon 或者 multipolygons轉爲multipolygons,以及將mix linestrings 或者r multilinestrings 轉爲 multilinestrings。這在shapefile轉換PostGIS和其他目標驅動程序時很有用。 CONVERT_TO_LINEAR可用於通過近似它們的非線性幾何類型爲線性幾何類型進行轉換,而且CONVERT_TO_CURVE促進非直線型(non-linear)到其廣義曲線類型(curve)(如:POLYGON到 CURVEPOLYGON,MULTIPOLYGON到MULTISURFACE,LINESTRING到 COMPOUNDCURVE,MULTILINESTRING到MULTICURVE)。從版本2.1開始,可以將類型定義爲已測量(“ 25D”保留爲單個“ Z”的別名)。某些強制的幾何轉換可能會導致無效的幾何,例如,當使用-nlt POLYGON強制轉換多部分多多邊形時,所得的多邊形將違反“簡單要素”規則。
從GDAL 3.0.5開始,並且 可以同時使用。-nlt CONVERT_TO_LINEAR-nlt PROMOTE_TO_MULTI
-dim <val>
迫使座標尺寸爲val(有效值是XY,XYZ, XYM,和XYZM-用於向後兼容性2是一個別名 XY和3是一個別名XYZ)。這會影響圖層幾何類型和要素幾何。可以將該值設置爲layer_dim 表示將要素幾何提升爲圖層聲明的座標尺寸。GDAL 2.1中添加了對M的支持。
-a_srs <srs_def>
分配輸出SRS。Srs_def可以是完整的WKT定義(難以避免),也可以是衆所周知的定義(即EPSG:4326)或具有WKT定義的文件。
-t_srs <srs_def>
在輸出上重新投影或轉換爲此SRS。
-s_srs <srs_def>
覆蓋源SRS。
-ct <string>
PROJ字符串(單步操作或以+ proj = pipeline開頭的多步字符串),描述CoordinateOperation的WKT2字符串或 urn:ogc:def:coordinateOperation:EPSG :: XXXX ,URN覆蓋從源到目標的默認轉換目標CRS。它必須考慮源CRS和目標CRS的軸順序。3.0版中的新功能。
-preserve_fid
使用源功能的FID,而不是讓輸出驅動程序自動分配一個新的(對於需要FID的格式)。如果不在附加模式下,則此行爲是默認行爲,如果輸出驅動程序具有FID圖層創建選項,則在這種情況下將使用源FID列的名稱,並嘗試保留源要素ID。可以通過設置禁用此行爲-unsetFid。
-fid fid
如果提供,將僅處理具有指定功能部件ID的功能部件。不包括空間查詢或屬性查詢。注意:如果要基於特徵ID選擇多個特徵,則還可以使用'fid'是OGR SQL可以識別的特殊字段這一事實。因此, -哪裏“在(1,3,5)中找到”會選擇特徵1、3和5。
-limit nb_features
限制每層要素的數量。
-oo NAME=VALUE
輸入數據集打開選項(特定於格式)。
-doo NAME=VALUE
目標數據集打開選項(特定於格式),僅在-update模式下有效。
-gt n
每筆交易的n組功能(默認爲20000)。寫入具有事務支持的DBMS驅動程序時,請增加該值以提高性能。n可以設置爲無限制,以將數據加載到單個事務中。
-ds_transaction
強制使用數據集級別的事務(對於支持這種機制的驅動程序),尤其是對於FileGDB之類的驅動程序,僅在仿真模式下支持數據集級別的事務。
-clipsrc [xmin ymin xmax ymax]|WKT|datasource|spat_extent
如果使用spat_extent關鍵字,則將數據源中的幾何形狀剪切到指定的邊界框(在源SRS中表示),WKT幾何形狀(POLYGON或MULTIPOLYGON),或者剪切到-spa ..選項的空間範圍。指定數據源時,通常將其與-clipsrclayer,-clipsrcwhere或-clipsrcsql選項結合使用
-clipsrcsql <sql_statement>
而是使用SQL查詢選擇所需的幾何。
-clipsrclayer <layername>
從源剪輯數據源中選擇命名圖層。
-clipsrcwhere <expression>
根據屬性查詢限制所需的幾何形狀。
-clipdst <xmin> <ymin> <xmax> <ymax>
重新投影到指定的邊界框(在dest SRS中表示),WKT幾何(POLYGON或MULTIPOLYGON)或從數據源中裁剪幾何。指定數據源時,通常需要結合使用-clipdstlayer,-clipdstwhere或-clipdstsq ..選項。
-clipdstsql <sql_statement>
而是使用SQL查詢選擇所需的幾何。
-clipdstlayer <layername>
從目標剪輯數據源中選擇命名圖層。
-clipdstwhere <expression>
根據屬性查詢限制所需的幾何形狀。
-wrapdateline
跨越日期線子午線的分割幾何體(長= +/- 180度)
-datelineoffset
與日期線的偏移,以度爲單位(默認長。= +/- 10度,將拆分170度至-170度之間的幾何形狀)
-simplify <tolerance>
距離公差以簡化。注意:所使用的算法會保留每個要素的拓撲,尤其是對於多邊形幾何體,而不是整個圖層。
-segmentize <max_dist>
2個節點之間的最大距離。用於創建中間點。
-makevalid
在幾何上運行該OGRGeometry::MakeValid()操作,然後運行, OGRGeometryFactory::removeLowerDimensionSubGeoms()以確保它們對於“簡單要素”規範的規則有效。
-fieldTypeToString type1,...
將指定類型的任何字段轉換爲目標圖層中string類型的字段。有效類型爲:Integer,Integer64,Real,String,Date,Time,DateTime,Binary,IntegerList,Integer64List,RealList,StringList。特殊值All可用於將所有字段轉換爲字符串。這是使用OGR SQL的CAST運算符的另一種方法,可以避免鍵入長的SQL查詢。請注意,這不會影響源驅動程序使用的字段類型,僅是事後轉換。
-mapFieldType srctype|All=dsttype,...
將指定類型的任何字段轉換爲另一種類型。有效類型爲:Integer,Integer64,Real,String,Date,Time,DateTime,Binary,IntegerList,Integer64List,RealList,StringList。類型還可以包括括號之間的子類型,例如Integer(Boolean),Real(Float32),…特殊值All可以用於將所有字段轉換爲另一種類型。這是使用OGR SQL的CAST運算符的另一種方法,可以避免鍵入長的SQL查詢。這是-fieldTypeToString的概括。請注意,這不會影響源驅動程序使用的字段類型,僅是事後轉換。
-unsetFieldWidth
將字段寬度和精度設置爲0。
-splitlistfields
根據需要將StringList,RealList或IntegerList類型的字段拆分爲String,Real或Integer類型的多個字段。
-maxsubfields <val>
與組合-splitlistfields以限制爲每個拆分字段創建的子字段的數量。
-explodecollections
爲源文件中任何種類的幾何圖形集合中的每種幾何圖形生成一個特徵,並在任何-sql選項之後應用。
-zfield <field_name>
使用指定的字段填充幾何的Z座標。
-gcp <ungeoref_x> <ungeoref_y> <georef_x> <georef_y> <elevation>
添加指示的地面控制點。可以多次提供此選項以提供一組GCP。
-order <n>
用於翹曲的多項式的階數(1到3)。默認設置是根據GCP的數量選擇多項式順序。
-tps
根據可用的GCP強制使用薄板花鍵變壓器。
-fieldmap
指定要從源複製到目標的字段索引列表。列表中指定的第(n)個值是目標層定義中該字段的索引,必須在其中複製源層的第n個字段。索引計數從零開始。要省略字段,請指定值-1。列表中的值必須與源層中字段的數量一樣多。我們可以使用“身份”設置來指定應使用相同的順序來傳輸字段。此設置應與-append設置一起使用。
-addfields
這是的專用版本-append。與相反-append, -addfields具有將現有源層中找到的新字段添加到現有目標層中的作用。合併結構非嚴格相同的文件時,此選項很有用。這可能不適用於不支持將字段添加到現有非空圖層的輸出格式。請注意,如果您打算使用-addfields,則可能需要將其與-forceNullable結合使用,包括進行初始導入。
-relaxedFieldNameMatch
如果目標驅動程序有實現,則以更輕鬆的方式在源和現有目標層之間進行字段名稱匹配。
-forceNullable
如果不可空約束存在於源層中,則不要將它們傳播到目標層。
-unsetDefault
如果默認字段值存在於源層中,則不要將其傳播到目標層。
-unsetFid
可以指定以防止將源FID列的名稱和源要素ID重新用於目標圖層。例如,如果選擇帶有ORDER BY子句的源要素,則此選項很有用。
-nomd
當輸出驅動程序支持時,禁止將元數據從源數據集和圖層複製到目標數據集和圖層。
-mo META-TAG=VALUE
當輸出驅動程序支持時,傳遞要在輸出數據集上設置的元數據鍵和值。
-noNativeData
禁止複製本機數據,即OGR抽象未捕獲的源格式的詳細信息,否則在轉換爲相同格式時某些驅動程序(如GeoJSON)會保留這些格式。2.1版中的新功能。
性能提示
當寫入事務性DBMS(SQLite / PostgreSQL,MySQL等)時,增加在BEGIN TRANSACTION和COMMIT TRANSACTION語句之間執行的INSERT語句的數量可能是有益的。該數字是使用-gt選項指定的。例如,對於SQLite,顯式定義-gt 65536可確保最佳性能,同時填充某些包含數十萬或數百萬行的表。但是,請注意,-skipfailures會覆蓋-gt並將事務大小設置爲1。
對於PostgreSQL,可以將PG_USE_COPY配置選項設置爲YES,以顯着提高插入性能。請參閱PG驅動程序文檔頁面。
通常,請參考輸入和輸出驅動程序的文檔頁面以獲取性能提示。
例子
從Shapefile到GeoPackage的基本轉換:
ogr2ogr \
-f GPKG output.gpkg \
input.shp
將座標參考系從更改EPSG:4326爲EPSG:3857:
將座標參考系從更改EPSG:4326爲EPSG:3857:
ogr2ogr \
-s_srs EPSG:4326 \
-t_srs EPSG:3857 \
-f GPKG output.gpkg \
input.gpkg
附加到現有層的示例(需要同時使用標誌-update和-append標誌):
ogr2ogr -update -append -f PostgreSQL PG:dbname=warmerda abc.tab
裁剪帶有邊界框的輸入層(<xmin> <ymin> <xmax> <ymax>):
ogr2ogr \
-spat -13.931 34.886 46.23 74.12 \
-f GPKG output.gpkg \
natural_earth_vector.gpkg
按-where子句過濾功能:
ogr2ogr \
-where "\"POP_EST\" < 1000000" \
-f GPKG output.gpkg \
natural_earth_vector.gpkg \
ne_10m_admin_0_countries
將PostgreSQL數據轉到另一個PostgreSQL數據庫中
ogr2ogr -f "PostgreSQL" PG:"host=localhost port=5432 dbname=ldgx user=postgres password=dlwy schemas=shpimport
" /home/serverdata/data/cda3badd-f3cf-45ba-8819-d07c8ffd7375/data/aaa.shp
-lco GEOMETRY_NAME=geom -lco FID=pk_uid --config SHAPE_ENCODING "UTF-8" -nlt PROMOTE_TO_MULTI -nln "newname"
參數詳解:
1)-f "PostgreSQL",即目標格式爲PostgreSQL,後面的PG即爲目標數據庫連接參數,支持導入到指定的schema中
2)接下來是導入數據的連接參數,這裏導入的是shapefile,則指明shp文件路徑即可
3)-lco GEOMETRY_NAME=geom,指明導入之後幾何字段的名稱爲geom
4)-lco FID=pk_uid,指明導入之後ID字段的名稱爲pk_uid
5)--config SHAPE_ENCODING "UTF-8",加入shapefile編碼聲明
6)-nlt PROMOTE_TO_MULTI,如果導入數據是Polygon,則強制轉換爲MultiPolygon。由於創建的目標數據要求幾何爲MultiPolygon,如果Polygon不轉爲MultiPolygon,則無法導入
7)-nln "newname",導入數據重新命名爲newname
PostgreSQL數據轉到另一個PostgreSQL數據庫中:
ogr2ogr -f "PostgreSQL" PG:"host=192.168.20.11 port=5432 dbname=ldgx user=postgres password=1234"
PG:"host=localhost port=5432 dbname=ldgx user=postgres password=1234" "ldgx_p_edit"
-progress -lco GEOMETRY_NAME=geom -lco FID=pk_uid -nlt PROMOTE_TO_MULTI
參數詳解:
1)跟在源數據庫連接後面的"ldgx_p_edit"參數,是指定導入的數據名稱,如果不指定,則整庫導入
2)-progress,會在命令行中顯示轉換進度,
將FileGDB數據轉爲PostgreSQL數據:
ogr2ogr -f "PostgreSQL" PG:"host=localhost port=5432 dbname=projtest user=postgres password=1237 schemas=test
"/Users/paiconor/Downloads/FILEGDBDATA.gdb "project"
-progress -lco GEOMETRY_NAME=geom -lco FID=pk_uid -nlt PROMOTE_TO_MULTI -nln "newname"
從ETRS_1989_LAEA_52N_10E重新投影到EPSG:4326並裁剪到邊界框的示例:
ogr2ogr -wrapdateline -t_srs EPSG:4326 -clipdst -5 40 15 55 france_4326.shp europe_laea.shp
使用-fieldmap設置的示例。源層的第一字段用於填充目標層的第三字段(索引2 =第三字段),源層的第二字段被忽略,源層的第三字段用於填充目標層的第五字段目標層。
ogr2ogr -append -fieldmap 2,-1,4 dst.shp src.shp
更多數據轉換:
(參考:數據轉換)
(1)MapInfo ==> ESRI Shape
ogr2ogr -f "ESRI Shapefile" mydata.shp mydata.tab
(2)ESRI Shape ==>MapInfo
ogr2ogr -f "MapInfo File" tabsites.tab sites.shp
(3)MapInfo ==> PostGIS
ogr2ogr -f "PostgreSQL" PG:"host=localhost user=postgres dbname=postgis password=123456"
(4)postgis==>ESRI Shapefile
ogr2ogr -f "ESRI Shapefile" mydata.shp
PG:"host=localhost dbname=postgis user=postgres password=123456" "mytable"
(5)PostGIS ==> KML
ogr2ogr -f "KML" neighborhoods.kml
PG:"host=localhost dbname=postgis user=postgres password=123456"
-sql "select gid,name,the_geom from neighborhoods"
(6)批量轉換
將postgis中所有的表都導出到mydatadump文件夾下,導出格式是ESRI Shapefile
ogr2ogr -f "ESRI Shapefile" mydatadump
PG:"host=myhost user=myloginname dbname=mydbname password=mypassword"
部分導出,將指定的表導出到mydatadump中,格式爲ESRI Shapefile
ogr2ogr -f "ESRI Shapefile" mydatadump
PG:"host=myhost user=myloginname dbname=mydbname password=mypassword" neighborhood parcels
(7)ESRI GeoDatabase (*.mdb) ==>PostGIS
ogr2ogr -f "PostgreSQL" PG:"host=localhost user=someuser dbname=somedb password=somepassword port=5432"
C:\GISData\Geonames.mdb -a_srs EPSG:26986
導入指定的featureclass,重投影,重命名geometry列
ogr2ogr -f "PostgreSQL" PG:"host=localhost user=someuser dbname=somedb"
/home/postgres/Data/Geonames.mdb GEONAMES_ANNO_HYDRO -a_srs EPSG: 26986 -t_srs EPSG:4269
-nln ma_hydro -lco GEOMETRY_NAME=the_geom_4269
(8)ESRI Shapefile ==>MySQL
ogr2ogr -f "MySQL" MYSQL:"mydb,host=myhost,user=mylogin,password=mypassword,port=3306"
-nln "world" -a_srs “EPSG:4326" path/to/world_adm0.shp
(9)Non-spatial Data ==>PostgreSQL
ogr2ogr -f "PostgreSQL" PG:"host=myserver user=myusername dbname=mydbname password=mypassword"
sometable.dbf -nln "sometable"
下面是如何將shp和tab文件導入到postgis數據庫中的命令方式
ogr2ogr -f PostgreSQL PG:"host=localhost dbname=postgis user=postgres password=850315" sites.shp
ogr2ogr -f PostgreSQL PG:"host=localhost dbname=postgis user=postgres password=850315" mytabfile.tab
通過 -nln指定導入數據庫中的表名,而不是默認的文件名作爲表名
ogr2ogr -f "PostgreSQL" PG:"host=myhost user=myloginname dbname=mydbname password=mypassword"
mytabfile.tab -nln newtablename
通過 -a_srs 選項指定輸出的投影
ogr2ogr -f "PostgreSQL" -a_srs "EPSG:2249" PG:"host=myhost user=myloginname dbname=mydbname password=mypassword" mytabfile.tab
通過-sql 選項後面的SQL語句對postgis中的數據經行篩選後到處到shp文件中
ogr2ogr -f "ESRI Shapefile" mydata.shp PG:"host=myhost user=myloginname dbname=mydbname password=mypassword"
-sql "SELECT name, the_geom FROM neighborhoods"
可以通過ogrinfo命令來查看元數據
ogrinfo sites.shp