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); }
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); }