【问题标题】:Convert svg to geojson fails with ogr2ogr使用 ogr2ogr 将 svg 转换为 geojson 失败
【发布时间】:2015-12-09 19:08:44
【问题描述】:

我从http://www.amcharts.com/svg-maps/?map=finland下载了一张芬兰的 .svg 地图

我想将它转换为 topojson 以便与 d​​3.js 一起使用。我首先从 svg 到 geojson 的转换开始,但它失败了。

我试过了:

ogr2ogr -f "GeoJSON" finland_kunta.json finlandHigh.svg 

我得到的错误:

FAILURE:
Unable to open datasource `finlandHigh.svg' with the following drivers.
  -> ESRI Shapefile
  -> MapInfo File
  -> UK .NTF
  -> SDTS
  -> TIGER
  -> S57
  -> DGN
  -> VRT
  -> REC
  -> Memory
  -> BNA
  -> CSV
  -> GML
  -> GPX
  -> KML
  -> GeoJSON
  -> GMT
  -> GPKG
  -> SQLite
  -> WAsP
  -> PCIDSK
  -> OpenFileGDB
  -> XPlane
  -> AVCBin
  -> AVCE00
  -> DXF
  -> Geoconcept
  -> GeoRSS
  -> GPSTrackMaker
  -> VFK
  -> PGDump
  -> OSM
  -> GPSBabel
  -> SUA
  -> OpenAir
  -> PDS
  -> WFS
  -> HTF
  -> AeronavFAA
  -> EDIGEO
  -> GFT
  -> GME
  -> SVG
  -> CouchDB
  -> Idrisi
  -> ARCGEN
  -> SEGUKOOA
  -> SEGY
  -> XLS
  -> ODS
  -> XLSX
  -> ElasticSearch
  -> PDF
  -> CartoDB
  -> SXF

我才刚刚开始弄清楚这些工具,所以我不确定究竟是什么导致了错误。当我打开 svg 时,它看起来很好并且拥有所有元素。

【问题讨论】:

  • 您不能使用 SVG 作为源。使用错误消息中列出的格式之一。
  • 没看懂,错误信息列表中还包含svg。
  • 啊,很好——不过,您需要一种非常特殊的 SVG 类型,请参阅 gdal.org/drv_svg.html
  • 好的,现在我明白了!我刚刚开始并且对这些技术非常天真,但我想知道是否有一些方法可以从这种 svg 到 topojson。如果没有明显的方法,我想我必须寻找其他东西,只是我发现了很多svg地图,我认为我可以使用它们。您对在哪里寻找正确的地图有什么建议,以及我是否应该为 svgs 烦恼,或者只是开始寻找其他东西?
  • 我问是因为我找到了很多 shapefile,但是我很难找到已经被分割成区域并且还包含这些区域的正确名称的东西。

标签: svg geojson ogr2ogr


【解决方案1】:

其实大多数情况下你可以直接使用SVG图片,不需要转换成topojson或者GeoJSON但是有几个问题需要考虑:

  1. 对于您的应用程序来说,原始 SVG 文件是否太大?如果是,那么您可以优化 SVG 文件(例如,使用:http://petercollingridge.appspot.com/svg-editor)。如果这还不够,那么您可以从另一个来源(例如:http://www.naturalearthdata.com/downloads/)获取 shapefile 并将其转换为 GeoJSON(使用 ogr2ogr,通过他们的 Web 界面http://ogre.adc4gis.com/ 或使用 GDAL 在http://trac.osgeo.org/gdal/wiki/DownloadingGdalBinaries 下载它) .如果生成的文件仍然太大,您可以使用 mapshaper 进行压缩(http://www.mapshaper.org/ - 它同时采用 shapefile 和 GeoJSON 格式!),如有必要(如果您的文件大小仍然存在问题)将生成的地图从 GeoJSON 转换为 topojson(请参阅:http://github.com/mbostock/topojson/wiki)。

  2. 您需要在地图中使用位置数据吗? (例如,您可能需要标记某个城市在地图中的位置,但该城市并未绘制在原始 SVG 上)然后更容易获取 shapefile 并将其转换为 GeoJSON(使用 ogr2ogr),因为您很可能会这样做下载的 SVG 文件中没有地理位置信息。

  3. 如果您正在创建一个等值线并且没有地理位置要求,那么您只需将 SVG 直接添加到您的页面并使用 D3 将数据映射到您的图像!在页面中添加 SVG 后,您甚至可以手动编辑所有路径数据以包含类和 ID,这将使您的 D3 工作更轻松。

【讨论】:

  • 是否可以将位置数据添加到现有的 svg 中?我有许多室内细节的 svg 方案。但只知道建筑物边缘的坐标。
  • 嗨,@pronevich。可以将位置数据添加到现有的 svg,但这完全取决于您需要添加多少数据(意思是:手动添加位置与编写 hack 来添加位置)以及您需要如何使用位置数据。但是,如果有一种方法可以定位/选择 svg 中的每个对象,那么您不需要将数据直接添加到 svg,您可以即时添加/加入位置。针对您的场景提出一个新问题,我会帮助您。
猜你喜欢
  • 2021-11-02
  • 2012-01-04
  • 2015-05-10
  • 2015-01-27
  • 2016-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-02
相关资源
最近更新 更多