LCOV - code coverage report
Current view: top level - src/netimport - NILoader.cpp (source / functions) Coverage Total Hit
Test: lcov.info Lines: 96.4 % 83 80
Test Date: 2024-12-21 15:45:41 Functions: 100.0 % 4 4

            Line data    Source code
       1              : /****************************************************************************/
       2              : // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
       3              : // Copyright (C) 2001-2024 German Aerospace Center (DLR) and others.
       4              : // This program and the accompanying materials are made available under the
       5              : // terms of the Eclipse Public License 2.0 which is available at
       6              : // https://www.eclipse.org/legal/epl-2.0/
       7              : // This Source Code may also be made available under the following Secondary
       8              : // Licenses when the conditions for such availability set forth in the Eclipse
       9              : // Public License 2.0 are satisfied: GNU General Public License, version 2
      10              : // or later which is available at
      11              : // https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
      12              : // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
      13              : /****************************************************************************/
      14              : /// @file    NILoader.cpp
      15              : /// @author  Daniel Krajzewicz
      16              : /// @author  Jakob Erdmann
      17              : /// @author  Sascha Krieg
      18              : /// @author  Michael Behrisch
      19              : /// @author  Robert Hilbrich
      20              : /// @date    Tue, 20 Nov 2001
      21              : ///
      22              : // Perfoms network import
      23              : /****************************************************************************/
      24              : #include <config.h>
      25              : 
      26              : #include <string>
      27              : #include <utils/common/UtilExceptions.h>
      28              : #include <utils/common/MsgHandler.h>
      29              : #include <utils/options/OptionsCont.h>
      30              : #include <utils/options/Option.h>
      31              : #include <utils/common/FileHelpers.h>
      32              : #include <utils/common/StringUtils.h>
      33              : #include <utils/common/ToString.h>
      34              : #include <utils/common/StringUtils.h>
      35              : #include <utils/geom/GeoConvHelper.h>
      36              : #include <netbuild/NBTypeCont.h>
      37              : #include <netbuild/NBNodeCont.h>
      38              : #include <netbuild/NBEdgeCont.h>
      39              : #include <netbuild/NBHeightMapper.h>
      40              : #include <netbuild/NBNetBuilder.h>
      41              : #include <netimport/NIXMLEdgesHandler.h>
      42              : #include <netimport/NIXMLNodesHandler.h>
      43              : #include <netimport/NIXMLTrafficLightsHandler.h>
      44              : #include <netimport/NIXMLTypesHandler.h>
      45              : #include <netimport/NIXMLPTHandler.h>
      46              : #include <netimport/NIXMLShapeHandler.h>
      47              : #include <netimport/NIXMLConnectionsHandler.h>
      48              : #include <netimport/NIImporter_DlrNavteq.h>
      49              : #include <netimport/NIImporter_VISUM.h>
      50              : #include <netimport/vissim/NIImporter_Vissim.h>
      51              : #include <netimport/NIImporter_ArcView.h>
      52              : #include <netimport/NIImporter_SUMO.h>
      53              : #include <netimport/NIImporter_OpenStreetMap.h>
      54              : #include <netimport/NIImporter_OpenDrive.h>
      55              : #include <netimport/NIImporter_MATSim.h>
      56              : #include <netimport/NIImporter_ITSUMO.h>
      57              : #include <netimport/typemap.h>
      58              : #include "NILoader.h"
      59              : #include "NITypeLoader.h"
      60              : 
      61              : // ===========================================================================
      62              : // method definitions
      63              : // ===========================================================================
      64         1892 : NILoader::NILoader(NBNetBuilder& nb)
      65         1892 :     : myNetBuilder(nb) {}
      66              : 
      67         1892 : NILoader::~NILoader() {}
      68              : 
      69              : void
      70         1892 : NILoader::load(OptionsCont& oc) {
      71              :     bool ok = true;
      72              :     // load types first
      73         1892 :     NIXMLTypesHandler handler(myNetBuilder.getTypeCont());
      74         3784 :     if (!oc.isSet("type-files")) {
      75              :         std::vector<std::string> files;
      76         3322 :         if (oc.isSet("osm-files")) {
      77            0 :             files.push_back(osmTypemap);
      78              :         }
      79         3322 :         if (oc.isSet("opendrive-files")) {
      80            0 :             files.push_back(opendriveTypemap);
      81              :         }
      82         1661 :         ok &= NITypeLoader::load(handler, files, "types", true);
      83         1661 :     } else {
      84          462 :         ok &= NITypeLoader::load(handler, oc.getStringVector("type-files"), "types");
      85              :     }
      86              :     // try to load height data so it is ready for use by other importers
      87         1892 :     NBHeightMapper::loadIfSet(oc);
      88              :     // try to load using different methods
      89         1892 :     NIImporter_SUMO::loadNetwork(oc, myNetBuilder);
      90         1892 :     NIImporter_OpenStreetMap::loadNetwork(oc, myNetBuilder);
      91         1892 :     NIImporter_VISUM::loadNetwork(oc, myNetBuilder);
      92         1892 :     NIImporter_ArcView::loadNetwork(oc, myNetBuilder);
      93         1892 :     NIImporter_Vissim::loadNetwork(oc, myNetBuilder);
      94         1892 :     NIImporter_DlrNavteq::loadNetwork(oc, myNetBuilder);
      95         1892 :     NIImporter_OpenDrive::loadNetwork(oc, myNetBuilder);
      96         1892 :     NIImporter_MATSim::loadNetwork(oc, myNetBuilder);
      97         1892 :     NIImporter_ITSUMO::loadNetwork(oc, myNetBuilder);
      98         3777 :     if (oc.getBool("tls.discard-loaded") || oc.getBool("tls.discard-simple")) {
      99          159 :         myNetBuilder.getNodeCont().discardTrafficLights(myNetBuilder.getTLLogicCont(), oc.getBool("tls.discard-simple"),
     100           53 :                 oc.getBool("tls.guess-signals"));
     101           53 :         int removed = myNetBuilder.getTLLogicCont().getNumExtracted();
     102           53 :         if (removed > 0) {
     103           90 :             WRITE_MESSAGEF(TL(" Removed % traffic lights before loading plain-XML"), toString(removed));
     104              :         }
     105              :     }
     106         3784 :     if (oc.getBool("railway.signals.discard")) {
     107            1 :         myNetBuilder.getNodeCont().discardRailSignals();
     108              :     }
     109         1892 :     ok &= loadXML(oc);
     110              :     // check the loaded structures
     111         1892 :     if (myNetBuilder.getNodeCont().size() == 0) {
     112          152 :         throw ProcessError(TL("No nodes loaded."));
     113              :     }
     114         1816 :     if (myNetBuilder.getEdgeCont().size() == 0) {
     115           42 :         throw ProcessError(TL("No edges loaded."));
     116              :     }
     117         1795 :     if (!myNetBuilder.getEdgeCont().checkConsistency(myNetBuilder.getNodeCont())) {
     118            1 :         throw ProcessError();
     119              :     }
     120         1853 :     if (!ok && !oc.getBool("ignore-errors")) {
     121           55 :         throw ProcessError();
     122              :     }
     123              :     // configure default values that depend on other values
     124         1739 :     myNetBuilder.getNodeCont().applyConditionalDefaults();
     125              :     // report loaded structures
     126         1739 :     WRITE_MESSAGE(TL(" Import done:"));
     127         1739 :     if (myNetBuilder.getDistrictCont().size() > 0) {
     128            4 :         WRITE_MESSAGEF(TL("   % districts loaded."), toString(myNetBuilder.getDistrictCont().size()));
     129              :     }
     130         3478 :     WRITE_MESSAGEF(TL("   % nodes loaded."), toString(myNetBuilder.getNodeCont().size()));
     131         1739 :     if (myNetBuilder.getTypeCont().size() > 0) {
     132          560 :         WRITE_MESSAGEF(TL("   % types loaded."), toString(myNetBuilder.getTypeCont().size()));
     133              :     }
     134         3478 :     WRITE_MESSAGEF(TL("   % edges loaded."), toString(myNetBuilder.getEdgeCont().size()));
     135         1739 :     if (myNetBuilder.getEdgeCont().getNumEdgeSplits() > 0) {
     136          180 :         WRITE_MESSAGEF(TL("The split of edges was performed % times."), toString(myNetBuilder.getEdgeCont().getNumEdgeSplits()));
     137              :     }
     138              : 
     139              :     //TODO: uncomment the following lines + adapt tests! [Gregor March '17]
     140              : //  if (myNetBuilder.getPTStopCont().size() > 0) {
     141              : //    WRITE_MESSAGEF(TL("   % pt stops loaded."), toString(myNetBuilder.getPTStopCont().size()));
     142              : //  }
     143         1739 :     if (GeoConvHelper::getProcessing().usingGeoProjection()) {
     144          681 :         WRITE_MESSAGEF(TL("Proj projection parameters used: '%'."), GeoConvHelper::getProcessing().getProjString());
     145              :     }
     146         1892 : }
     147              : 
     148              : /* -------------------------------------------------------------------------
     149              :  * file loading methods
     150              :  * ----------------------------------------------------------------------- */
     151              : bool
     152         1892 : NILoader::loadXML(OptionsCont& oc) {
     153              :     // load nodes
     154              :     NIXMLNodesHandler nodesHandler(myNetBuilder.getNodeCont(), myNetBuilder.getEdgeCont(),
     155         1892 :                                    myNetBuilder.getTLLogicCont(), oc);
     156         3784 :     bool ok = NITypeLoader::load(nodesHandler, oc.getStringVector("node-files"), "nodes");
     157              :     // load the edges
     158         1892 :     if (ok) {
     159              :         NIXMLEdgesHandler edgesHandler(myNetBuilder.getNodeCont(), myNetBuilder.getEdgeCont(),
     160              :                                        myNetBuilder.getTypeCont(), myNetBuilder.getDistrictCont(),
     161         1890 :                                        myNetBuilder.getTLLogicCont(), oc);
     162         3780 :         ok = NITypeLoader::load(edgesHandler, oc.getStringVector("edge-files"), "edges");
     163         1890 :     }
     164         1892 :     if (!deprecatedVehicleClassesSeen.empty()) {
     165            0 :         WRITE_WARNINGF(TL("Deprecated vehicle class(es) '%' in input edge files."), toString(deprecatedVehicleClassesSeen));
     166              :     }
     167              :     // load the connections
     168         1892 :     if (ok) {
     169              :         NIXMLConnectionsHandler connectionsHandler(myNetBuilder.getEdgeCont(),
     170         1837 :                 myNetBuilder.getNodeCont(), myNetBuilder.getTLLogicCont());
     171         3674 :         ok = NITypeLoader::load(connectionsHandler, oc.getStringVector("connection-files"), "connections");
     172         1837 :     }
     173              :     // load traffic lights (needs to come last, references loaded edges and connections)
     174         1837 :     if (ok) {
     175         1834 :         NIXMLTrafficLightsHandler tlHandler(myNetBuilder.getTLLogicCont(), myNetBuilder.getEdgeCont());
     176         3668 :         ok = NITypeLoader::load(tlHandler, oc.getStringVector("tllogic-files"), "traffic lights");
     177         1834 :     }
     178              : 
     179              :     // load public transport stops (used for restricting edge removal and as input when repairing railroad topology)
     180         3781 :     if (ok && oc.exists("ptstop-files")) {
     181              :         NIXMLPTHandler ptHandler(myNetBuilder.getEdgeCont(),
     182         1832 :                                  myNetBuilder.getPTStopCont(), myNetBuilder.getPTLineCont());
     183         3664 :         ok = NITypeLoader::load(ptHandler, oc.getStringVector("ptstop-files"), "public transport stops");
     184         1832 :     }
     185              : 
     186              :     // load public transport lines (used as input when repairing railroad topology)
     187         3724 :     if (ok && oc.exists("ptline-files")) {
     188              :         NIXMLPTHandler ptHandler(myNetBuilder.getEdgeCont(),
     189         1832 :                                  myNetBuilder.getPTStopCont(), myNetBuilder.getPTLineCont());
     190         3664 :         ok = NITypeLoader::load(ptHandler, oc.getStringVector("ptline-files"), "public transport lines");
     191         1832 :     }
     192              : 
     193              :     // load shapes for output formats that embed shape data
     194         3724 :     if (ok && oc.exists("polygon-files")) {
     195         1832 :         NIXMLShapeHandler shapeHandler(myNetBuilder.getShapeCont(), myNetBuilder.getEdgeCont());
     196         3664 :         ok = NITypeLoader::load(shapeHandler, oc.getStringVector("polygon-files"), "polygon data");
     197              :     }
     198         1892 :     return ok;
     199         1892 : }
     200              : 
     201              : 
     202              : /****************************************************************************/
        

Generated by: LCOV version 2.0-1