【问题标题】:How to get coordinates of an svg?如何获取svg的坐标?
【发布时间】:2011-10-20 16:11:24
【问题描述】:

如何找出 svg 的坐标?我有一个包含地图的 Adob​​e Illustrator 文件,该文件已绘制并分为美国各州,如何找到每个州的坐标?

我只是以美国地图为例,我可能会将这种技术用于其他几张地图(更本地化!!)。

【问题讨论】:

    标签: map svg adobe-illustrator


    【解决方案1】:

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

    详情请见:http://www.w3.org/TR/SVG/paths.html#PathDataGeneralInformation

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

    【讨论】:

      【解决方案2】:

      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) 执行此操作的屏幕截图。这会将数据放入一个表格中,然后我将其显示出来。

      【讨论】:

      • 这很有用。正是我将 SVG 与动画生成器连接所需要的。您的命令在 Windows 10 上对我有用,只是 Inkscape 无法识别 -z 。然而,没有它,一切似乎都可以正常工作。其他 Windows 用户请注意,我必须从 Inkscape 的 \bin 目录( c:\Program Files\Inkscape\bin )运行它,否则 Windows 无法识别该命令。大概我可以把目录放在我的 PATH 上。
      • 我注意到你的坐标和宽度和高度是错误的。我已经提交了修正后的答案,并添加了一些其他信息。
      猜你喜欢
      • 2013-10-09
      • 2021-11-21
      • 2017-10-25
      • 2012-09-26
      • 2022-01-13
      • 2012-04-25
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多