首页 > 解决方案 > 如何构建具有数千个节点的 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)));

                }
            }
        }
    }

标签: graphnodeslarge-dataedges

解决方案


推荐阅读