原文 http://www.cnblogs.com/wdysunflower/archive/2013/05/29/3039645.html

呵呵~好久没逛园子,没写博客了。

最近刚好又在弄GIS这块,有些收获跟大家分享一下,有些问题也希望能得到“知情人”的解答。

首先需要指出的是,“访问外部资源”实现的方式,在我之前的文章里已经写的比较清楚了:

ArcGIS for WPF 访问外部资源

【主题】

探索构造可用URL的方法及思路 。

(仅供大家研究、学习、分析使用)

【正文】

在 public override string GetTileUrl(int level, int row, int col)方法中,我们需要传出对应的一个url。

先来看看目前大家常用的一些地图,通过HttpWatch来抓取url,分析其瓦片存储分布规律,组合我们需要的url。

string url = string.Format(UrlFormat, _random.Next(ServerBeginNum, ServerEndNum), level, row, col);

其中能找出url规律的:

Google地图:

网址:http://ditu.google.cn/

抓取到的数据:

在一篇资料上看到,其中mt(0~3)表示的是服务器,通过这种方式来分解服务器压力。

至于其他参数,除了hl=zh-CN&gl=CN大致能猜测跟语言和区域有关外,其他的就清楚了,尤其好奇末尾的“s=”是起什么作用的?

UrlFormat = "http://mt{0}.google.cn/vt/lyrs=m@213000000&hl=zh-CN&gl=CN&src=app&x={3}&y={2}&z={1}&s=";

百度地图:

网址:http://map.baidu.com/

抓取到的数据:

根据googleMap的规律猜测,q(1~8)即为不同的服务器。

对于其中的fm=44,也不甚理解?

UrlFormat = "http://q{0}.baidu.com/it/u=x={3};y={2};z={1};v=015;type=web&fm=44",

百度的行列坐标(中心为原点、常规的数学坐标系)与ArcGis、Google(左上角为原点、类似显示器分辨率分布)还有所不同,折腾了一下午。

其中负数部分用M作为前缀。

 int zoom = level + MapData.LevelOffset;
int offsetX = (int)Math.Pow(, level);
int offsetY = offsetX - ;
int numX = col - offsetX;
int numY = -row + offsetY; string xstr = numX < ? "M" + (-numX) : numX.ToString();
string ystr = numY < ? "M" + (-numY) : numY.ToString();

使用其中的zoom、xstr、ystr构造url。

 天地图

网址:http://www.tianditu.cn

抓取到的数据:

同样t(0~7)应该也是代表服务器,它的url就更长了,部分参数更难以猜测其含义了。

不难发现它区分了“vec”和“cva”,而且都是成对出现的。

经过验证,原来一个链接的是地图图形本身,一个链接的是地图上显示的文字。

UrlFormat = "http://t{0}.tianditu.cn/vec_c/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=vec&STYLE=default&TILEMATRIXSET=c&TILEMATRIX={1}&TILEROW={2}&TILECOL={3}&FORMAT=tiles";

UrlFormat = "http://t{0}.tianditu.cn/cva_c/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cva&STYLE=default&TILEMATRIXSET=c&TILEMATRIX={1}&TILEROW={2}&TILECOL={3}&FORMAT=tiles";

难以找出规律,按目录结构获取瓦片图片的:

搜狗地图:

网址:http://map.sogou.com/

抓取到的数据:

SOSO地图:

网址:http://map.soso.com/

抓取到的数据:

Bing地图:

网址:http://cn.bing.com/ditu/

抓取到的数据:

目前对于难以找出规律的这部分,个人也还没找到解决办法,看上去也不怎么好弄。

期待高人发表见解。

至于其它地图,但凡符合规律的差不多按类似的方法都能正确显示出数据。

当然,光有url还是不够的,【空间参考】—— 坐标系、比例尺、分辨率这些也直接关系着地图能否正常显示。

不过目前我自己对这些概念也还是一知半解,以后有了心得再跟大家分享。

【其他】

在探索这些过程中,也发现了一些之前没接触过的地图:比如【高德地图】,很多地方也都有用到。

还有一个【中原地图】,貌似是只显示的香港地区。

奇摩地图】,应该是雅虎地图的台湾版本。

新浪地图】,一直没有图像显示,不知道为什么。

还有一些校园地图,比如【复旦大学】【清华大学】【重庆大学】【华中科技大学】【国立台湾大学

ArcGIS for WPF 访问外部资源【进阶之构造URL】的更多相关文章

  1. ArcGIS for WPF 访问外部资源

    原文 http://www.cnblogs.com/wdysunflower/archive/2011/07/14/2105584.html ArcGIS for WPF 访问外部资源 应用背景: 因 ...

  2. springmvc:BeanNameViewResolver访问内部资源视图对象和访问外部资源视图对象

    <!-- 处理器映射器 --> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerM ...

  3. WPF 访问外部的xaml文件

    原文:WPF 访问外部的xaml文件 今天做主题时,需要访问外部的xaml文件,方法: using (FileStream s = new FileStream("C:\\Control.x ...

  4. WPF Demo9外部资源文件

    <Window x:Class="Demos.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/ ...

  5. 密码太多记不住?SSO帮你轻松访问VDI及外部资源

    单点登录(SSO)有多种方式,简单来讲,SSO是一个允许用户使用单一登录访问多个资源的认证过程.使用云应用的VDI用户可能需要某种方式的认证访问桌面外部的应用.SSO只需要用户单次输入认证信息就可以访 ...

  6. kubernetes之Endpoint引入外部资源实践;

    1. 什么是Endpoint? 我们创建Service的时候会自动给我们创建一个同名的Endpoint资源,每一个同名的 Servie都有一个Endpoints资源,因为Service自己并不直接匹配 ...

  7. docker网络-如何让外部网络访问容器资源

    docker网络-如何让外部网络访问容器资源 安装httpd 服务: docker:/root# docker exec -it f63b2633d146 bash bash-4.1# yum ins ...

  8. 给tomcat配置外部资源路径(应用场景:web项目访问图片视频等资源)

    对于一个web项目来说,除了文字之外,图片,视频等媒体元素也是其重要的组成部分.我们知道,web项目中如果用到大量的图片.视屏的资源,我们 通常的做法是只在数据库中存储图片.视频等资源的路径,web项 ...

  9. WPF 访问资源中的Storyboard

    原文:WPF 访问资源中的Storyboard <UserControl.Resources> <Storyboard x:Key="testStoryboard" ...

随机推荐

  1. ADO.Net对Oracle数据库的操作【转载】

    一 ADO.Net简介 访问数据库的技术有许多,常见的有一下几种:开放数据库互联(ODBC).数据访问对象(DAO).远程数据对象 (RDO). ActiveX数据对象(ADO).我们今天主要要学习A ...

  2. ANDROID使用MULTIPARTENTITYBUILDER实现类似FORM表单提交方式的文件上传

    最近在做 Android 端文件上传,要求采用 form 表单的方式提交,项目使用的 afinal 框架有文件上传功能,但是始终无法与php写的服务端对接上,无法上传成功.读源码发现:afinal 使 ...

  3. 【转】Gedit中文乱码

    原文网址:http://wiki.ubuntu.org.cn/Gedit%E4%B8%AD%E6%96%87%E4%B9%B1%E7%A0%81#.E5.91.BD.E4.BB.A4.E6.96.B9 ...

  4. What’s the difference between an interface and an abstract class in Java?

    原文 What’s the difference between an interface and an abstract class in Java? It’s best to start answ ...

  5. Horner规则

    霍纳(Horner)规则是采用最少的乘法运算策略,求多项式 A(x) = a[n]x^n + a[n-1]x^(n-1) + ... + a[1]x^1 + a[0]x^0 在x处的值. 该规则为 A ...

  6. 【POJ2739】Sum of Consecutive Prime Numbers

    简单的素数打表,然后枚举.开始没注意n读到0结束,TLE了回..下次再认真点.A过后讨论里面有个暴力打表过的,给跪了! #include <iostream> #include <c ...

  7. SPRING+JNDI+C3P0 in tomcat6

    Tomcat 中Jndi是使用Tomcat自带的连接池,由于客户要求,抛弃Tomcat自带的连接池.使用c3p0 .经过几个小时调试,解决方案如下: 环境:Tomcat 6 下面来看Jndi 与 c3 ...

  8. redis实现spring-data-redis整合

    java之redis篇(spring-data-redis整合)  博客链接网址:http://www.cnblogs.com/yjmyzz/tag/redis/ redis的知识:官网 1,利用sp ...

  9. C++: int和string相互转换

    假设在一个C++的程序中常常会用到int和string之间的互换.个人建议能够写成一个函数,下次用的时候直接调用就可以. #include <iostream> #include < ...

  10. vs2013中国集

    在TOOLS的菜单条下的最后一项.进去后在输入框输入Language.按Enter.选择语言,然后确定就可以. 如图 假设没有点击下拉框底下的链接 就会调挑转到语言包下载界面 下载须要的语言就可以, ...