首先,gist here
要点中的 Map.svg 是我正在使用的原始 map ,它是从维基共享资源中获取的。
现在,在原始 svg 中,得克萨斯州东部海岸外有一 block 陆地。我使用 Inkscape 删除了它,它以一种奇怪的新方式重新编写了路径。差异包含在要点中。
现在,这种编写路径的新方法破坏了我的解析器逻辑,我正试图了解发生了什么。我希望这里有人对我所做的 SVG 文件格式有更多了解。我承认我没有通读整个 SVG 标准规范,但是我读过的部分没有提到任何关于缺少命令或相对坐标的内容。然后我可能一直在看不正确的规范,不确定。
按照我的理解,SVG 路径数据非常简单,如下所示:
(M,L,C)[point{n}] .... [Z]
然后重复 ad-nauseum
现在我试图理解的部分是这个新的 Inkscape 已经写出了看起来像相对坐标的东西,没有像 L 这样的命令,或者以某种方式隐含了 L。我的直觉告诉我这里发生的事情对某些人来说是显而易见的。为了它的值(value),我正在用 C 语言进行解析。
最佳答案
如果您正在解析 SVG,为什么不查看 SVG 规范?
Start a new sub-path at the given (x,y) coordinate. M (uppercase) indicates that absolute coordinates will follow; m (lowercase) indicates that relative coordinates will follow. If a moveto is followed by multiple pairs of coordinates, the subsequent pairs are treated as implicit lineto commands.
发件人:http://www.w3.org/TR/2011/REC-SVG11-20110816/paths.html#PathDataMovetoCommands
你说,
The way I understood it, SVG path data was very straight forward, something like this:
(M,L,C)[point{n}] .... [Z]
我不知道你从哪里得到这些信息。停止从该来源获取您的信息。
I will admit I have not read through the entire SVG standard spec...
没有人阅读整个规范。只需专注于您目前正在实现的部分。您也可以从 SVG Tiny 开始,暂时使用该子集。
路径语法 是编写解析器时应该开始的地方。如果你看不懂,那就买一本关于编译器的书。
路径语法:http://www.w3.org/TR/2011/REC-SVG11-20110816/paths.html#PathDataBNF
关于c - 了解解析 SVG 文件格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7515986/