Answers:
我刚刚编写了一个库,该库将SVG图像转换为(略有错误)GeoJSON。
它要求您手动编辑SVG,以添加两个XML标记,这些标记将SVG位置与经/纬度相关联,并且它提供了命令行工具来转换文件。如果愿意,它甚至可以接受所有顶级组(这是Illustrator导出其图层的方式)并将它们导出为单独的文件。
# First, install Node.js
$ npm install svg2geojson -g # install globally for easy access to executable
$ svg2geojson -h
Usage: svg2geojson [options] file.svg
Options:
-t, --tolerance=0.1 Distance (world meters) to sample curves to. (default: 0.1)
-l, --layers Split top-level groups into separate files. (default: one file)
-o, --stdout Output GeoJSON to stdout. (default: write files with names based on the SVG/layer)
-m, --minimal Make the GeoJSON as small as possible (not pretty).
-p, --precision Number of decimal places to format JSON numbers to. (default:6, as GeoJSON recommends)
-d, --debug Include ids for each SVG element in the features. (default: no properties)
-v, --version Output the version of svg2geojson as the first line on stdout (0.7.0).
-h, --help Show this help message.
$ svg2geojson my.svg
Wrote my.geojson
使用幼稚/不正确的非投影技术,该技术假定图像的矩形区域对应于矩形的纬度/经度区域。例如,在旧金山附近大约1英里宽乘半英里高的矩形上,底部边缘比顶部边缘长约4英寸。这已经足够满足我的需求。
当前不支持使用带有二次贝塞尔曲线或椭圆弧命令的路径的SVG。(我正在努力添加这些。)
<p5:GeoItem Longitude="22.1471203091967" Latitude="44.2498454806746" X="0" Y="1" />
如何将这4个地理坐标转换为这8个项目数据集?
下面提到的是Phrogz的一个命令行工具,我尚未签出:
对于来到这里的任何人,答案是:“这是相当困难的(至少对于有经验的程序员而言,但对于经验不足的制图师而言)。” 它需要对空间参考系统(SRS)的工作方式有一个肤浅的了解。您或多或少需要使用QGIS之类的.SVG进行地理编码。怎么做?仍然没有头绪。但是答案是:
“您不能简单地将SVG转换为GeoJSON,因为SVG缺少基本的地理参考。”
如果要继续,请开始搜索如何地理参考DXF文件。
GermánCarrillo的回答非常有用。
命令行工具ogr2ogr应该能够做到这一点。就像是:
ogr2ogr -f "GeoJSON" dst.json src.svg
这两种格式均受支持http://www.gdal.org/ogr_formats.html。如果您不熟悉ogr2ogr,最简单的下载和安装方法可能是通过https://trac.osgeo.org/osgeo4w/进行。
您无需从SVG转换为GeoJSON即可将图像用于d3中的波形,尽管其他库可能需要这样做。
SVG文件上的路径信息(地图中每个州/国家/州/分区至少必须有一个路径)足以将数据映射到d3中的SVG图像。
让我换一种说法:如果您可以在原始svg上执行d3.select,而每个州/国家/地区仅返回一条路径,则可以使用d3来构建一个弦波。在SVG中有地图时,通常就是这种情况。实际上,它比使用GeoJSON文件更简单,因为您无需担心空间位置,投影等问题。您甚至可能想要调整原始SVG来添加缺少的信息(例如状态名称,您可以将其添加为DOM ID或类),然后将其与D3结合使用,但这通常不是必需的。
另一方面,如前所述,SVG仅具有路径/线信息,而没有地理/空间信息,因此,如果要从SVG转换为GeoJSON,则需要将ADD / MAP地理位置信息添加到SVG图像中。例如,您可以先从svg转换为JSON,然后计算/添加地理位置信息(这将取决于您要映射的区域)并从中生成GeoJSON。据我所知,虽然没有开箱即用的工具为您完成这项工作。
我会尝试为您要查找的省份使用shapefile格式而不是SVG。由于数据是公有领域,因此很有可能找到它。请尝试http://www.naturalearthdata.com/或在此处提问。然后从Shapefile转换为GeoJSON或TopoJSON;MapShaper是您的朋友。从这一点开始,D3应该可以到达了(优秀的教程“ 让我们来做一张地图”)