将SVG转换为GeoJSON失败,使用ogr2ogr。

3

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

我想将它转换为topojson以便能够在d3.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用作源。请使用错误消息中列出的格式之一。 - Lars Kotthoff
我不明白,在错误消息列表中也包括了svg。 - Dmitry Smirnov
啊,发现得好--不过你需要一种非常特定的SVG类型,请参见http://www.gdal.org/drv_svg.html。 - Lars Kotthoff
好的,现在我明白了!我刚开始接触这些技术,还很幼稚,但我想知道是否有一种方法可以从这种svg转换为topojson。如果没有明显的方法,我想我必须寻找其他东西,只是我发现有很多svg地图,我想我可以使用它们。您有关于在哪里寻找正确的地图以及是否应该费心使用svg或者开始寻找其他东西的建议吗? - Dmitry Smirnov
我之所以问是因为我找到了很多shapefile文件,但是我很难找到已经被分割成区域并且包含这些区域正确名称的文件。 - Dmitry Smirnov
一般来说,我会使用shapefile作为起点。如果名称不正确,您可以随时自行编辑。 - Lars Kotthoff
1个回答

4
实际上,在大多数情况下,您可以直接使用SVG图像,无需将其转换为topojson或GeoJSON,但是有一些问题需要考虑:
1. 原始SVG文件大小是否过大?如果是,则可以优化SVG文件(例如使用:http://petercollingridge.appspot.com/svg-editor)。如果这还不够,则可以从其他来源获取shapefile(例如:http://www.naturalearthdata.com/downloads/)并将其转换为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
嗨,@pronevich。可以将位置数据添加到现有的SVG中,但这完全取决于您需要添加多少数据(手动添加位置与编写黑客程序添加位置之间的区别)以及您如何使用位置数据。 但是,如果有一种方法可以定位/选择SVG中的每个对象,则无需直接向SVG添加数据,您只需在运行时添加/连接位置即可。 打开一个新问题并告诉我您的情况,我会帮助您解决问题。 - Roberto Stelling

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接