最近,公司项目要求在页面中嵌入地图,需求还算简单,但是由于必须具备响应式(主要是pc和移动端),而且由于公司业务是全球性的,要支持国外地点搜索。考虑到百度,腾讯,高德等等国内地图无法显示国外数据,谷歌在国内基本被废,对于全球通用的地图,目测只有微软的必应可以支持了(那些国外小厂的地图插件暂且不提)。虽然必应地图没有谷歌那么强大,但也基本能满足业务需求。所以在此做个简单的记录,方便以后查阅,也方便与我有同样需求的人参考。如有不对,欢迎指正。

官网地址:https://www.bingmapsportal.com/?lc=1033

网上有两个必应地图文档,这个文档更适合web开发,更加人性化,并非是sdk版,我也更加喜欢这个版本的api文档

1.申请一个密钥key:https://www.bingmapsportal.com/Application

申请成功后,就可以在文档中查看效果:

官方api文档地址:https://www.bingmapsportal.com/ISDK/AjaxV7#SearchModule2

Create map:创建一个地图,需要填入你刚申请的key:

map = new Microsoft.Maps.Map(document.getElementById('SDKmap'), {credentials: 'Your Bing Maps Key'});

Map with bounding box:带有边界的地图,需要在配置里填上边界的坐标即可:

var boundingBox = Microsoft.Maps.LocationRect.fromLocations(new Microsoft.Maps.Location(47.618594, -122.347618), new Microsoft.Maps.Location(47.620700, -122.347584), new Microsoft.Maps.Location(47.622052, -122.345869));
map = new Microsoft.Maps.Map(document.getElementById('SDKmap'), {credentials: 'Your Bing Maps Key', bounds: boundingBox});

Map with center:指定地图的中心,需要填入坐标值,其中zoom为地图缩放比例

map = new Microsoft.Maps.Map(document.getElementById('SDKmap'), {credentials: 'Your Bing Maps Key', center: new Microsoft.Maps.Location(47.609771, -122.2321543125), zoom: 8});

Map with Bird's eye view:初始化时就显示鸟瀚图,zoom调整到最大值,并在缩放中始终显示实景图:

map = new Microsoft.Maps.Map(document.getElementById('SDKmap'), {credentials: 'Your Bing Maps Key', center: new Microsoft.Maps.Location(47.6215, -122.349329), mapTypeId: Microsoft.Maps.MapTypeId.birdseye, zoom: 18});

Add default pushpin:图钉,可以在地图上指定地点使用一个或多个图钉,并且图钉的样式有多种选择,例如:

map.entities.clear();
var pushpin= new Microsoft.Maps.Pushpin(map.getCenter(), null);
map.entities.push(pushpin);

Infobox:提示框,可以在地图中弹出提示框,并且提示框的大小高度,样式都可以调整,例如:

map.entities.clear();
var defaultInfobox = new Microsoft.Maps.Infobox(map.getCenter(), null);
map.entities.push(defaultInfobox);

Find directions:路线,可以在地图上标明两地点的路线图:

var start= 'Seattle, wa'; var end= 'Portland, OR';
map.getCredentials(function(credentials) {
var routeRequest = 'https://dev.virtualearth.net/REST/v1/Routes?wp.0=' + start + '&wp.1=' + end + '&routePathOutput=Points&output=json&jsonp=RouteCallback&key=' + credentials;
var mapscript = document.createElement('script');
mapscript.type = 'text/javascript';
mapscript.src = routeRequest;
document.getElementById('SDKmap').appendChild(mapscript);
});

Get location:定位,可以获取用户的坐标,并可以加入回调(由于这里我用了vpn,所以把我定位到了日本了):

map.entities.clear();
var geoLocationProvider = new Microsoft.Maps.GeoLocationProvider(map);
geoLocationProvider.getCurrentPosition();
displayAlert('Current location set, based on your browser support for geo location API');

Directions module:更强大的路线标识,可以作为路线参考:

function createDrivingRoute()
{
if (!directionsManager) { createDirectionsManager(); }
directionsManager.resetDirections();
// Set Route Mode to driving
directionsManager.setRequestOptions({ routeMode: Microsoft.Maps.Directions.RouteMode.driving });
var seattleWaypoint = new Microsoft.Maps.Directions.Waypoint({ address: 'Seattle, WA' });
directionsManager.addWaypoint(seattleWaypoint);
var tacomaWaypoint = new Microsoft.Maps.Directions.Waypoint({ address: 'Tacoma, WA', location: new Microsoft.Maps.Location(47.255134, -122.441650) });
directionsManager.addWaypoint(tacomaWaypoint);
// Set the element in which the itinerary will be rendered
directionsManager.setRenderOptions({ itineraryContainer: document.getElementById('directionsItinerary') });
displayAlert('Calculating directions...');
directionsManager.calculateDirections();
} if (!directionsManager)
{
Microsoft.Maps.loadModule('Microsoft.Maps.Directions', { callback: createDrivingRoute });
}
else
{
createDrivingRoute();
}

Find a location by address:通过地点来获取位置,这里只需要写入地点名,不需要坐标也可以:

function geocodeRequest()
{
createSearchManager();
var where = 'Denver, CO';
var userData = { name: 'Maps Test User', id: 'XYZ' };
var request =
{
where: where,
count: 5,
bounds: map.getBounds(),
callback: onGeocodeSuccess,
errorCallback: onGeocodeFailed,
userData: userData
};
searchManager.geocode(request);
}
function onGeocodeSuccess(result, userData)
{
if (result) {
map.entities.clear();
var topResult = result.results && result.results[0];
if (topResult) {
var pushpin = new Microsoft.Maps.Pushpin(topResult.location, null);
map.setView({ center: topResult.location, zoom: 10 });
map.entities.push(pushpin);
}
}
}
function onGeocodeFailed(result, userData) {
displayAlert('Geocode failed');
} if (searchManager)
{
geocodeRequest();
}
else
{
Microsoft.Maps.loadModule('Microsoft.Maps.Search', { callback: geocodeRequest });
}

注意,还有更多更强大的功能,这里无法一一列举出来,只是举例了开发常用到的api,用法也很简单,如有不全面的,请移步到官方api查看,若发现有错误之处,欢迎留言。

官方文档:https://www.bingmapsportal.com/ISDK/AjaxV7#CreateMap1

必应地图api文档,微软必应地图web开发版详解,可以在国内使用国外地图的更多相关文章

  1. 百度地图api文档实现任意两点之间的最短路线规划

    两个点之间的路线是使用“Marker”点连接起来的,目前还没找到改变点颜色的方法,测试过使用setStyle没有效果. <html><head> <meta http-e ...

  2. 地图API文档

    目录 腾讯地图API 2 1.API概览... 2 1.1 WebService API(官网注明是beta版本,可能不稳定,慎用):... 2 1.2 URL API:... 2 1.3 静态图AP ...

  3. 使用Python爬虫库BeautifulSoup遍历文档树并对标签进行操作详解(新手必学)

    为大家介绍下Python爬虫库BeautifulSoup遍历文档树并对标签进行操作的详细方法与函数下面就是使用Python爬虫库BeautifulSoup对文档树进行遍历并对标签进行操作的实例,都是最 ...

  4. 《TomCat与Java Web开发技术详解》(第二版) 第四章节的学习总结--常用Servlet API

    要开发Servlet,自然要掌握常用的servlet的相关API.通过此章节的学习,了解到如下常用API 1.Servlet接口--->GenericServlet抽象类(实现Servlet接口 ...

  5. 开源的API文档工具框架——Swagger简介

    初次接触Swagger是在2017年5月,当时公司正好要对整套系统架构进行重新设计,有同事推荐用这个技术框架来规范后台接口的API文档.当时因为架构重构,涉及改造的技术点太多,一时也就没太多精力,把S ...

  6. eclipse如何为java项目生成API文档、JavaDoc

    当我们的项目很大,编写了很多代码的时候,就需要生成一个标准的API文档,让后续的开发人员,或者合作者可以清晰的了解您方法的使用,那么如何将自己的项目生成API文档呢? 1.点击eclipse的[Pro ...

  7. API文档管理平台

    一.应用场景 在公司中,有很多开发,每个人维护的api接口是不一样的.如果有一个统一的api文档管理平台,每个开发,把自己维护的接口录入进去. 之后再开发别的功能时,不需要重复造轮子,直接调用就可以了 ...

  8. eclipse 中为 java 项目生成 API 文档、JavaDoc

    当我们的项目很大,编写了很多代码的时候,就需要生成一个标准的 API 文档,让后续的开发人员,或者合作者可以清晰的了解您方法的使用. 1.点击 eclipse 的 Project 菜单,选择 Gene ...

  9. 什么是API文档?--斯科特·马文

    有时候,软件开发人员想要的是自己的软件被其他应用软件所应用,而不是让人来操作.API使各种应用软件互相通信成为了可能. 从事API文档写作15年,我亲眼见证了API产品的崛起.各个公司开始搭建平台,希 ...

随机推荐

  1. USACO 1.3.1

    题目链接:USACO 1.3.1 简单的贪心,将cent从小到大排序. /* ID:wang9621 PROG:milk LANG:C++ */ #include <iostream> # ...

  2. 伸展树 Splay 模板

    学习Splay的时候参考了很多不同的资料,然而参考资料太杂的后果就是模板调出来一直都有问题,尤其是最后发现网上找的各种资料均有不同程度的错误. 好在啃了几天之后终于算是啃下来了. Splay也算是平衡 ...

  3. Ubuntu Server 14.04 & Apache2.4 虚拟主机、模块重写、隐藏入口文件配置

    环境: Ubuntu Server 14.04 , Apache2.4 一.Apache2.4 虚拟主机配置 01. 新建一份配置文件 在apache2.4中,虚拟主机的目录是通过/etc/apach ...

  4. iOS播放gif图方式

    转发:http://www.cnblogs.com/jerehedu/ 图片分为静态和动态两种,图片的格式有很多种,在开发中比较常见的是.png和.jpg的静态图片,但有的时候在App中需要播放动态图 ...

  5. 结对编程--Goldpoint Game

    黄金点游戏 黄金点游戏描述: N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数),得到G值. ...

  6. css3动画-transition

    当css属性改变的时候,控制animation的速度,让属性的变化发生在一段时间之内,而不是立即生效. 语法 transition: <property> <duration> ...

  7. STM32的时钟树深入详解以及RCC配置

    在STM32上如果不使用外部晶振,OSC_IN和OSC_OUT的接法 如果使用内部RC振荡器而不使用外部晶振,请按照下面方法处理: 1)对于100脚或144脚的产品,OSC_IN应接地,OSC_OUT ...

  8. HDU 1255 覆盖的面积 ——(线段树+扫描线)

    又做了一题扫描线以后对节点的覆盖标记理解的更加深刻了. 代码如下: #include <stdio.h> #include <algorithm> #include <s ...

  9. 从损坏的wt文件中恢复出WiredTiger集合

    Reference: http://dev.guanghe.tv/2016/06/recovering-a-wiredtiger-collection-from-a-corrupt-wt-file.h ...

  10. pandas 按照列A分组,将同一组的列B求和,生成新的Dataframe

    对于pandas中的Dataframe,如果需要按照列A进行分组,将同一组的列B求和,可以通过下述操作完成: df = df.groupby(by=['column_A'])['column_B']. ...