graph - 如何构建具有数千个节点的 Graph?
问题描述
我想知道从两个 geojson 文件创建一个图表。节点和边。如您所见,我可以在几秒钟内轻松创建具有数百个节点的图形。
问题是现在我正在读取一个包含数千个节点的 geojson 文件,这需要太多时间。我很容易阅读所有节点,但是当我必须在它们之间创建连接(边缘)时......这需要太多时间。您知道其他更快构建图表的方法吗?
这是代码......我想我使用了太多的循环。
NodesJson nodes;
nodes = objectMapper.readValue(new File("C://Users//marcg//OneDrive//Documentos//OSM//map_directory_big/nodes.geojson"), NodesJson.class);
for (Features_node finder : nodes.getFeatures()) {
nodesList.add(finder.getProperties().getNode_id());
coordinatesList.add(finder.getGeometry().getCoordinates());
}
EdgesJson edges;
edges = objectMapper.readValue(new File("C://Users//marcg//OneDrive//Documentos//OSM//map_directory_big/edges.geojson"), EdgesJson.class);
for (Features_edge finder : edges.getFeatures()) {
fromIdList.add(finder.getProperties().getFrom_id());
toIdList.add(finder.getProperties().getTo_id());
lenghtList.add(finder.getProperties().getLength());
}
List<Vertex> vertexList = new ArrayList<>();
for (int i = 0; i < nodesList.size(); i++) {
vertexList.add(new Vertex(i, coordinatesList.get(i), false, 0, 0));
}
//From here it takes as much as time I can't run all program
for (int i = 0; i < nodesList.size(); i++) {
for (int j = 0; j < fromIdList.size(); j++) {
for (int k = 0; k < nodesList.size(); k++) {
if (Precision.equals(nodesList.get(i), fromIdList.get(j)) == true && Precision.equals(nodesList.get(k), toIdList.get(j)) == true) {
vertexList.get(i).addNeighbour(new Edge(lenghtList.get(j) / 100, vertexList.get(i), vertexList.get(k)));
}
}
}
}
解决方案
推荐阅读
- shell - 更喜欢引用而不是转义以完成 ZSH
- apache-httpclient-4.x - 使用 Apache HttpCore 作为请求 URI 一部分的动态参数
- sharepoint-online - 如何在powerapps中将值从一种形式传递到另一种形式
- google-maps - 自定义应用程序 - Android Auto
- unit-testing - DbContextOptions UseInMemoryDatabase for .NET Core 2.2 版本
- amazon-s3 - 如何使用 ODBC 将 Athena 与 Power BI 连接
- php - 创建和处理表单后,如何设置 Symfony EntityType 表单字段的选项?
- python - 在 django 模型中将字段设置为主键
- javascript - 如何收集用户输入以在 reactjs 中检索数据?
- gnuplot - 如何在 Gnuplot 中添加水平线?