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>

輸出文件格式的名稱,例如,, 。從GDAL 2.3開始,如果未指定,則從擴展名猜測格式(以前是ESRI Shapefile)。ESRI ShapefileMapInfo FilePostgreSQL

-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, GEOMETRYPOINTLINESTRINGPOLYGON, GEOMETRYCOLLECTIONMULTIPOINTMULTIPOLYGON, MULTILINESTRINGCIRCULARSTRINGCOMPOUNDCURVE, CURVEPOLYGONMULTICURVE,和MULTISURFACE非線性幾何類型。在類型名稱中添加ZMZM以使用高程,量度或高程和量度指定座標。PROMOTE_TO_MULTI可用於自動提升將多邊形或多面體混合爲多面體的層,以及將線串或多線串混合爲多線串的層。將shapefile轉換爲實現對幾何類型的嚴格檢查的PostGIS和其他目標驅動程序時,可能會很有用。 CONVERT_TO_LINEAR可用於通過近似它們的非線性幾何類型爲線性幾何類型進行轉換,並CONVERT_TO_CURVE促進非直線型到其廣義曲線類型(POLYGON到 CURVEPOLYGONMULTIPOLYGONMULTISURFACELINESTRING到 COMPOUNDCURVEMULTILINESTRINGMULTICURVE)。從版本2.1開始,可以將類型定義爲已測量(“ 25D”保留爲單個“ Z”的別名)。某些強制的幾何轉換可能會導致無效的幾何,例如,當使用強制轉換多部分多多邊形時,所得的多邊形將違反“簡單要素”規則。-nlt POLYGON

從GDAL 3.0.5開始,並且 可以同時使用。-nlt CONVERT_TO_LINEAR-nlt PROMOTE_TO_MULTI

-dim <val>

迫使座標尺寸爲val(有效值是XYXYZ, XYM,和XYZM-用於向後兼容性2是一個別名 XY3是一個別名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驅動程序文檔頁面。

通常,請參考輸入和輸出驅動程序的文檔頁面以獲取性能提示。

C API

也可以使用C從C調用此實用程序GDALVectorTranslate()

例子

從Shapefile到GeoPackage的基本轉換:

ogr2ogr \
  -f GPKG output.gpkg \
  input.shp

將座標參考系從更改EPSG:4326EPSG: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

從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

在單獨的格式頁面中提供了更多示例。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章