Bing必应地图中国API - 在地图上画圆
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;
}
Bing必应地图中国API - 在地图上画圆的更多相关文章
- Bing必应地图中国API入门讲座之八:显示驾车路线
Bing必应地图中国API入门讲座之八:显示驾车路线 2011-05-24 14:47:36| 分类: Bing&Google|字号 订阅 这篇文章非常值得纪念,因为我是在Googl ...
- Bing必应地图中国API - 添加实时交通信息
Bing必应地图中国API - 添加实时交通信息 2011-05-24 14:44:58| 分类: Bing&Google|字号 订阅 2009年4月23日,微软必应地图中国API新 ...
- Bing必应地图中国API一显示地图 (转) 做人要厚道
Bing必应地图中国API一显示地图 2011-05-24 14:27:31| 分类: Bing&Google|字号 订阅 微软必应地图中国地图API发布已经有10天了,考虑到网上现 ...
- ie上画圆饼图
概述 主要运用到CSS3的transform.js.jq实现饼状图效果 详细 代码下载:http://www.demodashi.com/demo/10579.html 一.准备工作 1.主要运用到C ...
- Google地图接口API之地图类型(六)
1. Google 地图- 基本地图类型 Google Maps API 中提供了以下地图类型: MapTypeId.ROADMAP,用于显示默认的道路地图视图 MapTypeId.SATELLITE ...
- Google地图接口API之地图控件集(五)
1.默认控件集 当使用一个标准的google地图,它的控件默认设置如下: (1). Zoom-显示一个滑动条来控制map的Zoom级别,如下所示:
- Google地图接口API之地图事件(四)
演示几个地图事件: 1. 点击标记缩放地图 仍然使用上一遍文章使用的英国伦敦的地图.点用户点击标记时实现缩放地图的功能(点击标记时绑定地图缩放事件). 代码如下: <html> <h ...
- 百度地图坐标转换API和地图API
利用百度地图的服务将经纬度转换为米单位坐标 using System; using System.Collections.Generic; using System.Linq; using Syste ...
- [android学习]__使用百度地图开放api编写地图定位app
前言 在前面我已经记录关于如何使用百度地图api,以及如何配置相关的androidstudio配置了,接下来将记录如何使用百度地图api开发简单的地图定位apk,我将决定不定期持续更新本篇笔记,在每个 ...
随机推荐
- git命令初级
git是开源的分布式版本控制系统,分布式主要区别于集中式代表CVS(Concurrent Version System,遵从C/S架构,同步比较笨拙.)和SVN(Subversion),linux开发 ...
- 笔试算法题(25):复制拥有多个指针的链表 & 判断二元树B是否为A的子树
出题:定义一个复杂链表:在单向链表的基础上,每个节点附加一个指向链表中其他任意节点的指针sibling,实现CNode* Clone(Cnode *head)函数复制这个复杂链表: 分析: 解法1:将 ...
- 开发基本的php框架
github路径:https://github.com/zhengchuzhou/easyPhpFramework 一.目录结构及用途 二.相关代码: 1.入口文件(index.php): <? ...
- assert.fail()详解
assert.fail(actual, expected, message, operator) 抛出一个 AssertionError.如果 message 是假值,错误信息会被设置为被 opera ...
- Python之机器学习-朴素贝叶斯(垃圾邮件分类)
目录 朴素贝叶斯(垃圾邮件分类) 邮箱训练集下载地址 模块导入 文本预处理 遍历邮件 训练模型 测试模型 朴素贝叶斯(垃圾邮件分类) 邮箱训练集下载地址 邮箱训练集可以加我微信:nickchen121 ...
- Apollo源码解析看一文就够
对于配置中心我们先抛出问号三连,什么是配置中心?为什么要用配置中心?配置中心怎么用? 笔者说说自己理解的配置中心,个人观点的十六字 消息存储 消息推送 环境隔离 灰度发布 今天我们先来看Apollo配 ...
- nativeLibraryDirectories=[/data/app/com.lukouapp-1/lib/arm64, /vendor/lib64, /system/lib64]]] couldn't find "libxxxx.so
一开始我遇到的问题是,如果手机有SD卡槽,则不管有没有插卡,都会闪退,打日记后发现是找不到so文件.报错日记如下: nativeLibraryDirectories=[/data/app/com.lu ...
- Android OkHttp与物理存储介质缓存:DiskLruCache(2)
Android OkHttp与物理存储介质缓存:DiskLruCache(2) 本文在附录文章8,9的基础之上,把Android OkHttp与DiskLruCache相结合,综合此两项技术,实 ...
- 【转】关于LIS和一类可以用树状数组优化的DP 预备知识
原文链接 http://www.cnblogs.com/liu-runda/p/6193690.html 预备知识 DP(Dynamic Programming):一种以无后效性的状态转移为基础的算法 ...
- noip模拟赛 旅行
分析:一个贪心的想法是每次找到根的点权和最大的点进行操作,关键是怎么维护.每次找最大值,修改后会对这条链上每个点的子树上的点造成影响,可以用线段树来维护.找最大值就是区间求最大值嘛,对子树进行操作利用 ...