使用C# + httpWebRequest 解析WMTS服务元数据
解析http://219.142.81.86/igserver/ogc/kvp/TAS10R52000J49/WMTSServer服务的元数据
// 测试httpWebRequest读取 wmts元数据
string address = "http://219.142.81.86/igserver/ogc/kvp/TAS10R52000J49/WMTSServer";
var request = (HttpWebRequest)WebRequest.Create(address);
var response = (HttpWebResponse)request.GetResponse();
var stream = response.GetResponseStream();
if (stream == null) return;
var xmlReader = new XmlTextReader(stream);
var xmlDocument = new XmlDocument();
xmlDocument.Load(xmlReader);
string namespace_uri = xmlDocument.DocumentElement.NamespaceURI;
var nsmgr = new XmlNamespaceManager(xmlDocument.NameTable);
nsmgr.AddNamespace("wmts", namespace_uri);
XmlNode node = xmlDocument.SelectSingleNode("//wmts:Layer", nsmgr);
if (node == null) return;
string LowerCorner, UpperCorner;
// 得到layer节点的所有子节点
XmlNodeList xnl = node.ChildNodes;
double west = 0;
double east = 0;
double south = 0;
double north = 0;
foreach (XmlNode xn1 in xnl)
{
if (xn1.Name == "ows:BoundingBox" || xn1.Name == "ows:WGS84BoundingBox")
{
XmlElement xe = (XmlElement)xn1;
//得到crs属性
string crs = xe.GetAttribute("crs").ToString();
// 得到BoundBox节点的所有子节点
XmlNodeList xn10 = xn1.ChildNodes;
LowerCorner = xn10.Item(0).InnerText;
UpperCorner = xn10.Item(1).InnerText;
string[] cc = LowerCorner.Split(' ');
west = Convert.ToDouble(cc[0]);
south = Convert.ToDouble(cc[1]);
string[] uu = UpperCorner.Split(' ');
east = Convert.ToDouble(uu[0]);
north = Convert.ToDouble(uu[1]);
}
// 将节点转换为元素,便于得到节点的属性值
//XmlElement xe = (XmlElement)xn1;
// 得到Type和ISBN两个属性的属性值
//string type = xe.GetAttribute("ows:Type").ToString(); //<book Type="必修课" ISBN="7-111-19149-2">
}
XmlNodeList nodes = xmlDocument.SelectNodes("//wmts:TileMatrixSet", nsmgr);
if (nodes.Count <= 0) return;
Dictionary<int, _tileMatrix> tileMatrixSet = new Dictionary<int,_tileMatrix>();
int minLevel = 9999;
int maxLevel = -9999;
foreach (XmlNode xn1 in nodes)
{
if (xn1.ParentNode == null || xn1.ParentNode.Name != "Contents")
continue;
XmlNodeList xn11 = xn1.ChildNodes;
foreach (XmlNode xn110 in xn11)
{
if (xn110.Name == "TileMatrix")
{
XmlNodeList xn10 = xn110.ChildNodes;
string strlevel = xn10.Item(0).InnerText;
string[] temp = strlevel.Split(':');
int cn = temp.Count();
int level = 0;
if (cn == 1)
level = Convert.ToInt32(temp[0]);
else
level = Convert.ToInt32(temp[cn-1]);
double ScaleDenominator = Convert.ToDouble(xn10.Item(1).InnerText);
string[] TopLeftCorner = xn10.Item(2).InnerText.Split(' ');
double top = Convert.ToDouble(TopLeftCorner[0]);
double left = Convert.ToDouble(TopLeftCorner[1]);
int TileWidth = Convert.ToInt32(xn10.Item(3).InnerText);
int TileHeight = Convert.ToInt32(xn10.Item(4).InnerText);
int cols = Convert.ToInt32(xn10.Item(5).InnerText);
int rows = Convert.ToInt32(xn10.Item(6).InnerText);
_tileMatrix ts = new _tileMatrix();
ts.level = level;
ts.cornerTop = top;
ts.cornerLeft = level;
ts.tileWidth = TileWidth;
ts.tileHeight = TileHeight;
ts.tileCols = cols;
ts.tileRows = rows;
tileMatrixSet.Add(level, ts);
minLevel = Math.Min(minLevel, level);
maxLevel = Math.Max(maxLevel, level);
}
}
}
xmlReader.Close();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2015-09-04 MFC office2007风格设置左侧导航栏 [转]