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 ...
随机推荐
- Matlab学习——求解微分方程(组)
介绍: 1.在 Matlab 中,用大写字母 D 表示导数,Dy 表示 y 关于自变量的一阶导数,D2y 表示 y 关于自变量的二阶导数,依此类推.函数 dsolve 用来解决常微分方程(组)的求解问 ...
- 有没有一个工具可以帮助查找python的bug和进行静态的代码分析?
答:PyChecker是一个python代码的静态分析工具,它可以帮助查找python代码的bug, 会对代码的复杂度和格式提出警告 Pylint是另外一个工具可以进行codingstandard检查
- Python接口自动化测试(一)什么是接口?
接口:API(Application Programming Interface)即应用程序接口.你可以认为API是一个软件组件,或是一个Web服务与外界进行交互的接口. 1.从功能层面上 可以将接口 ...
- Anriod手机抓包
1. 下载Fiddler http://fiddler2.com/ 2. 开启Fiddler的远程连接,Fiddler 主菜单 Tools -> Fiddler Options--> Co ...
- jquery报变量没定义错误的原因
该变量定义的范围:不在使用的方法中:
- php手记之01-tp5框架安装
1.1.介绍 在web领域,PHP是所有编程语言中比较受欢迎的一门语言! PHP已经诞生出几十种编程框架!但国内最热门和使用率最好的框架有Thinkphp和Laravel这两款PHP框架! 1.2.为 ...
- STM32F429中LTDC的DMA2D加速
液晶屏的时序问题?每个液晶屏的时序都不一样,但总体上是类似的.如下图: VDEN: 数据使能信号.HSYNC: 每一行扫描的起始点, 在扫描过程中, 不会管上一行扫描有没有结束, 当出现 ...
- IOS和Andriod手机浏览器内核
手机浏览器是基于什么内核? 如果细分的话,目前全球仅有四个独立的浏览器内核: 1. 微软IE的Trident 2. 网景最初研发后卖给Mozilla基金会并演化成火狐的Gecko 3. KDE的开 ...
- python 设计模式之迭代器模式
#写在前面 真的有一大把年纪了,回头看看, 明明也很努力,却发现自己穷的一无所有,昨夜的事更是让我眼泪止不住的流,眼睛也肿了,委屈的愣是说不出一个字.前面荆棘丛生,身后已无退路,生活一地鸡毛,糟糕的一 ...
- java udp通信
package net.kkxm.kms; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.n ...