示例#1
0
    void loadTileKML(TileInfo singleTile)
    {
        List <buildingInfo> buildingsOfATile = new List <buildingInfo>();

        //TileInfo singleTile = tileList[i];
        string tileColladaKmlPath   = "\\" + singleTile.href;
        int    lastFolderIndex      = singleTile.href.LastIndexOf('\\');
        string singleTilePathPrefix = singleTile.href.Substring(0, lastFolderIndex);
        //Debug.Log(singleTilePathPrefix);

        XmlDocument       xml = new XmlDocument();
        XmlReaderSettings set = new XmlReaderSettings();

        set.IgnoreComments = true;
        xml.Load(XmlReader.Create((Application.dataPath + "\\Resources" + tileColladaKmlPath), set));

        // 命名空间设置
        XmlNamespaceManager nsMgr = new XmlNamespaceManager(xml.NameTable);

        nsMgr.AddNamespace("ns", "http://www.opengis.net/kml/2.2");

        XmlNode     xdn       = xml.DocumentElement;
        XmlNodeList placeMark = xdn.SelectNodes("//ns:Placemark", nsMgr);
        //Debug.Log("placemark list length: " + placeMark.Count);
        int length = placeMark.Count;

        //foreach(XmlNode place in placeMark)
        for (int j = 1; j < length; j++)
        {
            // 每次循环读取tile中的某一个模型数据
            XmlNode place = placeMark[j];

            string name      = place.SelectSingleNode(".//ns:name", nsMgr).InnerText;
            double latitude  = double.Parse(place.SelectSingleNode(".//ns:latitude", nsMgr).InnerText);
            double longitude = double.Parse(place.SelectSingleNode(".//ns:longitude", nsMgr).InnerText);
            double heading   = double.Parse(place.SelectSingleNode(".//ns:heading", nsMgr).InnerText);
            string modelHref = singleTilePathPrefix + '/' + place.SelectSingleNode(".//ns:href", nsMgr).InnerText;
            double altitude  = double.Parse(place.SelectSingleNode(".//ns:altitude", nsMgr).InnerText);

            buildingInfo building = new buildingInfo(latitude, longitude, heading, name, modelHref, altitude);
            buildingsOfATile.Add(building);
        }

        // TODO: 每次循环就增加了一个tile信息,即可绘制该tile
        drawATile(buildingsOfATile);
        buildingList.Add(buildingsOfATile);
    }
示例#2
0
    void loadTileKML()
    {
        List <buildingInfo> buildingsOfATile = new List <buildingInfo>();

        XmlDocument       xml = new XmlDocument();
        XmlReaderSettings set = new XmlReaderSettings();

        set.IgnoreComments = true;
        xml.Load(XmlReader.Create((Application.dataPath + "/data/tile88.kml"), set));

        // 命名空间设置
        XmlNamespaceManager nsMgr = new XmlNamespaceManager(xml.NameTable);

        nsMgr.AddNamespace("ns", "http://www.opengis.net/kml/2.2");

        XmlNode xdn = xml.DocumentElement;

        //XmlNodeList placeMark = xml.GetElementsByTagName("kml:Placemark");
        XmlNodeList placeMark = xdn.SelectNodes("//ns:Placemark", nsMgr);

        Debug.Log("placemark list length: " + placeMark.Count);
        int length = placeMark.Count;

        //foreach(XmlNode place in placeMark)
        for (int i = 0; i < length; i++)
        {
            XmlNode place = placeMark[i];
            //Debug.Log(place.InnerXml);

            string name      = place.SelectSingleNode(".//ns:name", nsMgr).InnerText;
            double latitude  = double.Parse(place.SelectSingleNode(".//ns:latitude", nsMgr).InnerText);
            double longitude = double.Parse(place.SelectSingleNode(".//ns:longitude", nsMgr).InnerText);
            double heading   = double.Parse(place.SelectSingleNode(".//ns:heading", nsMgr).InnerText);
            string modelHref = place.SelectSingleNode(".//ns:href", nsMgr).InnerText;
            double altitude  = double.Parse(place.SelectSingleNode(".//ns:altitude", nsMgr).InnerText);
            Debug.Log(name);

            buildingInfo building = new buildingInfo(latitude, longitude, heading, name, modelHref, altitude);
            buildingsOfATile.Add(building);
        }

        buildingList.Add(buildingsOfATile);
    }