zoukankan      html  css  js  c++  java
  • 深入理解最强桌面地图控件GMAP.NET ---[更新]百度地图

    之前写了篇博文,深入理解最强桌面地图控件GMAP.NET --- 百度地图

    但是很多回复说百度地图更新了,不能显示百度的离线地图。之前承诺说是国庆节更新,最近才更新。代码已经提交到:

    https://code.google.com/p/ypmap/

    其实算法都是一样的,只是链接变了,

    //原来:http://q3.baidu.com/it/u=x=721;y=209;z=12;v=014;type=web&fm=44
    //更新:http://online1.map.bdimg.com/tile/?qt=tile&x=23144&y=6686&z=17&styles=pl

    因此只要将BaiduMapProviderBase改成下面的代码即可

    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Globalization;
    using System.Text;
    using System.Xml;
    using GMap.NET.Internals;
    using GMap.NET.MapProviders;
    using GMap.NET.Projections;
    
    namespace GMap.NET.GMap.NET.MapProviders.Baidu
    {
        public abstract class BaiduMapProviderBase : GMapProvider
        {
            private string ClientKey = "1308e84a0e8a1fc2115263a4b3cf87f1";
            public BaiduMapProviderBase()
            {
                MaxZoom = null;
                RefererUrl = "http://map.baidu.com";
                Copyright = string.Format("©{0} Baidu 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;
                }
            }
        }
    
        public class BaiduMapProvider : BaiduMapProviderBase
        {
            public static readonly BaiduMapProvider Instance;
    
            readonly Guid id = new Guid("608748FC-5FDD-4d3a-9027-356F24A755E5");
            public override Guid Id
            {
                get { return id; }
            }
    
            readonly string name = "BaiduMap";
            public override string Name
            {
                get
                {
                    return name;
                }
            }
    
            static BaiduMapProvider()
            {
                Instance = new BaiduMapProvider();
            }
    
            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 num = (pos.X + pos.Y)%8 + 1;
                var x = numX.ToString().Replace("-", "M");
                var y = numY.ToString().Replace("-", "M");
    
                //原来:http://q3.baidu.com/it/u=x=721;y=209;z=12;v=014;type=web&fm=44
                //更新:http://online1.map.bdimg.com/tile/?qt=tile&x=23144&y=6686&z=17&styles=pl
                string url = string.Format(UrlFormat, x, y, zoom);
                Console.WriteLine("url:" + url);
                return url;
            }
    
    
            static readonly string UrlFormat = "http://online1.map.bdimg.com/tile/?qt=tile&x={0}&y={1}&z={2}&styles=pl";
            
        }
    }
  • 相关阅读:
    ASM instance正常启动,但是用sqlplus 连不上的问题
    Ubuntu环境下,项目出现:Call to undefined function curl_init() 提示
    linux安装curl扩展
    https请求排错过程
    php-fpm.conf文件的位置在哪里
    如何查找php-fpm监听的端口
    laravel AppKernel.php中的middleware、middlewareGroups、routeMiddleware
    laravel项目数据库交互逻辑
    Laravel中APP_KEY起什么作用
    php 出现Warning: A non-numeric value encountered问题的原因及解决方法
  • 原文地址:https://www.cnblogs.com/enjoyeclipse/p/3430371.html
Copyright © 2011-2022 走看看