博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用C# + httpWebRequest 解析WMTS服务元数据
阅读量:6972 次
发布时间:2019-06-27

本文共 3072 字,大约阅读时间需要 10 分钟。

解析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();

转载地址:http://heasl.baihongyu.com/

你可能感兴趣的文章
a前缀
查看>>
LeetCode第七天
查看>>
ORACLE存储过程 练习系列三 失效或者生效指定表的外键
查看>>
Android环境搭建(Windows)
查看>>
django 项目创建使用
查看>>
接口数据加密
查看>>
DevExpress之TreeList节点绑定图片
查看>>
OC分类(Category)
查看>>
BZOJ1206虚拟内存[hash]
查看>>
Docker Data Center系列(五)- 使用自定义的TLS安全认证
查看>>
julia生成指定格式的字符串.jl
查看>>
转:ActivityGroup + GridView 实现Tab分页标签
查看>>
作业5
查看>>
查缺补漏
查看>>
git 多人协作
查看>>
使用node 创建一个新项目
查看>>
主机名/etc/hosts文件的作用
查看>>
How to Setup MySQL (Master-Slave) Replication in CentOS
查看>>
TortoiseGit连接github.com
查看>>
java基础( 九)-----深入分析Java的序列化与反序列化
查看>>