【发布时间】:2017-12-05 21:53:57
【问题描述】:
我在使用 JGraphT 中的 GraphMLImporter 时遇到问题,我完全被难住了。
作为序列化过程的一部分,我们将图形导出为 graphml 格式。效果很好;我们可以获取导出的文件并在 gephi 或任何其他图形解析程序中查看它而不会出现问题。当我们尝试将文件导入(反序列化)回图表时,就会出现问题。
当我们导出时,我们对象上的一个字段是几何。我们需要这个,所以我们将它导出为每个顶点的属性(每个顶点代表一个小区域,几何是相关区域)。当我们读回它时,由于某种原因,我们没有给我完整的字符串作为属性,而是只得到最后一个坐标和一些括号。哪个当然不是有效的几何图形,它会窒息。
作为参考,以下是我们将图表写入 graphml 时从导出器获得的内容:
<?xml version="1.0" encoding="UTF-8"?><graphml xmlns="http://graphml.graphdrawing.org/xmlns" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<key id="key0" for="node" attr.name="lat" attr.type="double"/>
<key id="key1" for="node" attr.name="lng" attr.type="double"/>
<key id="key2" for="node" attr.name="geometry" attr.type="string"/>
<key id="key3" for="edge" attr.name="travel_time" attr.type="double"/>
<graph edgedefault="directed">
<node id="1">
<data key="key0">0.5</data>
<data key="key1">0.5</data>
<data key="key2">"{"type":"Polygon","coordinates":[[[0.0,0.0],[0.0,1.0],[1.0,1.0],[1.0,0.0],[0.0,0.0]]]}"</data>
</node>
<node id="2">
<data key="key0">0.5</data>
<data key="key1">1.5</data>
<data key="key2">"{"type":"Polygon","coordinates":[[[0.0,1.0],[0.0,2.0],[1.0,2.0],[1.0,1.0],[0.0,1.0]]]}"</data>
</node>
<edge id="1" source="1" target="2">
<data key="key3">1.0</data>
</edge>
<edge id="2" source="2" target="1">
<data key="key3">1.0</data>
</edge>
</graph>
</graphml>
当我反序列化图形时,key0 和 key1 的属性(它们是纬度)正确出现,但 key2(我们的几何对象)的字符串返回如下:
,[0.0,0.0]]]}"
因此,我无法反序列化几何。
所以我的问题是,为什么会发生这种情况?这是 graphml 格式的限制吗,也许由于某种原因它不能包含 geojson 字符串?我不知道如何正确地 XML 吗?
任何帮助将不胜感激。
只是让人们知道,不过,我已经通过 Jgrapht 提供的使用 GraphML 导入器和导出器的演示,但它并没有关于此的任何信息。它只处理非常简单的对象,而不是这么复杂的东西。
【问题讨论】:
标签: java graph geojson jgrapht graphml