ArcGIS for WPF 访问外部资源【进阶之构造URL】

原文 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(2, level);
 int offsetY = offsetX - 1;
 int numX = col - offsetX;
 int numY = -row + offsetY;

 string xstr = numX < 0 ? "M" + (-numX) : numX.ToString();
 string ystr = numY < 0 ? "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还是不够的,【空间参考】—— 坐标系、比例尺、分辨率这些也直接关系着地图能否正常显示。

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

 

【其他】

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

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

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

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

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

时间: 2024-09-09 19:03:28

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

ArcGIS for WPF 访问外部资源

原文 http://www.cnblogs.com/wdysunflower/archive/2011/07/14/2105584.html ArcGIS for WPF 访问外部资源 应用背景: 因项目需要尝试了解了ArcGIS.Bing Map.Google Map等开发技术,最终是使用ArcGIS写了个Demo. ArcGIS现提供了一套控件库ArcGIS  API  for WPF供Silverlight开发使用,其中也包括WPF可以使用的控件. 对比Sample Demo以及自己动手实

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

随着云服务的广泛应用,单点登录技术(SSO)最近倍受青睐,它也可以帮助IT在VDI部署过程中更好地平衡安全性与用户体验. 单点登录(SSO)有多种方式,简单来讲,SSO是一个允许用户使用单一登录访问多个资源的认证过程.使用云应用的VDI用户可能需要某种方式的认证访问桌面外部的应用.SSO只需要用户单次输入认证信息就可以访问虚拟桌面以及外部资源,降低了最终用户的安全负担. 反对使用单点登录技术的争论之一是其削弱了安全性.如果用户账号被盗用,那么入侵者同样可以访问与账号关联的资源. 活动目录之外的访

JQuery Ajax通过Handler访问外部XML数据的代码_jquery

JQuery的使用非常简单,我们只需要从其官方网站上下载一个脚本文件并引用到页面上即可,然后你就可以在你的脚本代码中任意使用JQuery提供的对象和功能了. 在JQuery中使用Ajax方法异步获取服务器资源非常简单,读者可以参考其官方网站上提供的例子http://api.jquery.com/category/ajax/.当然,作为客户端脚本,JQuery也会遇到跨域访问资源的问题,什么是跨域访问呢?简单来说就是脚本所要访问的资源属于网站外部的资源,脚本所在的位置和资源所在的位置不在同一区域.

【IOS】解决XCODE项目出现MY MAC 64-BIT/设置允许用户外部资源同步到APP/解决CODESIGN ERROR: CERTIFICATE IDENTITY ‘IPHONE DISTRIBUTION***APPEARS MORE THAN ONCE IN THE KEYCHAIN .

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2d/621.html 本章节Himi为大家总结几点经常用到的功能或者经常出现的问题以及解决方法: 本章节主要介绍3个知识点: 1. 解决Xcode中选择设备运行项目时,设备一栏现实"My mac 64-bit"问题: 2.设置允许用户利用itunes同步一些资源到我们的App中: 3.解决CodeSign

WPF学习之资源-Resources

WPF通过资源来保存一些可以被重复利用的样式,对象定义以及一些传统的资源如二进制数据,图片等等,而在其支持上也更能体现出这些资源定义的优越性.比如通过ResourceDictionary的支持就可以通过资源来实现换肤功能,在ExpressionBlend中设计的酷炫造型也可以通过导出成资源来很容易的被程序员所引用,本地化的实现,访问另外程序集的嵌入式资源等等.这些都给我们提供了丰富的手段通过资源访问架构来构建丰富的富媒体应用程序.本文简单讲解了WPF Resources的分类及其常见用法,并简单

使用VBS访问外部文本文件一些方法和脚本实例代码_vbs

处理文件用到的常量有:ForReading = 1 ,ForWriting=2,ForAppending=8,用于的操作分别是读/写和追加,都要在使用之前用VBS Const来声明.常用于处理文本文件的方法有:Read(var)-读var个字符,ReadLine-读一行,ReadAll-读整个文件内容,SkipLine-跳过本行指向下一行,Write(var)-把字符串var写入文件,WriteLine(var)-把字符串var和换行符写入文件,WriteBlankLines(n)-写入n个换行

Applet数字签名,授予访问本地资源

访问 本文章介绍Applet数字签名,授予访问本地资源的方法.步骤一:将Applet Class打成Jar包 如:在命令行中执行以下的语句: jar -cvf MyApplet.jar class 步骤二:(在网页中嵌入Applet)(如何在Html嵌入Apple方法见附录) 下面是嵌入Applet部分的写法: <APPLETCODEBASE = "."CODE = "jcomponent.FileReaderApplet.class"ARCHIVE =&qu

java.net.URL如何通过proxy访问internet资源

对于在局域网内发布的java应用程序,由于其没有直接连接在internet上,所以不能直接用java.net.URL访问网上资源.在这种情况下,需要为java.net.URL指定代理服务器,指定方法如下所示: import java.util.Properties; import java.net.*; import java.io.*; public class TestHttpProxy { public static void main(String[] args) { String sU

无线网卡不能访问内部资源

  电脑是通过无线网卡与局域网连接,但在新添加网卡和无线AP后,无线AP连接到内部的交换机,通过ADSL上网,无线网卡和无线AP在笔记本电脑上设置和调试通过,能用ADSL上网,但不能访问公司内部的资源. 停用电脑中原来的网卡,插入无线网卡,也安装了驱动程序.结果也是可以上网不能访问内部网络.在访问网络资源的时候,错误提示"网络不存在或尚未启动". 这种情况,导致无法访问内容资源的原因可能是文件和打印机共享设置的问题.在无线网络属性的"常规"选项卡中,将"M