Android版本百度地图开发(二)——图层和检索

Android 百度地图POI检索之显示单次搜索的所有结果 最近在研究百度地图API,通过POI搜索时发现每次只能显示10个覆盖物,强迫症不能忍啊有木有,官方demo并不能满足我的需求,研究了一段时间实现了显示所有覆盖物的功能。 来,看图(= =这回要犯密集恐惧症了) 下面来看看代码是如何实现的 map.xml 很简单,就一个MapView控件 <RelativeLayout xmlns:android=" 阅读详情

通过上面一章我们已经了解到如何进行基本的地图应用开发,接下来的都是属于应用方面的技巧。本章主要讲解图层和检索服务。

2 地图图层

图层包括底图、交通图和卫星图。我们正常情况下看到的就是底图,可以通过mapView控制显示交通图和卫星图。

		// 显示交通图
		mMapView.setTraffic(true);
		
		// 显示卫星图
//		mMapView.setSatellite(true);

3 检索服务

3.1 搜索框架

搜索包括位置检索、周边检索、范围检索、公交检索、驾乘检索、步行检索、短串分享,需要创建一个MKSearch对象进行搜索。

我们首先创建一个搜索类:

package com.demo.baidumap;

import com.baidu.mapapi.search.MKAddrInfo;
import com.baidu.mapapi.search.MKBusLineResult;
import com.baidu.mapapi.search.MKDrivingRouteResult;
import com.baidu.mapapi.search.MKPoiResult;
import com.baidu.mapapi.search.MKSearchListener;
import com.baidu.mapapi.search.MKShareUrlResult;
import com.baidu.mapapi.search.MKSuggestionResult;
import com.baidu.mapapi.search.MKTransitRouteResult;
import com.baidu.mapapi.search.MKWalkingRouteResult;

public class MySearchListener implements MKSearchListener {

	@Override
	public void onGetAddrResult(MKAddrInfo arg0, int arg1) {
		// TODO Auto-generated method stub

	}

	@Override
	public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {
		// TODO Auto-generated method stub

	}

	@Override
	public void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) {
		// TODO Auto-generated method stub

	}

	@Override
	public void onGetPoiDetailSearchResult(int arg0, int arg1) {
		// TODO Auto-generated method stub

	}

	@Override
	public void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) {
		// TODO Auto-generated method stub

	}

	@Override
	public void onGetShareUrlResult(MKShareUrlResult arg0, int arg1, int arg2) {
		// TODO Auto-generated method stub

	}

	@Override
	public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {
		// TODO Auto-generated method stub

	}

	@Override
	public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {
		// TODO Auto-generated method stub

	}

	@Override
	public void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) {
		// TODO Auto-generated method stub

	}

}

在我们的Activity中定义一个成员变量:

private MKSearch mMKSearch = null;

在Activity的onCreate中初始化MKSearch变量:

		// 初始化搜索变量
		mMKSearch = new MKSearch();
		mMKSearch.init(mBMapMan, new MySearchListener());

根据文档的说明,还需要在Activity的onDestroy中销毁搜索变量:

		mMKSearch.destory();

这样,我们就可以在需要的地方使用搜索了:


3.2 兴趣点搜索

兴趣点的搜索主要还是集中于输入的关键字上:

3.2.1 范围检索

范围检索顾名思义是给定一个范围和关键字的搜索,这里的范围是通过两个点确定的矩形区域。代码是这样的:

				// 北京西站
				GeoPoint ptLB = new GeoPoint( (int)(39.901375 * 1E6),(int)(116.329099 * 1E6)); 
				// 北京北站
				GeoPoint ptRT = new GeoPoint( (int)(39.949404 * 1E6),(int)(116.360719 * 1E6));
				mMKSearch.poiSearchInbounds("KFC", ptLB, ptRT);

3.2.2 城市搜索

城市搜索需要输入城市名和搜索关键字:

				mMKSearch.poiSearchInCity("北京", "KFC"); 

3.2.3 周边搜索

周边搜索需要输入关键字、搜索点和搜索半径:

mMKSearch.poiSearchNearBy("KFC", new GeoPoint((int) (39.915 * 1E6), (int) (116.404 * 1E6)), 5000);


3.2.4 搜索结果

搜索结果是异步回调,对于兴趣点搜索保存在onGetPoiResult中:

	@Override
	public void onGetPoiResult(MKPoiResult res, int type, int error) {
		// 错误号可参考MKEvent中的定义
		if (error == MKEvent.ERROR_RESULT_NOT_FOUND) {
			System.out.println("抱歉,未找到结果");
			return;
		} else if (error != 0 || res == null) {
			System.out.println("搜索出错啦..");
			return;
		}
		// 将poi结果显示到地图上
		PoiOverlay poiOverlay = new PoiOverlay(activity, mapView);
		poiOverlay.setData(res.getAllPoi());
		mapView.getOverlays().clear();
		mapView.getOverlays().add(poiOverlay);
		mapView.refresh();
		// 当ePoiType为2(公交线路)或4(地铁线路)时, poi坐标为空
		for (MKPoiInfo info : res.getAllPoi()) {
			if (info.pt != null) {
				mapView.getController().animateTo(info.pt);
				break;
			}
		}
	}


3.3 地址信息查询

3.3.1 根据坐标查询地址

mMKSearch.reverseGeocode(new GeoPoint(31240252, 121496944)); // 通过坐标查询地址

3.3.2 根据地址查询坐标

mMKSearch.geocode("东方明珠", "上海");// 通过地址查询坐标

3.3.3 回调处理

	@Override
	public void onGetAddrResult(MKAddrInfo res, int error) {
		if (error != 0) {
			String str = String.format("错误号:%d", error);
			Toast.makeText(activity, str, Toast.LENGTH_LONG).show();
			return;
		}
		//地图移动到该点
		mapView.getController().animateTo(res.geoPt);
		
		if (res.type == MKAddrInfo.MK_GEOCODE) {
			//地理编码:通过地址检索坐标点
			String strInfo = String.format("纬度:%f 经度:%f", res.geoPt.getLatitudeE6()/1e6, res.geoPt.getLongitudeE6()/1e6);
			Toast.makeText(activity, strInfo, Toast.LENGTH_LONG).show();
		}
		if (res.type == MKAddrInfo.MK_REVERSEGEOCODE) {
			//反地理编码:通过坐标点检索详细地址及周边poi
			String strInfo = res.strAddr;
			Toast.makeText(activity, strInfo, Toast.LENGTH_LONG).show();
		}
	}

3.4 在线建议查询

在线建议是指用户输入一个关键字,系统自动匹配的搜索结果列表。

3.4.1 搜索

搜索执行代码:

				mMKSearch.suggestionSearch("东方明珠", "上海");

3.4.2 搜索结果

搜索结果处理使用:

	@Override
	public void onGetSuggestionResult(MKSuggestionResult res, int err) {
		if (err!= 0 || res == null) {  
            Toast.makeText(activity, "抱歉,未找到结果", Toast.LENGTH_LONG).show();   
            return;  
        }  
        int nSize = res.getSuggestionNum();  
        for (int i = 0; i <nSize; i++){  
           System.out.println(res.getSuggestion(i).city + res.getSuggestion(i).key);  
        }  
	}

3.5 短串分享

短串是指搜索结果对应一个很短的链接,用户分享这个链接后别人可以打开这个链接访问搜索结果。目前百度地图开放的是“POI点分享”和“反Geo分享”。

3.5.1 POI点分享

根据POI结果的uid,可以生成一个短链接用于分享,由于目前我们尚未讲到POI,所以这里仅给出一个示例,后续讲解如何得到一个POI:

				MKPoiInfo poi = new MKPoiInfo();
				mMKSearch.poiDetailShareURLSearch(poi.uid);

3.5.2 反Geo点分享

				/*
				 * 发起地址信息短串请求,一个位置的地理信息一可以通过GeoCode/反GeoCode搜索获得. mSearch 为
				 * MKSearch象, 参数pt为要分享的位置的经纬度坐标
				 * ,name和addr为百度地图客户端在展示该位置时显示的名称和地址.
				 */
				GeoPoint pt = new GeoPoint((int) (31.240252 * 1E6),
						(int) (121.496944 * 1E6));
				String name = "东方明珠";
				String addr = "世纪大道1号";
				mMKSearch.poiRGCShareURLSearch(pt, name, addr);

3.5.3 搜索结果

	@Override
	public void onGetShareUrlResult(MKShareUrlResult result, int type, int error) {
		if (error != 0) {
			// 错误码不为0,表示搜索错误
			return;
		}
		if (type == MKEvent.MKEVENT_POIDETAILSHAREURL) {
			// 返回poi详情短串
			Log.d("baidumapsdk", result.url);
		}
		if (type == MKEvent.MKEVENT_POIRGCSHAREURL) {
			// 返回地址信息短串
			Log.d("baidumapsdk", result.url);
		}
	}


Android百度地图之地图覆盖物(结合百度地图API) 在上一篇博客中,我为大家介绍了百度地图的定位功能的使用方法,接下来,我将为大家 阅读详情

相关推荐

Android百度地图应用之图层展示

主要为大家详细介绍了Android百度地图应用之图层展示,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

Android 安卓 百度地图

这次面试问的还是还是有难度的,要求当场写代码并且运行,也是很考察面试者写代码因为Android知识体系比较庞大和复杂的,涉及到计算机知识领域的方方面面。在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。

2401_84009929的博客 973

基于FT2232集成USB直接实现XilinxJTAG和UART串口

使用“program_ftdi -write -ftdi FT2232H -serial 0ABC01 -vendor "my vendor co" -board "my board" -desc "my product desc"”命令进行数据烧写,该命令会将FT2232的通道A配置为JTAG,其余通道配置为UART,serial长度为6~12个字符(vivado扫描JTAG时显示的cable序列号,同一台PC能够同时连接多个不同序列号的cable仿真器)。图 2 program_ftdi的帮助信息。

luguodeyo的博客 1万+

百度地图开发(Android)

地图在很多应用中都会用到,官方的开发者文档已经给出了地图开发的主要流程了,但是主要是用在activity中,如果要在fragment中使用地图,还是有一些小坑要注意一下。这里详细记录了fragment中地图开发的流程。 1.配置 2.地图显示 首先在fragment的布局xml文件中添加地图控件 &amp;amp;amp;amp;amp;lt;com.baidu.mapapi.map.MapView android:id=&amp;amp;amp;amp;quot;@+..

小王同学的博客 1973

DELL Precision T7920加装显卡遇到的坑

文章目录DELL Precision T7920加装显卡服务器原有配置介绍选购过程确认型号确认PCIE x16插槽确认电源功率和电源线安装过程电源模组线不够多单装一个3090显卡尺寸问题加装上1080Ti非常重要!官方文档 DELL Precision T7920加装显卡 实验室由于显卡计算能力不够,以及显卡显存不够,请老师花了大价钱购入了两张GeForce 3090显卡。老师赛高!记录一下这次加装显卡过程中学到的一些知识。 服务器原有配置介绍 服务器原有一张1080Ti显卡,一个16核Xeon CPU。

weixin_45520982的博客 1万+

使用电荷放大器处理压电加速度计输出

电阻器 R p模拟传感器的绝缘电阻,为产生的电荷创建泄漏路径。在此图中,顶部波形显示传感器产生的电荷,而底部波形显示电荷放大器的输出。这需要具有大输入阻抗的放大级,以防止产生的电荷通过与传感元件并联的放大器的输入阻抗泄漏。换句话说,电荷放大器补偿传感器产生的电荷 q p ,反馈电容器 C F中具有相反极性的等量电荷。因此,任何与传感器并联的绝缘电阻,如电缆的绝缘电阻或传感器的漏电电阻Rp,都不能流过电流。漂移是指电荷放大器输出在一段时间内发生的变化,而不是由被测物理参数的变化(我们讨论的加速度)引起的。

weixin_45260069的博客 3905

安卓:百度地图开发(超详细)

百度地图SDK是一套供开发者使用的软件开发工具包(SDK),用于在Android应用程序中集成和使用百度地图功能。通过使用百度地图SDK,开发者可以实现在自己的应用中显示地图、获取定位信息、进行搜索、导航等功能。百度地图SDK提供了许多常用的类和方法,用于实现各种地图相关功能。是百度地图SDK提供的一个控件类,用于在应用程序的界面上显示地图。它是一个自定义的 View,可以与 BaiduMap 类关联,实现地图的显示和交互功能。

A125679880的博客 6597

售货机非现金支付开发指南:MDB协议下VPOS刷卡器的那些坑

本文深入探讨了MDB协议下非现金支付设备的开发实践,重点解析了NAYAX VPOS刷卡器的集成难点与解决方案。从RS232通信参数配置到Always idle功能实现,提供了一套完整的售货机支付系统开发指南,帮助开发者规避常见陷阱,提升设备兼容性与交易稳定性。

weixin_29258297的博客 134

仿百度地图街景实现

使用过百度地图的同学知道,它有个街景功能,可以看到许多地方的实景。这里就其街景内容的实现,进行下学习。

魔法小黑屋 1万+

SpyGlass CDC实战:如何用sgdc约束文件解决跨时钟域报错(附常见错误排查)

本文详细介绍了如何使用SpyGlass CDC工具链中的sgdc约束文件解决跨时钟域(CDC)报错问题。从基础约束文件架构到复杂场景调试,涵盖了时钟域定义、复位信号约束、Waiver策略等关键技巧,并附有常见错误排查方法,帮助工程师高效处理CDC验证挑战。

loss4bartender的博客 1148

多模态RAG实战:为LLM装上视觉之眼,实现图文混合文档智能问答

检索增强生成(RAG)技术通过结合外部知识库,有效缓解了大语言模型(LLM)的幻觉问题,并扩展了其知识边界。其核心原理是将文档切分、向量化后存入向量数据库,在问答时通过语义检索召回相关上下文,辅助LLM生成更精准的答案。这项技术的核心价值在于,它为大模型应用提供了一种低成本、高效率的知识注入与实时更新方案,广泛应用于智能客服、知识库问答、文档分析等场景。随着应用深入,纯文本RAG在处理产品手册、学术论文、设计图纸等富含视觉信息的文档时面临瓶颈。本文聚焦的**多模态RAG**和**视觉理解**技术,正是为了解

weixin_30698527的博客 722

android百度地图清除指定覆盖物,基于百度地图API删除指定的覆盖物

引用百度地图API过程中,想删除指定的覆盖物,有很多很多的坑。什么clearOverlay()方法,直接给我所有覆盖物都给干没了。还有网上介绍的removeOverlay(对象),这种又介绍不清楚,然后自己经过实践,最终解决了。直接上图、上代码。查询所有地图的覆盖物代码:// 获取所有的地图覆盖物var allOverlay = map.getOverlays();console.log(allO...

weixin_31915631的博客 947

SST专题(2-4)MMC-SST 输入级的环流分析

本文分析了模块化多电平换流器(iMMC-SST)的输入级等效电路、子模块电容电压波动特性及环流抑制机理。研究表明:1)子模块电容电压波动包含基频和二倍频分量,与传统换流器相比波动幅值更大;2)环流主要由子模块电容电压波动在桥臂电感上激发的偶次谐波电流构成,呈频率越高幅值越小的特性;3)可通过增大桥臂电感或采用调制策略叠加抑制电压分量来有效控制环流。研究结果为MMC系统设计提供了理论依据。

嵌入式老牛的博客 585

Android探索之百度地图开发

文章目录前言地图图层介绍地图覆盖物介绍地图事件POI检索公交线路查询线路规划地理编码 前言 之前自己在做一个小项目时涉及到了百度地图的一些内容,当时因为对百度地图的开发流程不是很了解,于是就查阅了一下官方文档,然后阅读别人的博客来学习,但是发现这里面并没有我想要的东西,官方文档也说得不太详细,模棱两可。所以后面自己摸索了一下,也将自己的学习所得分享出来。 地图图层介绍 那么直接进入正题吧,关于百度...

。。。 4632

uniapp [全端兼容] - 实现接入集成高德地图搜索地址及选择位置功能,搜索框检索选择地点并返回经纬度及详细省市区县街道地址,用户搜索历史及清空历史记录,选择地址自动获取周边位置列表/地图移动选点

uni-app,高德地图,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,Uniapp高德地图,在地图上选择或搜索指定地点,打开地图选择位置,关联地址搜索,输入地址返回附近地址列表,uniApp高德地图地址搜索,搜索框历史记录,关键字搜索,周边查询,搜索位置,uniapp对接高德实现搜索出现地址以及保存搜索记录,集成高德地图,实现精准位置选点功能,获取当前定位城市,如何实现搜索功能,获取省份城市区街道详细地址经纬度,移动选点标记位置,在地图上进行选择位置选点、搜索

🏆 前端领域优质创作者 1万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Android百度地图Poi检索开发总结

Android百度地图Poi检索开发总结本文对百度地图显示后的各种功能开发做详细总结! 之前已经有很详细的介绍了:http://blog.youkuaiyun.com/wenzhi20102321/article/details/5

wenzhi的博客 1万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

百度地图 Android SDK - 检索功能使用的简单示例

百度地图 SDK 不仅为广大开发者提供了炫酷的地图展示效果、丰富的覆盖物图层,更为广大开发者提供了多种 LBS 检索的能力。通过这些接口,开发者可以轻松的访问百度的 LBS 数据,丰富自己的移动端地图应用。 目前百度地图 SDK 为开发者提供的检索服务有: POI 检索:可以检索百度 POI 数据信息; 线路规划:利用百度的引擎帮助开发者规划线路; 在线建议检索、短链接分享、地理编码等等.

凌晨零点零零 1万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Android百度地图开发POI(三)

百度地图开发POI开发

SunnyTime的程序猿之路 2619

Android开发之百度地图显示当前定位

根据百度开发文档实现了简单地图显示功能,本篇文章增加了显示当前定位的功能。

weixin_48946237的博客 3507

浅谈百度地图的简单开发再续前缘之公交,地铁路线检索查询(六)

关于百度地图的简单开发前段时间,写过一个小系列的博客关于百度地图的基本地图,定位,全景,导航等功能做了简单的介绍.从今天开始又将准备一期有关百度地图的POI检索的等一列查询功能,如城市检索,周边检索,区域检索;公交地铁查询;线路规划检索等.今天首先来第一波就是基于百度地图的API实现公交地铁线路查询.那么就开始这次再续前缘之第一篇公交地铁线路查询.    公交地铁线路查询可以说在生活当中非常的实

Mikyou的专栏 7006

Android百度地图(二):百度地图sdk显示位置点、图层绘制

Android百度地图(一):百度地图定位sdk 类方法参数、定位原理详细介绍 Android百度地图(三):百度地图画运动轨迹及图层点击事件处理 Android百度地图(四):百度地图运动轨迹纠偏、去噪、绑路之百度鹰眼 Android百度地图(五):百度地图鹰眼sdk监控进出地理围栏(区域) Android百度地图(六):百度地图POI检索,行政区边界、公交、线路规划查询

u012693479的博客 2677

安卓SDK——百度地图(显示定位)

接上百度地图(检索功能) https://blog.youkuaiyun.com/nishigesb123/article/details/89670139 依旧

旧日灯塔 1129

百度地图开发(一)——概述

一、简介 百度地图移动版API是一套基于移动互联网设备的应用程序接口,支持iOS/Android平台。 通过该接口,您可以轻松访问百度服务和数据,构建功能丰富、交互性强的地图应用程序。百度地图移动版API不仅包含构建地图的基本接口,还提供了诸如定位服务、本地搜索、路线规划等数据服务,你可以根据自己的需要进行选择。

kp_liu的专栏 1443
上一篇: Android版本百度地图开发(一)——创建应用
下一篇: Android版本百度地图开发(三)——路线规划
Soloman
博客等级 码龄25年 171粉丝 159原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值