使用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();
使用C# + httpWebRequest 解析WMTS服务元数据的更多相关文章
- WMTS服务解析
WMTS服务解析 1.基本思路 拼接地址,请求xml文件 ↓ 处理获取的xml文件,返回参数 ↓ 获取xml解析得到的参数,组织结构 2.对应函数 requestWMTS (olUrl) ↓ hand ...
- 使用C++/libCurl/Jsoncpp读取arcgis wmts 服务(restful模式)
前言: 最近工作需要将arcgis的wmts服务接入我们的3DGis系统平台,要求用户只输入一个rest模式的wmts服务地址,系统即可自动获取并解析其元数据信息,生成wmts图层,并渲染显示.经过多 ...
- WCF分布式开发步步为赢(3)WCF服务元数据交换、配置及编程开发
今天我们继续WCF分布式开发步步为赢(3)WCF服务元数据交换.配置及编程开发的学习.经过前面两节的学习,我们了解WCF分布式开发的相关的基本的概念和自定义宿主托管服务的完整的开发和配置过程.今天我们 ...
- WCF之服务元数据
服务元数据是用来获得服务的EndPoint的信息,也就是它的ABC. 服务有两种方案可以发布自己的元数据. 一种是基于HTTP-GET协议提供元数据: 一种是元数据交换方式,它往往使用一个专门的终结点 ...
- ajax调用handler,使用HttpWebRequest访问WCF服务
引言 随着手机及移动设备的普及,移动端的应用也进入了热潮.以前PC端的门户网站,大多也均推出了适配移动设备的网站或者APP,再差的也注册了个公众号.在移动应用开发中,目前据我所了解到的解决方案有:1. ...
- Netty 4源码解析:服务端启动
Netty 4源码解析:服务端启动 1.基础知识 1.1 Netty 4示例 因为Netty 5还处于测试版,所以选择了目前比较稳定的Netty 4作为学习对象.而且5.0的变化也不像4.0这么大,好 ...
- 超图不支持JPEG格式的WMTS服务
就目前面而言,超图不支持JPEG格式的WMTS服务,只支持PNG格式的. <本篇完>
- 如何在Skyline中加载ArcGISServer发布的WMS和WMTS服务
如何在Skyline中加载ArcGISServer发布的WMS和WMTS服务? 我这里的测试环境是ArcGISServer10.1和TerraExplorer Pro7.0,主要过程截图如下,
- (二十)ArcGIS JS 加载WMTS服务(超图示例)
前言 在前一篇中说到我们可以通过加载WMS服务解决用ArcGIS API加载超图发布的服务,但是WMS服务在加载效率上是低于切片服务的,加上超图的IServer,无力吐槽,所以,在加载速度的要求下,切 ...
随机推荐
- 【Java】数组的打印输出
import java.util.Arrays; public class Test { public static void main(String[] args) { int[] a = { 1, ...
- ref:【干货分享】PHP漏洞挖掘——进阶篇
ref:http://blog.nsfocus.net/php-vulnerability-mining/ [干货分享]PHP漏洞挖掘——进阶篇 王陶然 从常见的PHP风险点告诉你如何进行PH ...
- 【记录】Mysql 5.7 解压版的安装
1.解压 2.打开my_default.ini 将basedir修改为MySQL的解压目录 将datadir修改为MySQL的解压目录\data 3.更改环境变量 系统变量里面添加MYSQL_HOME ...
- 最短路——spfa
适用范围:给定的图存在负权边,这时类似Dijkstra等算法便没有了用武之地,而Bellman-Ford算法的复杂度又过高,SPFA算法便派上用场了. 我们约定有向加权图G不存在负权回路,即最短路径一 ...
- 通过因特网连接Beaglebone Black
通过因特网连接Beaglebone Black 通过网络连接,可以使你方便地从各种地方以及各种不同的电脑访问到Beaglebone Black.这种连接Beaglebone Black方式通常使用5V ...
- Python中的模块(2)
1.内置模块2.扩展的 例如:django3.自定义的 文件import demodef read(): print('my read func')demo.read()print(demo.mone ...
- FastReport.Net使用:[9]多栏报表(多列报表)
方法一:使用页的列属性(Page Columns) 1.绘制报表标题 2.设置页的列数量为3,其他默认不变.报表设计界面便如下呈现. 3.报表拷贝前面[分组]报表的内容. 4.就这么简单,一张多栏报表 ...
- 在Ubuntu下编译hadoop2.5.x
在Ubuntu下编译hadoop2.5.x 参考博客:http://www.aboutyun.com/thread-8130-1-1.html 1 下载hadoop源码: (1) http://www ...
- [置顶] getopt_long函数基本用法-linux
一.感性认识: [c-sharp] view plain copy #include <stdio.h> #include <getopt.h> char * l_opt ...
- 王者参考jar包