(转)深入理解最强桌面地图控件GMAP.NET ---搜狗(sougou地图)_weixin_34185320的博客-程序员宅基地

这应该是我集成国内地图的最后一篇了,以后如果有精力会继续分析Google地图,Bing地图,Yahoo地图,Ovi地图。

同时,会尽快将离线地图的使用以及数据存储部分分享出来。

前面的相关文章链接:

深入理解最强桌面地图控件GMAP.NET --- 原理篇

深入理解最强桌面地图控件GMAP.NET --- SOSO地图

深入理解最强桌面地图控件GMAP.NET --- 百度地图

深入理解最强桌面地图控件GMAP.NET --- 初用

深入理解最强桌面地图控件GMAP.NET --- 初识

 

如何在你的程序中使用GMAP.NET 搜狗地图

要使用以下代码,建议看看初用篇,具体代码如下所示。

复制代码
this.MainMap.Position = new PointLatLng(double.Parse(ConfigurationManager.AppSettings["defaultLat"]),double.Parse(ConfigurationManager.AppSettings["defaultLng"]));

this.MainMap.MapProvider.Area = new RectLatLng(30.981178, 105.351914, 2.765142, 4.120995);
this.MainMap.BoundsOfMap = new RectLatLng(30.981178, 105.351914,  2.765142, 4.120995);
this.MainMap.Manager.Mode = AccessMode.CacheOnly;
this.MainMap.MapProvider = GMapProviders.SogouMapProvider;
this.MainMap.DragButton = MouseButton.Left;
this.MainMap.Zoom = 13;
this.MainMap.MinZoom = 8;
this.MainMap.MaxZoom = 24;
复制代码

 

GMAP.NET 搜狗地图的效果

普通地图

卫星地图

搜狗地图加载原理

要理解如何加载搜狗地图,也要理解下加载原理,我们用Chrome打开 http://map.sogou.com/,随便定位一个地址,打开开发者工具:

可以看到Tile的地址如下:http://p2.go2map.com/seamless1/0/174/717/3/1/744_212.png

分析下Url链接参数:

http://p2.go2map.com/seamless1/0/174是固定的

717=729-缩放级别(Zoom)

3=网格横坐标/200最接近的整数值=Math.Floor(x/200)。

1=网格纵坐标/200最接近的整数值=Math.Floor(y/200)。

744是网格横坐标。

212是网格纵坐标。

反正上面这些参数我也是东拼西凑了很多资料来的,确实搜狗的很诡异。

 

下面我们看看如何在GMAP.NET中实现搜狗地图吧。

SogouMapProvider

1)添加abstract class SougouMapProviderBase

由于搜狗地图也有普通地图和卫星地图,因此提供了一个有公共方法的抽象类,可以复用。

复制代码
public abstract class SogouMapProviderBase : GMapProvider
    {
        public SogouMapProviderBase() { MaxZoom = null; RefererUrl = "http://map.sougou.com"; Copyright = string.Format("{0} Sogou Corporation, {0} NAVTEQ, {0} Image courtesy of NASA", DateTime.Today.Year); } public override PureProjection Projection { get { return MercatorProjection.Instance; } } GMapProvider[] overlays; public override GMapProvider[] Overlays { get { if (overlays == null) { overlays = new GMapProvider[] { this }; } return overlays; } } protected override bool CheckTileImageHttpResponse(System.Net.HttpWebResponse response) { var pass = base.CheckTileImageHttpResponse(response); if (!pass) { return response.ResponseUri.AbsoluteUri.EndsWith(".png") || response.ResponseUri.AbsoluteUri.EndsWith(".JPG"); } return true; } }
复制代码

 

2)添加SougouMapProvider

复制代码
public class SogouMapProvider: SogouMapProviderBase
    {
        public static readonly SogouMapProvider Instance; readonly Guid id = new Guid("7E2A0100-7A75-4c49-A2C9-EE1C73947E10"); public override Guid Id { get { return id; } } readonly string name = "SohuMap"; public override string Name { get { return name; } } static SogouMapProvider() { Instance = new SogouMapProvider(); } public override PureImage GetTileImage(GPoint pos, int zoom) { string url = MakeTileImageUrl(pos, zoom, LanguageStr); return GetTileImageUsingHttp(url); } string MakeTileImageUrl(GPoint pos, int zoom, string language) { zoom = zoom - 1; var offsetX = Math.Pow(2, zoom); var offsetY = offsetX - 1; var numX = pos.X - offsetX; var numY = -pos.Y + offsetY; zoom = zoom + 1; var zoomLevel = 729 - zoom; if (zoomLevel == 710) { zoomLevel = 792; } var blo = Math.Floor(numX/200); var bla = Math.Floor(numY/200); string blos, blas; if (blo < 0) { blos = "M" + (-blo); } else { blos = blo.ToString(); } if (bla < 0) { blas = "M" + (-bla); } else { blas = bla.ToString(); } var x = numX.ToString().Replace("-","M"); var y = numY.ToString().Replace("-","M"); //http://p1.go2map.com/seamless1/0/174/720/0/0/95_25.png string url = string.Format(UrlFormat, "1", zoomLevel, blos, blas, x, y); Console.WriteLine("url:" + url); return url; } static readonly string UrlFormat = "http://p{0}.go2map.com/seamless1/0/174/{1}/{2}/{3}/{4}_{5}.png"; }
复制代码

 原文链接:http://www.cnblogs.com/enjoyeclipse/archive/2013/01/29/2880791.html

转载于:https://www.cnblogs.com/plRobotics-RD-Center/p/4008910.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34185320/article/details/93648049

智能推荐

线性模型练习题_dengxun7056的博客-程序员宅基地

1. 学习理解如何用最小二乘法的矩阵公式来得到线性回归的解,并使用numpy库来实现该算法。在研究一个问题时,从某种理论或假定出发,得到一个模型。根据这个模型,我们感兴趣的某个量有其理论值,同时可以对这个量进行实际观测,而得出其观测值。由于种种原因,如模型不完全正确以及观测有误差,理论值与观测值会有差距,这差距的平方和\[J(\theta)=\sum (理论值-观测值)^{2}\]...

基于ESXi的软路由(LEDE)与黑群晖的安装与配置_猫咪没有Fish的博客-程序员宅基地_软路由 黑群晖

之前家用黑群晖一直基于KVM的Proxmox来运行LEDE与黑群晖,后来觉得Proxmox过于复杂,于是尝试下免费的基于Vmware的ESXi。其实在驱动方面,各个系统对Vmware驱动的支持性明显优于KVM,性能方面对比起来,都不相上下。另外现在J19004盘位矿机在闲鱼上,价格十分低廉,整机价格大概约为280元一台,如果想弄一台实现家庭云存储的话,如今入手当属最佳时机。本篇教程采用的机器为华为RH2285V2 12盘位2U服务器,CPU使用E5 2418L2,24G 内存,外挂一个INTEL s

Linux操作系统wc命令_一人定乾坤的博客-程序员宅基地_linux操作系统wc

wc 命令是一个统计的工具,主要用来显示文件所包含的行、字和字节数。wc 命令是 word count 的缩写。命令格式wc [选项][文件]常用参数参数 描述-c 统计字节数-l 统计行数-m 统计字符数,这个标志不能与 -c 标志一起使用-w 统计字数,一个字被定义为由空白、跳格或换行字符分隔的字符串-L 打印最长行的长度例一:统计文件的字节数、行数和字符数,可以使用如下命令:wc -c c.txtwc -l c.txtwc -m c.txt例二:统计文件的字节数、行数和字

canal和FlinkCDC的总结_Null is Null的博客-程序员宅基地_canal和flink

1.canalcanal的介绍Canal是基于Mysql二进制的高性能数据同步系统,Canal在阿里巴巴集团中被广泛使用,以提供可靠的低延迟增量数据管道(白话文:其实就是根据mysql的biglog日志,进行增量同步数据)首先了解Canal的原理之前,我们先了解简单了解一下Mysql主从复制原理:1.所有的save、update、delete操作,都会进入主Mysql服务器,也就是Master节点。2.Master节点会生成一个BinLog二进制文件,每次操作Mysql数据库就会记录到二进制

Activiti ---- 工作流(流程框架)带你入门(重点的去理解)_Java-dezhe的博客-程序员宅基地_activiti流程框架

工作流主要讲Activiti (官网)Activiti是一个项目的名称,Alfresco软件在2010年5月17日宣布Activiti业务流程管理(BPM)开源项目的正式启动,其首席架构师由业务流程管理BPM的专家 Tom Baeyens担任。Activiti项目是一项新的基于Apache许可的开源BPM平台,从基础开始构建,旨在提供支持新的BPMN 2.0标准,包括支持对象管理组(OMG)...

深入理解Lock锁并发编程(以及与Synchronized对比)_张志翔 ̮的博客-程序员宅基地

原文地址:https://blog.csdn.net/takemetofly/article/details/48086069从Java 5之后,java.util.concurrent.locks包下提供了另一种方式来实现同步访问,那就是Lock。  也许有朋友会问,既然都可以通过synchronized来实现同步访问了,那么为什么还需要提供Lock?这个问题将在下面进行阐述。本文先从synch...

随便推点

oracle命令 yam,深入发掘ORACLE内部SQLINJECTION_咪马321~~~的博客-程序员宅基地

深入挖掘ORACLE内部SQLINJECTIONPh4nt0m Security TeamIssue 0x02, Phile #0x06 of 0x0A'''. 深刻发掘ORACLE内部SQLINJECTION .''''''. By kj021320 .''. kj021320_at_126. .'''一、前言良久没写PAPER了,日久之疏勤成性。我感到在海内的ORACLE攻防技术研讨得比拟...

单行查询返回多行记录问题解决---拼接多行查询结果_岳利-随笔的博客-程序员宅基地

-------正式脚本select'('||T.gw_year||')'||T.gw_year_number||'号' as "任务号" ,T.APPLY_TITLE as "标题" ,(SELECT S.DEPT_NAME FROM SY_ORG_DEPT S WHERE S.DEPT_CODE = T.S_ODEPT) AS "申请机构" ,(SELECT W.

Tableau(1)基本操作与计算_威威yw的博客-程序员宅基地

1 可视化数据可视化利用计算机图形学和图像处理技术,将数据转换成图形或图像在屏幕上显示出来,再进行交互处理的理论、方法和技术。应用领域最早运用于计算机科学中,并形成了可视化技术的一个重要分支——科学计算可视化科学计算可视化能够把科学数据,包括测量获得的数据、图像或是计算中涉及、产生的数字信息变为直观的、以图像图形信息表示的、随时间和空间变化的物理现象或物理量呈现在研究者面前,使他们能够...

dnf时装预览怎么打开_您看我还有机会吗?被阉割的DNF时装市场系统_weixin_39527911的博客-程序员宅基地

在DNF​100级更新之后,韩服同步更新了时装市场系统。但这一系统在国服却惨遭阉割,并没有跟随100级版本的脚步一并实装到国服。先让我们回顾一下,这个时装市场是怎么一回事。【入场条件】*在西海岸NPC希尔斯处移动到时装市场频道。* 也可以通过ESC菜单进入[地图]*可以通过时装市场主地图中的NPC希尔兹,达尔比处的菜单打开时装市场,时装观赏,时装展示。[NPC菜单]*时装观赏- 可以点击对应部位购...

测试用例的设计方法_等价类_盈盈️的博客-程序员宅基地

等价类思路:输入的集合是无穷的, 不能全都覆盖到依据需求将输入划分为若干个等价类,从等价类中选出一个测试用例,如果这个测试用 例测试通过,则认为所代表的等价类测试通过,这样就可以用较少的测试用例达到尽量多的功能覆盖,解决了不能穷举测试的问题。有效等价类:对于程序的规格说明书是合理的、有意义的输入数据构成的集合,利用有效等价类验证程序是否实现了规格说明中所规定的功能和性能。无效等价类:根据需求说明书,不满足需求的集合。超市买水果有效等价类:苹果、桃子、梨无效等价类:青菜、米、饮料,...

【Unity】CanvasGroup组件_夜梦说开发(VR)的博客-程序员宅基地

-Alpha:这个选项很多组件都有,用处也是一样的,在美术中,这个叫做Alpha通道的东东是用来控制透明度的,他的值从0到1.0是完全透明,1是完全不透明;-Interactable:确认该组件是否接受输入,当他被设置为false时,交互功能将被禁用;-Block Raycasts:是否让该组件像collider一样接受射线检测?你需要在依赖于Canvas的图形射线检测者上唤醒射线检测方法。这个不会作用于Physics.Raycast;-Ignore Parent Groups(忽略父级团)..