GDAL和OGR虚拟格式,读取* .csv文件并创建行的shapefile

时间:2013-04-18 20:25:15

标签: csv shapefile gdal

我有一个文本文件(* .csv),并在该文件中成功定义了XYZ以编写点的shapefile:

ogr2ogr -f "ESRI Shapefile" testing.shp conduitout.vrt

我的* .vrt文件如下所示:

<OGRVRTDataSource>
    <OGRVRTLayer name="conduitout">
        <SrcDataSource>conduitout.csv</SrcDataSource>
        <GeometryType>wkbPoint</GeometryType>
        <LayerSRS>EPSG:2232</LayerSRS>
        <GeometryField encoding="PointFromColumns" x="start1" y="start2" z="start3"/>
    </OGRVRTLayer>
</OGRVRTDataSource>

如何更改此内容以便我可以编写行的shapefile?我的输入文件(* .csv)中有X1,Y1,Z1和X2,Y2,Z2。我想通过在* .vrt文件中定义以下内容来实现这一点:

<OGRVRTDataSource>
    <OGRVRTLayer name="conduitout">
        <SrcDataSource>conduitout.csv</SrcDataSource>
        <GeometryType>wkbMultiLineString</GeometryType>
        <LayerSRS>EPSG:2232</LayerSRS>
        <GeometryField encoding="WKB" />
    </OGRVRTLayer>
</OGRVRTDataSource>

但我不确定如何从* .csv文件的列定义每一行的起点和终点。

非常感谢

2 个答案:

答案 0 :(得分:0)

对于Wkb和Wkt,您的几何应该在包含有效Wkb或Wkt格式的单个列中。在下面的示例中,我使用WKT编码,因为它更具可读性。另请注意,Wkt几何使用逗号,因此您的文件不能将逗号作为分隔符。

'csv'文件:

Name;Lines
"Line1";LINESTRING (30 10, 10 30, 40 40)
"Line2";LINESTRING (5 10, 0 30, -30 40)

和vrt文件:

<OGRVRTDataSource>
       <OGRVRTLayer name="Linestest">
        <SrcDataSource SEPARATOR="SEMICOLON">D:\indata.csv</SrcDataSource> 
        <SrcLayer>indata</SrcLayer> 
        <GeometryType>wkbLineString</GeometryType> 
        <GeometryField encoding="WKT" field="Lines"/>
      </OGRVRTLayer>
</OGRVRTDataSource>

有关Wkt和Wkb几何图形格式的更多信息,请参阅Wikipedia: http://en.wikipedia.org/wiki/Well-known_text

答案 1 :(得分:0)

使用“LINESTRING()" instead of LINESTRING()

应用于上一个示例:

'csv'文件:

Name;Lines
"Line1";"LINESTRING (30 10, 10 30, 40 40)"
"Line2";"LINESTRING (5 10, 0 30, -30 40)"