//======== // Обработать WAY //======== private static void OSM_ProcessWay(string xmlWay) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(xmlWay); long wayId = Int64.Parse(xmlDoc.DocumentElement.Attributes["id"].Value); // ["id"] = [0] // Статистика // cntWayTotal++; if (cntWayTotal % sizeLogPeriod == 0) OSM_WriteLog(fileLog, String.Format("Processed Ways: {0}", cntWayTotal)); if (wayId < minWay) minWay = wayId; else if (wayId > maxWay) maxWay = wayId; // не обрабатывать дубликаты (все встреченные) // //if (useIndexedCheck) //{ // if (OSM_WayIdxAdd(wayId) > 1) // дубликаты не обрабатывать // return; //} foreach (XmlNode wayTag in xmlDoc.DocumentElement.ChildNodes) { if (wayTag.Name == "tag" && wayTag.Attributes["k"].Value == "natural" && wayTag.Attributes["v"].Value == "desert") // ["k"] = [0], ["v"] = [1] { // не обрабатывать дубликаты (только для поисковых значений) // if (useIndexedCheck) { if(OSM_WayIdxAdd(wayId) > 1) return; } // добавить WAY // if (!wayToNodeList.Exists(x => x.WayId == wayId)) { bool isAttrs = false; WayAttrItem wayAttrItem = new WayAttrItem(); wayAttrItem.WayId = wayId; wayAttrItem.Type = wayTag.Attributes["v"].Value; // ["v"] = [1] wayAttrItem.Name = "No name"; wayAttrItem.NameEn = wayAttrItem.Name; wayAttrItem.NameRu = wayAttrItem.Name; wayAttrItem.Attrs = "\"Attrs\":\"No\""; foreach (XmlNode wayNd in xmlDoc.DocumentElement.ChildNodes) { if (wayNd.Name == "nd") { long nodeId = Int64.Parse(wayNd.Attributes["ref"].Value); // ["ref"] = [0] if (useIndexedCheck) OSM_NodeIdxSet(nodeId); WayToNodeItem wayToNodeItem = new WayToNodeItem(); wayToNodeItem.WayId = wayId; wayToNodeItem.NodeId = nodeId; wayToNodeList.Add(wayToNodeItem); } else if (wayNd.Name == "tag") // собрать все аттрибуты WAY { if (isAttrs) wayAttrItem.Attrs += ","; else wayAttrItem.Attrs = String.Empty; isAttrs = true; wayAttrItem.Attrs += String.Format("\"{0}\":\"{1}\"", wayNd.Attributes["k"].Value, wayNd.Attributes["v"].Value.Replace('\"', '\'')); if (wayNd.Attributes["k"].Value == "name") wayAttrItem.Name = wayNd.Attributes["v"].Value.Replace('\"', '\''); else if (wayNd.Attributes["k"].Value == "name:en") wayAttrItem.NameEn = wayNd.Attributes["v"].Value.Replace('\"', '\''); else if (wayNd.Attributes["k"].Value == "name:ru") wayAttrItem.NameRu = wayNd.Attributes["v"].Value.Replace('\"', '\''); } } if (isAttrs) wayAttrList.Add(wayAttrItem); cntWayNpark++; } } } }
//======== // Обработать WAY //======== private static void OSM_ProcessWay(string xmlWay) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(xmlWay); long wayId = Int64.Parse(xmlDoc.DocumentElement.Attributes["id"].Value); // ["id"] = [0] // Статистика // cntWayTotal++; if (cntWayTotal % sizeLogPeriod == 0) { OSM_WriteLog(fileLog, String.Format("Processed Ways: {0}", cntWayTotal)); } if (wayId < minWay) { minWay = wayId; } else if (wayId > maxWay) { maxWay = wayId; } // не обрабатывать дубликаты (все встреченные) // //if (useIndexedCheck) //{ // if (OSM_WayIdxAdd(wayId) > 1) // дубликаты не обрабатывать // return; //} foreach (XmlNode wayTag in xmlDoc.DocumentElement.ChildNodes) { if (wayTag.Name == "tag" && wayTag.Attributes["k"].Value == "building" && wayTag.Attributes["v"].Value == "house") // ["k"] = [0], ["v"] = [1] { { // не обрабатывать дубликаты (только для поисковых значений) // if (useIndexedCheck) { if (OSM_WayIdxAdd(wayId) > 1) { return; } } // добавить WAY // if (!wayToNodeList.Exists(x => x.WayId == wayId)) { bool isAttrs = false; WayAttrItem wayAttrItem = new WayAttrItem(); wayAttrItem.WayId = wayId; wayAttrItem.Type = wayTag.Attributes["v"].Value; // ["v"] = [1] wayAttrItem.Name = "No name"; wayAttrItem.NameEn = wayAttrItem.Name; wayAttrItem.NameRu = wayAttrItem.Name; wayAttrItem.Attrs = "\"Attrs\":\"No\""; foreach (XmlNode wayNd in xmlDoc.DocumentElement.ChildNodes) { if (wayNd.Name == "nd") { long nodeId = Int64.Parse(wayNd.Attributes["ref"].Value); // ["ref"] = [0] if (useIndexedCheck) { OSM_NodeIdxSet(nodeId); } WayToNodeItem wayToNodeItem = new WayToNodeItem(); wayToNodeItem.WayId = wayId; wayToNodeItem.NodeId = nodeId; wayToNodeList.Add(wayToNodeItem); } else if (wayNd.Name == "tag") // собрать все аттрибуты WAY { if (isAttrs) { wayAttrItem.Attrs += ","; } else { wayAttrItem.Attrs = String.Empty; } isAttrs = true; wayAttrItem.Attrs += String.Format("\"{0}\":\"{1}\"", wayNd.Attributes["k"].Value, wayNd.Attributes["v"].Value.Replace('\"', '\'')); if (wayNd.Attributes["k"].Value == "addr:housenumber") { wayAttrItem.Name = wayNd.Attributes["v"].Value.Replace('\"', '\''); } } } if (isAttrs) { wayAttrList.Add(wayAttrItem); } cntWaybuildings++; } } } } }