如何获取SVG的坐标?

4

如何找到svg的坐标?我有一个Adobe Illustrator文件,其中包含一张地图,这张地图已经被绘制并分成了美国各州,我如何找到每个州的坐标?

我只是举了美国地图的例子,我可能会使用这种技术来处理其他地图(更局部的地图!!)。

2个回答

3
Inkscape可以很好地完成这项任务。它有一个命令界面,详见http://tavmjong.free.fr/INKSCAPE/MANUAL/html/CommandLine.html(该链接是作者Tavmjong Bah的网站上手册的副本,需要注意的是,它警告手册未更新到最新版本的Inkscape。但是,当我尝试时,该命令可以正常工作。)
该命令:
inkscape -S some_file.svg

将输出包含元素id、左上角的x和y坐标以及元素的宽度和高度的行。每个SVG元素都有一行。以下是一个示例:

svg2293,26.447175,24,97.105652,92.450851
layer1,26.447175,24,97.105652,92.450851
MyStar,26.447175,24,97.105652,92.450851

这个例子来自http://tavmjong.free.fr/INKSCAPE/MANUAL/html/CommandLine-Query.html。它从包含星形的SVG中提取信息,该图形在我的第一个链接中显示。
在我的Windows 10系统上,Inkscape位于c:\Program Files\Inkscape\,可执行文件位于其中的bin\子目录下。如果我切换到该子目录,Windows将识别inkscape命令;同样,如果我从其他地方使用完整路径调用可执行文件,例如:
"c:\Program Files\Inkscape"\bin\inkscape -S some_file.svg

把它加入我的PATH路径似乎也可以起作用。

Inkscape有许多其他命令,其中包括提取对象位置和大小信息的其他命令。后者被称为"查询命令"。可以提取指定对象的信息,例如:

inkscape --query-id=zoom-in -X /usr/share/inkscape/icons/icons.svg

这是一个示例,演示如何在Linux系统上的默认图标文件中找到放大镜图标的x位置。

要将输出保存到文件中,请使用>。例如:

"c:\Program Files\Inkscape"\bin\inkscape -S some_file.svg > coords.txt

为了让大家更加放心,这里有两张实际工作中的屏幕截图。

在DOS中使用Inkscape -S命令的屏幕截图

在DOS中使用Inkscape -S命令的屏幕截图

一旦你将数据存储在文件中,就可以将其读入程序中。下面是我在R编程语言中执行此操作的屏幕截图,使用了read_csv函数(https://readr.tidyverse.org/reference/read_delim.html)。这将数据放入一个表中,然后我将其显示出来。

R的read_csv函数读取此数据的屏幕截图


非常有用。这正是我需要的,可以将我的SVG与动画生成器进行接口连接。 您的命令在Windows 10上对我有效,只是Inkscape没有识别-z。但是,似乎没有它也能正常工作。其他Windows用户请注意,我必须从Inkscape的\bin目录(c:\ Program Files \ Inkscape \ bin)运行此命令,否则Windows无法识别该命令。我可以将该目录放在我的PATH上。 - Phil van Kleur
我注意到你把坐标和宽高搞反了。我已经提交了一个修正后的答案,并添加了一些其他信息。 - Phil van Kleur
我今天学到了新的、很棒的东西!这是一个很好的答案! - j0h

2

SVG具有XML结构。状态将在<path>标记中,希望状态名称出现在某个属性中。路径的坐标由d属性定义,但它们可能会变得非常复杂,因为它们可以是相对或绝对的,并且具有各种类型的曲线。对于曲线,最简单的方法可能是仅考虑最后两个值,即曲线结束的位置。

有关完整详细信息,请参见:http://www.w3.org/TR/SVG/paths.html#PathDataGeneralInformation

如果对路径应用了进一步的变换,则情况可能更加复杂。祝你好运!


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