前三篇介绍了GMAP.NET的一些基本功能以及如何集成一个百度地图。

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

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

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

虽然地图在国内用得最多的是谷歌和百度,但任何互联网产品都绕不过“腾讯”,

这一章就介绍如何在GMAP.NET中支持搜搜地图。

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

国内的地图都差不多,我觉得做得最好的是高德,下一篇会结合理论章节讲讲为什么,至少从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.SosoMapProvider; this.MainMap.DragButton = MouseButton.Left; this.MainMap.Zoom = 13; this.MainMap.MinZoom = 8; this.MainMap.MaxZoom = 24;

GMAP.NET SOSO地图的效果

普通地图

卫星地图

搜搜地图加载原理

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

可以发现,搜搜地图也是根据url一张一张拼接而来的,以链接http://p3.map.soso.com/maptilesv2/11/102/75/1633_1200.png为例,每个参数的含义如下:

p0也是分布式站点的一个,p1,p2,p3都可以;

maptilesv2是版本号的东西,

11是缩放级别,

1633是鼠标所在地图网格的X,1200是地图网格的Y (关于地图网格,参考下Google Tile's Engine Explaine),以后的理论章节会专门讲这个东西。

102 = 1633/16后最接近的整数值,75 = 1200/16后最接近的整数值。

SOSOMapProvider

同上一篇百度地图的操作流程一样,也采用下面的流程添加SOSOMapProvider的支持。

1)添加abstract class SosoMapProviderBase

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

public abstract class SosoMapProviderBase : GMapProvider{public SosoMapProviderBase() { MaxZoom = null; RefererUrl = "http://map.soso.com"; Copyright = string.Format("©{0} Tencent 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).SoSoMapProvider

主要是MakeTileImageUrl方法,就是根据搜索地图加载原理来的:本质上就是要构造一个获取图片的url链接。如果是卫星地图,只要将UrlFormat从

http://p0.map.soso.com/maptilesv2/{0}/{1}/{2}/{3}_{4}.png

替换成

http://p1.map.soso.com/sateTiles/{0}/{1}/{2}/{3}_{4}.jpg

即可。

 public class SosoMapProvider: SosoMapProviderBase{public static readonly SosoMapProvider Instance; readonly Guid id = new Guid("30D069B3-F6A5-4feb-9B5E-84CBF1E34F34"); public override Guid Id { get { return id; } } readonly string name = "SoSoMap"; public override string Name { get { return name; } } static SosoMapProvider() { Instance = new SosoMapProvider(); } public override PureImage GetTileImage(GPoint pos, int zoom) { string url = MakeTileImageUrl(pos, zoom, LanguageStr); return GetTileImageUsingHttp(url); } static int[] _scope = new int[]{0, 0, 0, 0, 0, 3, 0, 3, 0, 3, 0, 3, 0, 7, 0, 7, 0, 15, 0, 15, 0, 31, 0, 31, 0, 63, 4, 59, 0, 127, 12, 115, 0, 225, 28, 227, 356, 455, 150, 259, 720, 899, 320, 469, 1440, 1799, 650, 929, 2880, 3589, 1200, 2069, 5760, 7179, 2550, 3709, 11520, 14349, 5100, 7999, 23060, 28689, 10710, 15429, 46120, 57369, 20290, 29849, 89990, 124729, 41430, 60689, 184228, 229827, 84169, 128886}; string MakeTileImageUrl(GPoint pos, int zoom, string language) { var f = zoom*4; var i = _scope[f++]; var j = _scope[f++]; var l = _scope[f++]; var scope = _scope[f]; if (pos.X >= i && pos.X <= j && pos.Y >= l && pos.Y <= scope) { pos.Y = (long) (Math.Pow(2, zoom) - 1 - pos.Y); } //http://p0.map.soso.com/maptilesv2/11/102/74/1633_1198.png string url = string.Format(UrlFormat, zoom, Math.Floor((decimal)(pos.X / 16)), Math.Floor((decimal)(pos.Y / 16)), pos.X, pos.Y); Console.WriteLine("url:" + url); return url; } static readonly string UrlFormat = "http://p0.map.soso.com/maptilesv2/{0}/{1}/{2}/{3}_{4}.png"; }

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

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

(转)深入理解最强桌面地图控件GMAP.NET --- SOSO地图相关推荐

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

    转 http://www.cnblogs.com/enjoyeclipse/archive/2013/01/15/2859028.html 前三篇介绍了GMAP.NET的一些基本功能以及如何集成一个百 ...

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

    前一篇介绍了GMAP.NET的理论基础,这篇介绍如何集成高德地图.高德地图自从为IOS6提供地图后,目前已经被大众所熟知了. 在我集成国内地图的经验来看,也是最符合墨卡托投影法的. 前面的相关文章链接 ...

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

    转 http://www.cnblogs.com/enjoyeclipse/archive/2013/01/14/2859026.html 前两篇介绍了GMAP.NET的一些基本功能和如何在自己的项目 ...

  4. (转)深入理解最强桌面地图控件GMAP.NET ---离线地图

    这章会介绍GMAP.NET的核心功能之一:离线地图.这个功能可以满足很多政府项目.保密项目.或者由于种种原因不能上网的项目的需求. 本章主要分成三个方面介绍:演示.生成离线地图.Demo代码. 一.演 ...

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

    转 http://www.cnblogs.com/enjoyeclipse/archive/2013/01/29/2882254.html 这章会介绍GMAP.NET的核心功能之一:离线地图.这个功能 ...

  6. 入理解最强桌面地图控件GMAP.NET ---离线地图

    http://www.cnblogs.com/enjoyeclipse/archive/2013/01/31/2882254.html 介绍GMAP.NET的核心功能之一:离线地图.这个功能可以满足很 ...

  7. 深入理解最强桌面地图控件GMAP.NET --- 街景地图(StreetView)

    很久没有更新博客了,今天无事把GMAP.NET的代码又重新翻了翻,看到了街景地图的例子. 街景地图是谷歌最早提出来的,我不知道谷歌的街景地图是如何实现的,在这个例子中,运用了WPF 3D的原理,对街景 ...

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

    前几篇介绍了一些国内地图的案例, 深入理解最强桌面地图控件GMAP.NET --- SOSO地图 深入理解最强桌面地图控件GMAP.NET --- 百度地图 我们以Google地图为例,这章介绍下地图 ...

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

    转 http://www.cnblogs.com/enjoyeclipse/archive/2013/01/18/2865700.html 前几篇介绍了一些国内地图的案例, 深入理解最强桌面地图控件G ...

最新文章

  1. 想学测试如何入门和学习软件测试?今天我就好好给你唠唠
  2. Ubuntu/Debian 系统切换Java(JVM),修改Java版本,JAVA_HOME
  3. //todo 的用处
  4. 哥德巴赫猜想(升级版)(洛谷-P1579)
  5. VXLAN配置实例(四)——VXLAN多租户网络隔离
  6. Initial Audio Trap Empire Heatup3 Expansion (HeatUp3通用音色库)
  7. Tableau 自定义调色板及应用全流程讲解【保姆级】
  8. win10系统怎样安装/更新独立显卡驱动
  9. PS三分钟扣图教程,并增强画质
  10. 利用OpenStreetMap获取城市路网数据
  11. java bks证书_jks bks 等的定义 如何将jks转化为bks的
  12. 微信小程序上传图像或者文件到阿里云oss
  13. 《introduction to information retrieval》信息检索学习笔记4 索引结构
  14. 中小学计算机教室设备维修记录,校园网与教室多媒体设备维修管理暂行办法
  15. Wireshark的基本使用
  16. 测试基础篇之(postman接口和Fiddler测试)
  17. C实现三子棋 人机对弈
  18. c++/c语言学习记录时间帖
  19. STM32中FLASH/System Memory/SRAM的区别
  20. HTML——em标签

热门文章

  1. 百度推广——搜索营销新视角
  2. 程序员该如何养生?5个简单的日常保健养生小知识
  3. 气功:我国特有的一种健身术
  4. 国科大学习资料--最优化计算方法(王晓)-期末考试真题2
  5. java虚拟机学习笔记
  6. 加班有多可怕?据统计:程序员平均寿命仅为37.9岁!
  7. 超声波模块c语言编程,超声波模块
  8. C语言为什么不会过时?
  9. QQ浏览器查看Cookies
  10. 量子计算机芯片的制造过程,全干货!一文读懂芯片制造及量子芯片!