//======== // Обработать NODE //======== private static void OSM_ProcessNode(string xmlNode) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(xmlNode); long nodeId = Int64.Parse(xmlDoc.DocumentElement.Attributes["id"].Value); // ["id"] = [0] // Статистика // cntNodeTotal++; if (cntNodeTotal % sizeLogPeriod == 0) OSM_WriteLog(fileLog, String.Format("Processed Nodes: {0}", cntNodeTotal)); if (nodeId < minNode) minNode = nodeId; else if (nodeId > maxNode) maxNode = nodeId; // не обрабатывать дубликаты // if (useIndexedCheck) { byte nodeStatus = OSM_NodeIdxGet(nodeId); // nodeStatus == 0 (значит НЕ входит в состав WAY) // if (nodeStatus == 0) // не обрабатывать ненужные значения return; // nodeStatus > 1 (значит это дубликат) // else if (nodeStatus > 1) // не обрабатывать дубликаты { OSM_NodeIdxAdd(nodeId); return; } // nodeStatus == 1 (значит входит в состав WAY и ещё не был обработан) // OSM_NodeIdxAdd(nodeId); } // if (wayToNodeList.Exists(x => x.NodeId == nodeId)) // ускоряет это или нет? { foreach (WayToNodeItem wayToNodeItem in wayToNodeList) { if (wayToNodeItem.NodeId == nodeId) { wayToNodeItem.Lat = Double.Parse(xmlDoc.DocumentElement.Attributes["lat"].Value); // ["lat"] = [1] wayToNodeItem.Lon = Double.Parse(xmlDoc.DocumentElement.Attributes["lon"].Value); // ["lon"] = [2] // если node id встретилось в первый раз - вычислить атрибуты и записать // if (!nodeAttrList.Exists(x => x.NodeId == nodeId)) { // собрать все атарибуты NODE (если есть) // string nodeType = "No type"; string nodeName = "No name"; string nodeNameEn = nodeName; string nodeNameRu = nodeName; string nodeAttrs = "\"Attrs\":\"No\""; bool isAttrs = false; foreach (XmlNode nodeTag in xmlDoc.DocumentElement.ChildNodes) { if (nodeTag.Name == "tag") { if (isAttrs) nodeAttrs += ","; else nodeAttrs = String.Empty; isAttrs = true; nodeAttrs += String.Format("\"{0}\":\"{1}\"", nodeTag.Attributes["k"].Value, nodeTag.Attributes["v"].Value.Replace('\"', '\'')); if (nodeTag.Attributes["k"].Value == "name") nodeName = nodeTag.Attributes["v"].Value.Replace('\"', '\''); else if (nodeTag.Attributes["k"].Value == "name:en") nodeNameEn = nodeTag.Attributes["v"].Value.Replace('\"', '\''); else if (nodeTag.Attributes["k"].Value == "name:ru") nodeNameRu = nodeTag.Attributes["v"].Value.Replace('\"', '\''); } } if (isAttrs) { NodeAttrItem nodeAttrItem = new NodeAttrItem(); nodeAttrItem.NodeId = nodeId; nodeAttrItem.Lat = wayToNodeItem.Lat; nodeAttrItem.Lon = wayToNodeItem.Lon; nodeAttrItem.Type = nodeType; nodeAttrItem.Name = nodeName; nodeAttrItem.NameEn = nodeNameEn; nodeAttrItem.NameRu = nodeNameRu; nodeAttrItem.Attrs = nodeAttrs; nodeAttrList.Add(nodeAttrItem); cntNodeNpark++; } } } } } }
//======== // Обработать NODE //======== private static void OSM_ProcessNode(string xmlNode) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(xmlNode); long nodeId = Int64.Parse(xmlDoc.DocumentElement.Attributes["id"].Value); // ["id"] = [0] // Статистика // cntNodeTotal++; if (cntNodeTotal % sizeLogPeriod == 0) { OSM_WriteLog(fileLog, String.Format("Processed Nodes: {0}", cntNodeTotal)); } if (nodeId < minNode) { minNode = nodeId; } else if (nodeId > maxNode) { maxNode = nodeId; } // не обрабатывать дубликаты // if (useIndexedCheck) { byte nodeStatus = OSM_NodeIdxGet(nodeId); // nodeStatus == 0 (значит НЕ входит в состав WAY) // if (nodeStatus == 0) // не обрабатывать ненужные значения { return; } // nodeStatus > 1 (значит это дубликат) // else if (nodeStatus > 1) // не обрабатывать дубликаты { OSM_NodeIdxAdd(nodeId); return; } // nodeStatus == 1 (значит входит в состав WAY и ещё не был обработан) // OSM_NodeIdxAdd(nodeId); } // if (wayToNodeList.Exists(x => x.NodeId == nodeId)) // ускоряет это или нет? { foreach (WayToNodeItem wayToNodeItem in wayToNodeList) { if (wayToNodeItem.NodeId == nodeId) { wayToNodeItem.Lat = Double.Parse(xmlDoc.DocumentElement.Attributes["lat"].Value); // ["lat"] = [1] wayToNodeItem.Lon = Double.Parse(xmlDoc.DocumentElement.Attributes["lon"].Value); // ["lon"] = [2] // если node id встретилось в первый раз - вычислить атрибуты и записать // if (!nodeAttrList.Exists(x => x.NodeId == nodeId)) { // собрать все атарибуты NODE (если есть) // string nodeType = "No type"; string nodeName = "No name"; string nodeNameEn = nodeName; string nodeNameRu = nodeName; string nodeAttrs = "\"Attrs\":\"No\""; bool isAttrs = false; foreach (XmlNode nodeTag in xmlDoc.DocumentElement.ChildNodes) { if (nodeTag.Name == "tag") { if (isAttrs) { nodeAttrs += ","; } else { nodeAttrs = String.Empty; } isAttrs = true; nodeAttrs += String.Format("\"{0}\":\"{1}\"", nodeTag.Attributes["k"].Value, nodeTag.Attributes["v"].Value.Replace('\"', '\'')); if (nodeTag.Attributes["k"].Value == "name") { nodeName = nodeTag.Attributes["v"].Value.Replace('\"', '\''); } else if (nodeTag.Attributes["k"].Value == "name:en") { nodeNameEn = nodeTag.Attributes["v"].Value.Replace('\"', '\''); } else if (nodeTag.Attributes["k"].Value == "name:ru") { nodeNameRu = nodeTag.Attributes["v"].Value.Replace('\"', '\''); } } } if (isAttrs) { NodeAttrItem nodeAttrItem = new NodeAttrItem(); nodeAttrItem.NodeId = nodeId; nodeAttrItem.Lat = wayToNodeItem.Lat; nodeAttrItem.Lon = wayToNodeItem.Lon; nodeAttrItem.Type = nodeType; nodeAttrItem.Name = nodeName; nodeAttrItem.NameEn = nodeNameEn; nodeAttrItem.NameRu = nodeNameRu; nodeAttrItem.Attrs = nodeAttrs; nodeAttrList.Add(nodeAttrItem); cntNodebuildings++; } } } } } }