2.地图位置

2.1 问题

需要在地图上为用户显示一个或多个位置。此外,要在同一张地图上显示用户自己的位置。

2.2 解决方案

(API Level 9)
向用户显示地图的最简单方式就是用位置数据创建一个Intent并把它传递给Android系统来启动地图应用程序。另外,Google Play Services库的Google Maps v2库组件提供的Map View和MapActivity可以在应用程序中嵌入地图。

要点:
Google Maps v2是作为Google Play Services库的一部分进行分发的,它在任意平台级别都不是原生SDK的一部分。然而,目标平台为API Level 9或以后版本的应用程序以及Google Play体系内的设备都可以使用此绘画库。

1. 获取API密钥

要开始使用Maps v2,需要创建一个API项目,在该项目内启用Maps v2服务,生成API密钥并包括在应用程序代码中。如果没有API密钥,虽然也可以利用绘图类,但不会向应用程序返回任何地图图块(map tile)。请遵循如下步骤:
(1)进入https://code.google.com/apis/console/,使用你的Google账户登录以访问Google API控制台。
(2)选择Create Project选项,为你的地图建立新的项目。如果已有项目,则可以根据喜好向其中添加Maps v2服务和密钥。在此例中,选择要添加Maps v2的项目。
(3)在导航面板中,选择Services,向下滚动到Google Maps Android API v2并启用该服务。
(4)在导航面板中选择API Access,并且选择Create new Android Key选项。
(5)遵循屏幕上的说明,根据想要使用的应用程序向密钥添加密钥库签名/应用程序包对。在此例中,示例应用程序的包名是com.androidrecipes.mapper,而签名来自开发机器上的调试密钥,通常位于/.android/debug.keystore。

如果在模拟器上测试你的运行代码,模拟器必须使用目标平台为Android 4.3或以后版本的SDK构建,这些版本包含Google API,从而绘图操作可以正常运行。以前版本的SDK捆绑了Map v1 库而不是Google Play Services,因此它们不能用于测试。
如果是通过命令行创建模拟器,目标的名称就是“Google Inc:Google APIs:X”,其中的X指示API的版本。如果在IDE(例如Eclipse)中创建模拟器,目标的命名约定也是类似的:Google APIs(Google Inc.) -X,其中X指示API的版本。

2.满足清单要求

获得了有效的API密钥之后,需要在我们的AndroidManifest.xml文件包括该密钥。下面的代码块必须放在元素内:

        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="YOUR_KEY_HERE" />

此外,Maps v2有一项设备要求,即至少要具备OpenGL ES2.0。我们可以将此要求作为设备特性提出,方法是在元素内添加如下代码块,通常是放在元素的上方:

<!-- Maps v2 requires OpenGL ES 2.0 -->
    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />

最后,Maps v2 需要一组权限才能与Google Play Services通信以及渲染地图图块。因此,我们必须在元素内再添加一个代码块,通常是放在元素的上方:

<!-- 显示地图所需要的权限 -->
    <uses-permission android
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用d3.js获得地图位置名称的代码示例: ```javascript // 创建一个地图投影 var projection = d3.geoMercator() .scale(120) .translate([width / 2, height / 2]); // 创建一个地理路径生成器 var path = d3.geoPath() .projection(projection); // 加载地图数据 d3.json("path/to/map/data.json", function(error, map) { if (error) throw error; // 将地图绘制到SVG上 svg.selectAll("path") .data(map.features) .enter().append("path") .attr("d", path) .attr("fill", "#ccc") .attr("stroke", "#fff") .attr("stroke-width", 0.5); // 添加鼠标移动事件,显示位置名称 svg.on("mousemove", function() { var mouse = d3.mouse(this); var point = projection.invert(mouse); var location = findLocation(map, point); tooltip.style("display", "block") .style("left", (d3.event.pageX + 10) + "px") .style("top", (d3.event.pageY - 25) + "px") .text(location); }); // 添加鼠标移出事件,隐藏位置名称 svg.on("mouseout", function() { tooltip.style("display", "none"); }); // 在SVG上添加提示框元素 var tooltip = d3.select("body").append("div") .attr("class", "tooltip"); }); // 根据坐标点查找位置名称 function findLocation(map, point) { for (var i = 0; i < map.features.length; i++) { var feature = map.features[i]; if (d3.geoContains(feature, point)) { return feature.properties.name; } } return ""; } ``` 此代码将创建一个地图投影,并使用d3.geoPath()生成器将地图绘制到SVG上。然后,添加了鼠标移动和移出事件来显示和隐藏位置名称。最后,使用findLocation()函数在地图数据中查找位置名称。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值