Inkscape突出显示svg的不同部分,并在html中操作svg映射

场景:想要在特定城市的地图上提供丰富的图形图表。 由于我找不到该城市的官方svg版本地图,我决定亲自尝试。

我能够获得城市的官方pdf地图,并使用inkscape将其转换为svg。 我希望能够在地区层面上操作地图。 使用Inkscape,我可以将区域的边界进一步划分为我想要处理的分区。 然后,我想操纵或在这些分区工作。

区级是路径(inkscape术语)。

a)在Inkscape中,通过路径选项选择编辑节点后,如何拆分单个区域(区域)以便它们显示为路径。 我无法实现这种分离。

b)鉴于svg,我然后将其导入到html。 我该如何操作svg dom以查找该地图的特定部分(例如,如果我要单击a中的子区域)能够获取该区域的数据)。 这可能吗 ? 操纵svg的不同部分,如果是这样的提示/指示如何去了解它将不胜感激。

谢谢!

PS:请向downvoter解释你的downvote。

编辑:添加有关研究的信息。 事实证明,在我走到另一边后,用jvectormap玩弄了我所需要的东西,然后回过头来看看这个; 我做的错误是onClick()vs onclick()(..argh)。 在任何情况下,在这里添加细节来表明它可以工作,但是我无法调整图像的尺寸,并且我将在下面发布解决方案的替代方案。 PS:我对SVG的使用经验是2天,所以根据我对操作来自其他解决方案的图像的学习,我拥有了合适的svg。 也许@robert-longson可以解释来自inkscape的svg输出和svg-edit的svg输出之间有什么区别。

前提条件:

  • 使用inkscape将PDF转换为svg
  • 选择节点,分开将文本转换为路径(我之前没有这样做)。
  • 这主要是为了b)部分我添加了一个onclick事件并绘制了我对红色感兴趣的区域。 所以,如果我要从浏览器加载svg(并加载jquery),那么点击选定的区域就可以按预期工作。

    从浏览器加载的SVG

    现在,如果我要将svg作为图像加载,它不起作用(这是我放弃的地方,因为我没有我的地区,并且没有使用svg dom .duh!)。 看起来正确的方式是使用object标签加载它。

    现在,如果我试图通过HTML使用对象标签加载图像它的作品。 在这里输入图像描述

    但是,即使在svg标签中调整图像或按照此处的建议进行调整后,我仍然无法调整图像的尺寸

    我现在已经分支到我的另一个解决方案,主要是因为区域功能的突出显示在杰出的jvectormap库中。

    编辑:这个要点显示使用Inkscape制作的svg。 在svg-editor中打开相同的文件,然后查看源代码; 在“路径数据”上有某种转换:路径的d属性。 这是转换后的输出,最终在svgto.jvectormap中运行良好。


    简而言之,我能够实现我所需要的:

  • 使用Inkscape将SVG转换为PDF
  • 剪切节点以从svg获取路径。
  • 使用Inkscape将区域(地区级别)划分为路径。
  • 上传这个svg到svg-edit工具
  • 使用4)中的工具中的svg来导入一个工具,将svg转换为jvectormap
  • 在html中使用生成的jvectormap。

    更多细节

  • 带有视频的长版本可在此处找到。
  • 最终输出可以在这里查看
  • 也许@RobertLongson可以解释来自inkscape的svg输出与来自svg-edit的svg输出之间有什么区别。


    在Angular / JS App中使用它的另一个解决方案,我在这里使用Typescript和导出的inskscape svg。 首先使用“对象属性”中的标签标签(如果要使用多个贴图,请使用标签标签)在Inkscape中标记要操作的每个元素。 然后通过标记名得到你的svg对象,并得到你的重要,然后添加你的监听器:)

    this.mySvg = svg.getElementsByTagName("svg")[0];
    let myDom = this.mySvg.getElementsByTagName("*");
        for(let i=0; i < myDom.length; i++) {
          let label = myDom[i].getAttribute('inkscape:label');
          let style = myDom[i].getAttribute('style');
          if (label && style) {
               myDom[i].addEventListener("click", () => this.onClick(myDom[i], style));
          }
        }
    
    链接地址: http://www.djcxy.com/p/56943.html

    上一篇: Inkscape highlight different parts of a svg and manipulate the svg map in html

    下一篇: Any route to go from inkscape design to html5 with animations?