050 Android 百度地图的使用
1.初始化地图
//初始化地图
private void initMapView() {
//1.获取地图控件引用
mMapView = findViewById(R.id.bmapView);
mBaidumap = mMapView.getMap();
//2.设置初始定位点在上海
GEO_SHANGHAI = new LatLng(31.227, 121.481);
GEO_BEIJING = new LatLng(39.963175, 116.400244);
mBaidumap.setMapStatus(MapStatusUpdateFactory.newLatLng(GEO_SHANGHAI));
//3.设置地图比例尺,14级。比例尺为1000m(百度地图暂时只能放大到100m)
mBaidumap.setMapStatus(MapStatusUpdateFactory.zoomTo(13)); }
2.用户输入地址获取经纬度
地理编码是地址信息和地理坐标之间的相互转换。可分为正地理编码(地址信息转换为地理坐标)和逆地理编码(地理坐标转换为地址信息)。
逆地理编码服务通过地面某个地物的地理坐标值检索到该地物所在的行政区划、所处街道、以及最匹配的标准地址信息。通过丰富的标准地址库中的数据,帮助用户在进行移动端查询、商业分析、规划分析等领域创造无限价值。 推荐与定位服务配合使用,通过定位获得的地理坐标获取详细的地址信息。
package com.example.lucky.zjzyhq3; import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast; import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.search.core.SearchResult;
import com.baidu.mapapi.search.geocode.GeoCodeOption;
import com.baidu.mapapi.search.geocode.GeoCodeResult;
import com.baidu.mapapi.search.geocode.GeoCoder;
import com.baidu.mapapi.search.geocode.OnGetGeoCoderResultListener;
import com.baidu.mapapi.search.geocode.ReverseGeoCodeResult;
import com.bin.david.form.core.SmartTable;
import com.bin.david.form.data.table.MapTableData; public class ShowDataActivity extends AppCompatActivity {
SmartTable table;
Button btSD_exit;
Button btSD_query;
GeoCoder mSearch = null; // 搜索模块,也可去掉地图模块独立使用
BaiduMap mBaidumap;
MapView mMapView = null;
LatLng GEO_SHANGHAI;
LatLng GEO_BEIJING;
EditText etSD_queryaddress;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show_data);
//1.获取从MyFragment_basicMessage中传过来的值
Intent intent=getIntent();
String queryResultStr=intent.getStringExtra("queryresult"); table =findViewById(R.id.table);
btSD_exit=findViewById(R.id.btSD_exit);
btSD_query=findViewById(R.id.btSD_query);
etSD_queryaddress=findViewById(R.id.etSD_queryaddress);
if(queryResultStr.equals("[]")){
Toast.makeText(ShowDataActivity.this,"无匹配查询结果",Toast.LENGTH_LONG).show();
}else {
MapTableData tableData = MapTableData.create("表格名",JsonHelper.jsonToMapList(queryResultStr));
table.setTableData(tableData);
} //2.初始化地图
initMapView();
//3.初始化搜索模块,注册事件监听,创建地理编码检索实例
mSearch = GeoCoder.newInstance();
mSearch.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener() {
//正地理编码(地址转坐标)
@Override
public void onGetGeoCodeResult(GeoCodeResult geoCodeResult) {
if (geoCodeResult == null || geoCodeResult.error != SearchResult.ERRORNO.NO_ERROR) {
Toast.makeText(ShowDataActivity.this, "抱歉,未能找到结果", Toast.LENGTH_LONG)
.show();
return;
}
mBaidumap.clear();
mBaidumap.addOverlay(new MarkerOptions().position(geoCodeResult.getLocation())
.icon(BitmapDescriptorFactory
.fromResource(R.mipmap.icon_gcoding)));
//加上覆盖物
mBaidumap.setMapStatus(MapStatusUpdateFactory.newLatLng(geoCodeResult
.getLocation()));
//定位
String strInfo = String.format("纬度:%f 经度:%f",
geoCodeResult.getLocation().latitude, geoCodeResult.getLocation().longitude);
Toast.makeText(ShowDataActivity.this, strInfo, Toast.LENGTH_LONG).show();
} //逆地理编码(即坐标转地址)
@Override
public void onGetReverseGeoCodeResult(ReverseGeoCodeResult reverseGeoCodeResult) {
if (reverseGeoCodeResult == null || reverseGeoCodeResult.error != SearchResult.ERRORNO.NO_ERROR) {
Toast.makeText(ShowDataActivity.this, "抱歉,未能找到结果", Toast.LENGTH_LONG)
.show();
return;
}
mBaidumap.clear();
mBaidumap.addOverlay(new MarkerOptions().position(reverseGeoCodeResult.getLocation())
.icon(BitmapDescriptorFactory
.fromResource(R.mipmap.icon_gcoding)));
//加上覆盖物
mBaidumap.setMapStatus(MapStatusUpdateFactory.newLatLng(reverseGeoCodeResult
.getLocation()));
//定位
Toast.makeText(ShowDataActivity.this, reverseGeoCodeResult.getAddress(),
Toast.LENGTH_LONG).show();
//result保存翻地理编码的结果 坐标-->城市
}
}); btSD_exit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent1=new Intent(ShowDataActivity.this,MainScreenActivity.class);
startActivity(intent1);
}
}); btSD_query.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//获取用户输入的地址
String[] queryAddress=etSD_queryaddress.getText().toString().split("_");
if(!queryAddress[0].equals("")){
//设置GeoCodeOption,发起geoCode检索
mSearch.geocode(new GeoCodeOption()
.city(queryAddress[0])
.address(queryAddress[1]));
} }
});
System.out.println(queryResultStr);
} //初始化地图
private void initMapView() {
//1.获取地图控件引用
mMapView = findViewById(R.id.bmapView);
mBaidumap = mMapView.getMap();
//2.设置初始定位点在上海
GEO_SHANGHAI = new LatLng(31.227, 121.481);
GEO_BEIJING = new LatLng(39.963175, 116.400244);
mBaidumap.setMapStatus(MapStatusUpdateFactory.newLatLng(GEO_SHANGHAI));
//3.设置地图比例尺,14级。比例尺为1000m(百度地图暂时只能放大到100m)
mBaidumap.setMapStatus(MapStatusUpdateFactory.zoomTo(13)); }
}
3.批量放置标记点
(1)标记点介绍
点标记用来在地图上标记任何位置,例如用户位置、车辆位置、店铺位置等一切带有位置属性的事物。
(2)java代码
//定义Maker坐标点 LatLng point = new LatLng(39.963175, 116.400244);
LatLng point1 = new LatLng(39.967175, 116.402244);
LatLng point2 = new LatLng(39.965175, 116.404244);
LatLng point3 = new LatLng(39.969175, 116.408244);
LatLng point4 = new LatLng(39.960175, 116.406244); ArrayList<LatLng> pointList=new ArrayList<>();
pointList.add(point);
pointList.add(point1);
pointList.add(point2);
pointList.add(point3);
pointList.add(point4); for (int i = 0; i <pointList.size() ; i++) {
//构建Marker图标
BitmapDescriptor bitmap = BitmapDescriptorFactory
.fromResource(R.mipmap.icon_gcoding);
//构建MarkerOption,用于在地图上添加Marker
OverlayOptions option = new MarkerOptions()
.position(pointList.get(i))
.icon(bitmap);
//在地图上添加Marker,并显示
mBaidumap.addOverlay(option);
}
(3)效果图
参考文献:
https://blog.csdn.net/u013815546/article/details/45193133(android 百度地图api 地理编码&反地理编码)
https://blog.csdn.net/xiaobijia/article/details/50349865(android 百度地图定位总结)
http://lbsyun.baidu.com/index.php?title=androidsdk/guide/search/geo(百度地图的开发者指南)
050 Android 百度地图的使用的更多相关文章
- Android 百度地图开发(一)--- 申请API Key和在项目中显示百度地图
标签: Android百度地图API Key 分类: Android 百度地图开发(2) 最近自己想研究下地图,本来想研究google Map,但是申请API key比较坑爹,于是从百度地 ...
- Android 百度地图 SDK v3.0.0 (四) 引入离线地图功能
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37758097 一直觉得地图应用支持离线地图很重要啊,我等移动2G屌丝,流量不易, ...
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37737213 上篇博客已经实现了地图的定位以及结合了方向传感器用户路痴定位方向, ...
- Android 百度地图API(01)_开发环境 HelloBaiduMap
转载于:http://blog.csdn.net/lmj623565791/article/details/37729091 转载于:http://blog.csdn.net/crazy1235/ar ...
- Android 百度地图 SDK v3.0.0 (三) 加入覆盖Marker与InfoWindow使用
转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/37737213 上篇博客已经实现了地图的定位以及结合了方向传感器用户路痴定位方向, ...
- Android百度地图相关内容汇总
Android百度地图知识讲解 1.百度地图开发环境搭建 http://www.apkbus.com/android-116050-1-1.html 2.Android百度地图系列教程 h ...
- android 百度地图开发实例(转载)
因为在我的寝室google基站定位返回的数据总是为空,所以换成百度地图,发现百度地图开发起来非常方便,提供了许多有用的工具,地图的加载速度也比google地图快许多. 为了加强记忆,写一点androi ...
- Android百度地图(二)结合方向传感器我们自己定位哪里走
Android百度地图(二)结合方向传感器我们自己定位哪里走 本文代码在http://blog.csdn.net/xyzz609/article/details/51943556的基础上进一步改动.有 ...
- Android 百度地图 简单实现--- 美食搜索
Android 百度地图 简单实现--- 美食 依赖包: 加入 Android 百度依赖包: 1 key: <!-- 开发人员 key --> <meta-dat ...
随机推荐
- Queue Pair in RDMA (zz)
Queue Pair in RDMA 首页分类标签留言关于订阅2018-03-21 | 分类 Network | 标签 RDMA 一个CA(Channel Adapter)可以包含多个QP,QP相当 ...
- (转)hadoop 常规错误问题(一)
转至:http://www.freeoa.net/osuport/db/my-hbase-usage-problem-sets_2979.html 本文是我在使用Hbase的过程碰到的一些问题和相应的 ...
- 在被open(url)打开的子页面往父页面传值时候这样
function fnqd(zj,rwmc){ window.parent.opener.document.getElementById("jcrwModel_sjrwzj").v ...
- javaSE集合---进度2
一.集合框架 1.特点 对象封装数据,对象多了也需要存储,集合用于存储对象. 对象的个数确定可以使用数组,但是不确定的话,可以用集合,因为集合是可变长度的. 2.集合和数组的区别 数组是固定长度的,集 ...
- this和super的用法
this关键字的使用: 1.成员变量和局部变量重名时,在方法中调用成员变量,需要使用this.调用. 2.把这个类自己的实例化对象当做参数进行传递时,使用this. 3.内部类中,调用外部类的方法或变 ...
- php手记之02-tp5请求参数读取三种方式
01-[推荐方式] 当浏览器向Web服务器发出请求时,它向服务器传递了一个数据块,也就是请求信息.在Thinkphp5.1中,获取请求对象数据,是由think\Request类负责,在很多场合下并不需 ...
- java Calendar 小时值得到24进制格式
Calendar cal = Calendar.getInstance(); cal.get(Calendar.HOUR_OF_DAY)
- python pip 安装插件权限问题及 指定pip国内镜像源
- vue elementUI 表单校验(多层嵌套)
<template> <el-form :model="formData" :rules="formRule" ref="formD ...
- PHP中的符号 ->、=> 和 :: 分别表示什么意思?
php新手经常碰到的问题,->.=> 和 :: 这三个家伙是什么分别都是做什么的啊!看着就很晕. 没关系,下面我们做一下详细的解释,如果你有C++,Perl基础,你会发现这些家伙和他们里面 ...