将数据管道传输到ogr2ogr


10

是否可以直接通过管道传输数据到ogr2ogr?我正在尝试对curlGeoJSON文件进行处理,并将其通过管道转换ogr2ogr为另一种格式。

在不使用管道的情况下,我能够通过首先编写文件然后使用以下命令对其进行转换来实现此目的,但是我很好奇是否可以跳过该步骤。

curl "https://raw.githubusercontent.com/nvkelso/natural-earth-vector/master/geojson/ne_50m_admin_0_countries.geojson" -o "countries.geojson" && ogr2ogr -f "KML" countries.kml countries.geojson

我也尝试用curl输出创建变量而不是管道输出,但ogr2ogr无法读取它:

DATA=$(curl -s "https://raw.githubusercontent.com/nvkelso/natural-earth-vector/master/geojson/ne_50m_admin_0_countries.geojson") && ogr2ogr -f "KML" countries.kml $DATA

Answers:


18

OGR对于stdin有自己的习惯用法/vsistdin/。将其用作ogr2ogr的第一个参数(dst_datasource_name),然后可以将curl的输出传递给它:

curl "https://raw.githubusercontent.com/nvkelso/natural-earth-vector/master/geojson/ne_50m_admin_0_countries.geojson" | ogr2ogr -f "KML" countries.kml /vsistdin/

2
至少在Windows上它也是如此:trac.osgeo.org/gdal/wiki/UserDocs/ReadInZip上的ogrinfo -ro -al -so /vsicurl/http://svn.osgeo.org/gdal/trunk/autotest/ogr/data/poly.shp其他示例
user30184 2014年

8

您可以将URL用作OGR数据源的路径,因此不需要卷曲或管道。

ogr2ogr -f KML countries.kml https://raw.githubusercontent.com/nvkelso/natural-earth-vector/master/geojson/ne_50m_admin_0_countries.geojson

1
棒极了!我不知道那是可能的。这是比接受的答案更干净的解决方案,但是问题显然是关于管道到ogr2ogr
jczaplew 2014年

2
好人,迈克!我不会将它们中的任何一个都称为超级干净(ogr2ogr将目标放在源代码之前就烦了我)。将URL视为本地文件是可行的,直到无效。而且curl具有ogr2or没有的很多选项(详细模式,安全性)。
sgillies

最后列出的源文件是一个合理的选择,因为可以有多个。
史蒂夫·本内特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.