Bing必应地图中国API - 在地图上画圆

2011-05-24 14:49:37|  分类: Bing&Google|字号 订阅

 
 

《变形金刚2》上映4日国内票房过亿,基本上我只能等盗版流出下载观看了。很多时候愿望很小,却不容易实现。比如我一直想写一篇博客,介绍一下在地图上画圆。这个想法来源于不止一个客户问起怎么在必应地图上实现区域搜索,比如搜索一个圆、长方形、多边形内的兴趣点。

于是衍生出来一个问题,微软必应地图为什么不提供更丰富的地图功能,比如测量两点之间的距离,画各种形状等等;

再衍生一个问题,不止一个朋友抱怨微软spcase越来越难用了,比QQ空间做的还差,为什么不这么做,为什么不那么做;

其实,如果微软什么都做了,什么都做得很好的话,就没有别的公司机会了。我常常和别人讲,在美国微软挣10块钱,要分给合作伙伴7块钱,因为我们知道很多事情应该交给合作伙伴去完成。

回到刚才的问题,微软必应地图是没有提供画圆的工具,但是我们提供了画圆的方法,或者画圆方法的方法。但是我们不一定需要在界面上给出这个功能,因为有人需要有人不需要。所以有需要的用户可以自己去实现,或者找合作伙伴去实现。

在地图上画圆更是一个数学算法问题,所以我就直接给出代码,大家直接拷贝下面的代码就行了。

function drawCircle(origin,radius)
{  
      var earthRadius = 6371;
      
      //latitude in radians
        var lat = (origin.Latitude*Math.PI)/180; 
        
        //longitude in radians
        var lon = (origin.Longitude*Math.PI)/180; 
        
        //angular distance covered on earth's surface
        var d = parseFloat(radius)/earthRadius;  
        
        var points = new Array();
        for (i = 0; i <= 360; i++) 
        { 
            var point = new VELatLong(0,0)            
            var bearing = i * Math.PI / 180; //rad
            point.Latitude = Math.asin(Math.sin(lat)*Math.cos(d) + Math.cos(lat)*Math.sin(d)*Math.cos(bearing));
            point.Longitude = ((lon + Math.atan2(Math.sin(bearing)*Math.sin(d)*Math.cos(lat), Math.cos(d)-Math.sin(lat)*Math.sin(point.Latitude))) * 180) / Math.PI;
            point.Latitude = (point.Latitude * 180) / Math.PI;
            points.push(point);
        }
        
       var circle = new VEShape(VEShapeType.Polyline, points); 
       circle.HideIcon();
       searchShapeLayer.AddShape(circle);
       
       map.SetMapView(points);
    }

上面的算法只是在地图上简单的画一个圆,位置和大小都固定的。有朋友会继续问,如何在地图用鼠标画圆,圆的大小随着鼠标移动而变化。这个问题需要研究一下鼠标事件的响应函数。同学们可以把它当做课后作业吧,呵呵。

进一步探讨如何搜索一个圆形区域内的兴趣点,其实就是判断兴趣点与圆心的距离是否小于半径。所以额外给出地球上两点之间距离的计算方法:

function distance(latlong,latlong2)
    {
      var lat1 = latlong.Latitude;
      var lon1 = latlong.Longitude;
      var lat2 = latlong2.Latitude;
      var lon2 = latlong2.Longitude;
      var earthRadius = 6371;
      
      var factor = Math.PI/180;
      var dLat = (lat2-lat1)*factor;
      var dLon = (lon2-lon1)*factor; 
      var a = Math.sin(dLat/2) * Math.sin(dLat/2)+Math.cos(lat1*factor)*Math.cos(lat2*factor)*Math.sin(dLon/2) * Math.sin(dLon/2); 
      var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
      var d = earthRadius * c;
      
      return d;
    }

引用:http://www.htchen.com/post/11.html

Bing必应地图中国API - 在地图上画圆的更多相关文章

  1. Bing必应地图中国API入门讲座之八:显示驾车路线

    Bing必应地图中国API入门讲座之八:显示驾车路线 2011-05-24 14:47:36|  分类: Bing&Google|字号 订阅     这篇文章非常值得纪念,因为我是在Googl ...

  2. Bing必应地图中国API - 添加实时交通信息

    Bing必应地图中国API - 添加实时交通信息 2011-05-24 14:44:58|  分类: Bing&Google|字号 订阅     2009年4月23日,微软必应地图中国API新 ...

  3. Bing必应地图中国API一显示地图 (转) 做人要厚道

    Bing必应地图中国API一显示地图 2011-05-24 14:27:31|  分类: Bing&Google|字号 订阅     微软必应地图中国地图API发布已经有10天了,考虑到网上现 ...

  4. ie上画圆饼图

    概述 主要运用到CSS3的transform.js.jq实现饼状图效果 详细 代码下载:http://www.demodashi.com/demo/10579.html 一.准备工作 1.主要运用到C ...

  5. Google地图接口API之地图类型(六)

    1. Google 地图- 基本地图类型 Google Maps API 中提供了以下地图类型: MapTypeId.ROADMAP,用于显示默认的道路地图视图 MapTypeId.SATELLITE ...

  6. Google地图接口API之地图控件集(五)

    1.默认控件集 当使用一个标准的google地图,它的控件默认设置如下: (1). Zoom-显示一个滑动条来控制map的Zoom级别,如下所示:

  7. Google地图接口API之地图事件(四)

    演示几个地图事件: 1. 点击标记缩放地图 仍然使用上一遍文章使用的英国伦敦的地图.点用户点击标记时实现缩放地图的功能(点击标记时绑定地图缩放事件). 代码如下: <html> <h ...

  8. 百度地图坐标转换API和地图API

    利用百度地图的服务将经纬度转换为米单位坐标 using System; using System.Collections.Generic; using System.Linq; using Syste ...

  9. [android学习]__使用百度地图开放api编写地图定位app

    前言 在前面我已经记录关于如何使用百度地图api,以及如何配置相关的androidstudio配置了,接下来将记录如何使用百度地图api开发简单的地图定位apk,我将决定不定期持续更新本篇笔记,在每个 ...

随机推荐

  1. 51nod 1551 集合交易 最大权闭合子图

    题意: 市场中有n个集合在卖.我们想买到满足以下要求的一些集合,所买到集合的个数要等于所有买到的集合合并后的元素的个数. 每个集合有相应的价格,要使买到的集合花费最小. 这里我们的集合有一个特点:对于 ...

  2. HNOI 2010 物品调度 并查集 置换

    题意: 题意有点细,暂不概括.请仔细审题. 分析: 我们先要把c生成出来. 记得颜神讲这道题,首先表明,这道题有两个问题需要处理. 第一个是要先定位,第二个是要求最小移动步数. 定位时对于每一个物品i ...

  3. 查看密码存放地-shadow

    shadow 位置:/cat/shadow 作用:存放用户的密码等信息 使用查看命令以后得到以下数据 我们会看到9个字段,分别用  :隔开,如上图所示一一解释: 第一字段:用户名称 第二字段:加密密码 ...

  4. [Python3网络爬虫开发实战] 5.3-非关系型数据库存储

    NoSQL,全称Not Only SQL,意为不仅仅是SQL,泛指非关系型数据库.NoSQL是基于键值对的,而且不需要经过SQL层的解析,数据之间没有耦合性,性能非常高. 非关系型数据库又可细分如下. ...

  5. C++ 赋值运算符重载

    类的定义 class Test{ int id; public: Test(int i): id(i){ cout << "obj_" << i <& ...

  6. 集训第五周动态规划 J题 括号匹配

    Description We give the following inductive definition of a “regular brackets” sequence: the empty s ...

  7. SpringBoot第十六篇:自定义starter

    作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/11058502.html 版权声明:本文为博主原创文章,转载请附上博文链接! 前言   这一段时间 ...

  8. conflunce安装配置

    下载 下载Confluence-v5.4.4.zip包,其中包含   atlassian-confluence-5.4.4-x64.bin #程序二进制文件 confluence5.x-crack.z ...

  9. TKmybatis的框架介绍和原理分析及Mybatis新特性

    tkmybatis是在mybatis框架的基础上提供了很多工具,让开发更加高效,下面来看看这个框架的基本使用,后面会对相关源码进行分析,感兴趣的同学可以看一下,挺不错的一个工具 实现对员工表的增删改查 ...

  10. 食物(bzoj 3280)

    Description 明明这次又要出去旅游了,和上次不同的是,他这次要去宇宙探险! 我们暂且不讨论他有多么NC,他又幻想了他应该带一些什么东西.理所当然的,你当然要帮他计算携带N件物品的方案数. 他 ...