Пример #1
0
        //========
        // Обработать 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++;
                            }
                        }
                    }
                }
            }
        }
Пример #2
0
        //========
        // Обработать 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++;
                            }
                        }
                    }
                }
            }
        }