【发布时间】:2011-10-20 16:11:24
【问题描述】:
如何找出 svg 的坐标?我有一个包含地图的 Adobe Illustrator 文件,该文件已绘制并分为美国各州,如何找到每个州的坐标?
我只是以美国地图为例,我可能会将这种技术用于其他几张地图(更本地化!!)。
【问题讨论】:
标签: map svg adobe-illustrator
如何找出 svg 的坐标?我有一个包含地图的 Adobe Illustrator 文件,该文件已绘制并分为美国各州,如何找到每个州的坐标?
我只是以美国地图为例,我可能会将这种技术用于其他几张地图(更本地化!!)。
【问题讨论】:
标签: map svg adobe-illustrator
SVG 具有 XML 结构。状态将在<path> 标签中,希望在某处带有状态名称作为属性。路径的坐标由d 属性定义,但它们可能会变得相当复杂,因为它们可以是相对的或绝对的,并且具有各种类型的曲线。对于曲线,最简单的方法可能是只考虑最后两个值,即曲线结束的地方。
详情请见:http://www.w3.org/TR/SVG/paths.html#PathDataGeneralInformation
如果对路径应用进一步的变换,情况可能会更复杂。祝你好运!
【讨论】:
Inkscape 做得很好。它有一个命令接口,在http://tavmjong.free.fr/INKSCAPE/MANUAL/html/CommandLine.html 中描述。 (该链接指向website of its author,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\ 子目录中。如果我cd 到那个子目录,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
看到实际的例子让人放心,这里有两张这个工作的截图。
一旦您将数据保存在文件中,您就可以将其读入程序。下面是我在 R 编程语言中使用 read_csv 函数 (https://readr.tidyverse.org/reference/read_delim.html) 执行此操作的屏幕截图。这会将数据放入一个表格中,然后我将其显示出来。
【讨论】: