Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
07/21/12 23:49:56 (12 years ago)
Author:
spimming
Message:

#1894:

  • check if way has missing node references
  • check if attribute exists before using it
  • test program restructured
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning/3.3/Osm.Data/XmlDataSource.cs

    r8300 r8316  
    9191      using (XmlReader reader = XmlReader.Create(file.FullName, settings)) {
    9292        reader.ReadStartElement("osm");
    93         reader.ReadStartElement("bounds");
     93        //reader.ReadStartElement("bounds");
     94        reader.Read();
    9495        while (reader.LocalName.Equals("node")) {
    9596          Node node = new Node();
     
    119120          GetBaseAttributes(reader, way);
    120121          reader.Read();
     122          bool missingNodes = false;
    121123          while (reader.LocalName.Equals("nd") || reader.LocalName.Equals("tag")) {
    122124            if (reader.LocalName.Equals("nd")) {
    123125              long refNodeId = XmlConvert.ToInt64(reader.GetAttribute("ref"));
    124               way.Nodes.Add(GetNode(refNodeId));
     126              Node refNode = GetNode(refNodeId);
     127              if (refNode != null) {
     128                way.Nodes.Add(refNode);
     129              } else {
     130                missingNodes = true;
     131              }
    125132
    126133            } else if (reader.LocalName.Equals("tag")) {
     
    131138            reader.Read();
    132139          }
    133 
     140          if (missingNodes) {
     141            // TODO: Error/Trace output
     142            // if Way xxx has incomplete nodes. At least one node was missing in the data.
     143          }
    134144          ways.Add(way.Id, way);
    135145          InsertNodeWayRelation(way);
     
    181191        obj.UserId = XmlConvert.ToInt32(reader.GetAttribute("uid"));
    182192      }
    183       obj.Visible = XmlConvert.ToBoolean(reader.GetAttribute("visible"));
    184       obj.Version = XmlConvert.ToInt32(reader.GetAttribute("version"));
    185       obj.Changeset = XmlConvert.ToInt64(reader.GetAttribute("changeset"));
    186       obj.Timestamp = XmlConvert.ToDateTime(reader.GetAttribute("timestamp"), XmlDateTimeSerializationMode.Utc);
     193      if (reader.GetAttribute("visible") != null) {
     194        obj.Visible = XmlConvert.ToBoolean(reader.GetAttribute("visible"));
     195      }
     196      if (reader.GetAttribute("version") != null) {
     197        obj.Version = XmlConvert.ToInt32(reader.GetAttribute("version"));
     198      }
     199      if (reader.GetAttribute("changeset") != null) {
     200        obj.Changeset = XmlConvert.ToInt64(reader.GetAttribute("changeset"));
     201      }
     202      if (reader.GetAttribute("timestamp") != null) {
     203        obj.Timestamp = XmlConvert.ToDateTime(reader.GetAttribute("timestamp"), XmlDateTimeSerializationMode.Utc);
     204      }
    187205
    188206    }
Note: See TracChangeset for help on using the changeset viewer.