今天把高德地图android sdk搜索附近的功能搞定了。

前面的准备,请看我之前的博客http://blog.csdn.net/wuyt2008/article/details/50774017

和定位一样,引入jar,AndroidManifest.xml和定位的一样,没有需要修改的地方。改的多的是Java插件。

原java示例代码中,

query = new PoiSearch.Query("", deepType, "北京市");
poiSearch.setBound(new SearchBound(lp, 2000, true));
poiSearch.setOnPoiSearchListener(this);

这3处在反编译后显示,这几个都是在一个类下面的,而不是自身是一个类,尝试后发现都无法直接在unity中调用,都需要转一下。

这里,不知道是高德的代码不规范,还是unity的方法不给力,还是我的水平太烂,总之,反编译以后显示在类下面的枚举,类,接口都要自己编写java转一下。

另外,这里貌似java中的队列和unity中的队列似乎不太一样,为了省事,也用java转了一下。

新建一个java工程

转方法的类

package com.nsh.amapHelper;import com.amap.api.services.core.LatLonPoint;
import com.amap.api.services.poisearch.PoiSearch;public class AMapSearchHelper {public PoiSearch.Query getPoiSearch(String keyword,String searchType,String cityCode ){PoiSearch.Query query = new PoiSearch.Query(keyword, searchType, cityCode) ;return query;}public PoiSearch.SearchBound getBound(LatLonPoint lp,int radiusInMeters,boolean isDistanceSort){PoiSearch.SearchBound bound = new PoiSearch.SearchBound(lp,radiusInMeters,isDistanceSort);return bound;}
}

转接口的类

package com.nsh.amapHelper;import com.amap.api.services.poisearch.PoiSearch.OnPoiSearchListener;public abstract interface AMapListenerHelper extends  OnPoiSearchListener{}

重新解析结果的类,出口经纬度不一定有。

package com.nsh.amapHelper;import java.util.ArrayList;import com.amap.api.services.core.PoiItem;
import com.amap.api.services.poisearch.PoiResult;public class AMapPoiResultHelper {private PoiResult poiResult;private ArrayList<PoiItem> poiItems;public void setPoiResult(PoiResult result){poiResult = result;poiItems = poiResult.getPois();}public int poiItemNumber(){if (poiItems != null && poiItems.size() > 0){return poiItems.size();}else{return 0;}}public String poinItemInfo(int i){String strReturn= "";if(i>-1&&i<poiItems.size()){
//          strReturn = strReturn+"||行政区划代码>"+poiItems.get(i).getAdCode();
//          strReturn = strReturn+"||行政区划名称>"+poiItems.get(i).getAdName();
//          strReturn = strReturn+"||所在商圈>"+poiItems.get(i).getBusinessArea();
//          strReturn = strReturn+"||城市编码>"+poiItems.get(i).getCityCode();
//          strReturn = strReturn+"||getDirection>"+poiItems.get(i).getDirection();
//          strReturn = strReturn+"||距离中心点的距离>"+poiItems.get(i).getDistance();
//          strReturn = strReturn+"||电子邮件>"+poiItems.get(i).getEmail();
//          strReturn = strReturn+"||停车场类型>"+poiItems.get(i).getParkingType();
//          strReturn = strReturn+"||唯一标识>"+poiItems.get(i).getPoiId();
//          strReturn = strReturn+"||邮编>"+poiItems.get(i).getPostcode();
//          strReturn = strReturn+"||行政区编码>"+poiItems.get(i).getProvinceCode();
//          strReturn = strReturn+"||政区名称>"+poiItems.get(i).getProvinceName();
//          strReturn = strReturn+"||地址>"+poiItems.get(i).getSnippet();
//          strReturn = strReturn+"||电话>"+poiItems.get(i).getTel();strReturn = strReturn+"||名称>"+poiItems.get(i).getTitle();
//          strReturn = strReturn+"||类型描述>"+poiItems.get(i).getTypeDes();
//          strReturn = strReturn+"||网址>"+poiItems.get(i).getWebsite();//strReturn = strReturn+"||" +poiItems.get(i).getLatLonPoint().getLatitude();try{strReturn = strReturn+"||经纬度坐标>"+poiItems.get(i).getLatLonPoint().getLatitude()+"\\"+poiItems.get(i).getLatLonPoint().getLongitude();strReturn = strReturn+"||入口坐标>"+poiItems.get(i).getEnter().getLatitude()+"\\"+poiItems.get(i).getLatLonPoint().getLongitude();strReturn = strReturn+"||出口坐标>"+poiItems.get(i).getExit().getLatitude()+"\\"+poiItems.get(i).getLatLonPoint().getLongitude();}catch(Exception ex){strReturn = strReturn +"----"+ex.getMessage();}}return strReturn;}
}

java打包编译成jar后引入。

untiy部分

将java事件转为unity事件

using UnityEngine;
using System.Collections;public class SearchEvent : AndroidJavaProxy {public SearchEvent (): base ("com.nsh.amapHelper.AMapListenerHelper"){}void onPoiSearched (AndroidJavaObject result,int rCode){if (poiSearched != null) {poiSearched (result,rCode);}}void onPoiItemSearched(AndroidJavaObject paramPoiItem,int paramInt){}public delegate void DelegateOnPoiSearched(AndroidJavaObject result,int rCode);public event DelegateOnPoiSearched poiSearched;
}

unity调用方法,这里没有实时获取当前定位,直接手写了一个。

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System;public class SearchManage : MonoBehaviour
{public Text txtInfo;public Text txtPoi;public InputField inputQuery;private SearchEvent searchEvent;private AndroidJavaClass jcu;private AndroidJavaObject jou;private AndroidJavaObject query;private AndroidJavaObject poiSearch;private AndroidJavaObject lastPoint;public void StartSearch (){try {txtInfo.text = "start search...";txtInfo.text = txtInfo.text + "\r\n";jcu = new AndroidJavaClass ("com.unity3d.player.UnityPlayer"); jou = jcu.GetStatic<AndroidJavaObject> ("currentActivity");txtInfo.text = txtInfo.text + "currentActivity get...";txtInfo.text = txtInfo.text + "\r\n";AndroidJavaObject amapHelper = new AndroidJavaObject("com.nsh.amapHelper.AMapSearchHelper");txtInfo.text = txtInfo.text + "helper get...";txtInfo.text = txtInfo.text + "\r\n";AndroidJavaObject query = amapHelper.Call<AndroidJavaObject>("getPoiSearch",inputQuery.text,"生活服务","0871");txtInfo.text = txtInfo.text + "query get...";txtInfo.text = txtInfo.text + "\r\n";query.Call ("setPageSize", 20);query.Call ("setPageNum", 1);txtInfo.text = txtInfo.text + "page set...";txtInfo.text = txtInfo.text + "\r\n";poiSearch = new AndroidJavaObject ("com.amap.api.services.poisearch.PoiSearch", jou, query);txtInfo.text = txtInfo.text + "poiSearch set...";txtInfo.text = txtInfo.text + "\r\n";lastPoint = new AndroidJavaObject ("com.amap.api.services.core.LatLonPoint", 25.054777d, 102.671163d);txtInfo.text = txtInfo.text + "lastPoint set...";txtInfo.text = txtInfo.text + "\r\n";AndroidJavaObject bound = amapHelper.Call<AndroidJavaObject>("getBound",lastPoint,1000,true);txtInfo.text = txtInfo.text + "bound set...";txtInfo.text = txtInfo.text + "\r\n";poiSearch.Call ("setBound", bound);txtInfo.text = txtInfo.text + "setBound set...";txtInfo.text = txtInfo.text + "\r\n";searchEvent = new SearchEvent ();searchEvent.poiSearched += OnPoiSearched;txtInfo.text = txtInfo.text +"searchEvent set...";poiSearch.Call ("setOnPoiSearchListener", searchEvent);txtInfo.text = txtInfo.text + "setOnPoiSearchListener set...";txtInfo.text = txtInfo.text + "\r\n";poiSearch.Call ("searchPOIAsyn");txtInfo.text = txtInfo.text + "searchPOIAsyn set...";} catch (Exception ex) {txtInfo.text = txtInfo.text + "\r\n--------------------\r\n";txtInfo.text = txtInfo.text + ex.Message;}}private void OnPoiSearched (AndroidJavaObject result, int rCode){try {if (rCode == 0) {if (result != null && result.Call<AndroidJavaObject> ("getQuery") != null) {// 搜索poi的结果txtPoi.text = "reslut get.";txtPoi.text = txtPoi.text +">>";txtPoi.text = txtPoi.text+"页面数:"+result.Call<int>("getPageCount").ToString();txtPoi.text = txtPoi.text +">>";AndroidJavaObject resultHelper = new AndroidJavaObject("com.nsh.amapHelper.AMapPoiResultHelper");txtPoi.text = txtPoi.text +"resulthelper get..";resultHelper.Call("setPoiResult",result);txtPoi.text = txtPoi.text+"resultHelper set...";int num =resultHelper.Call<int>("poiItemNumber");txtPoi.text = txtPoi.text +">>记录数:"+num.ToString()+">>";for(int i=0;i<num;i++){txtPoi.text = txtPoi.text +"\r\n";txtPoi.text = txtPoi.text + resultHelper.Call<String>("poinItemInfo",i);}} else {txtPoi.text = "没有找到相关数据。";}} else if (rCode == 27) {txtPoi.text = "搜索失败,请检查网络连接。";} else if (rCode == 32) {txtPoi.text = "key验证无效。";} else {txtPoi.text = "未知错误,请稍后重试。错误代码:" + rCode.ToString ();}} catch (Exception ex) {txtPoi.text = txtPoi.text + "\r\n----------------\r\n";txtPoi.text = txtPoi.text + ex.Message;}}
}

编译以后运行效果

源码和编译好的apk下载http://download.csdn.net/detail/wuyt2008/9451949

unity3d,android平台下,高德地图搜索附近相关推荐

  1. Android中集成高德地图SDK实现地图定位和导航功能(二)

    我们接着上一篇文章开始继续实现android中集成高德地图的SDK实现地图 定位,搜索,导航的功能 如何让地图在手机上实现呢? 1.配置AndroidManifest 中的权限申请 可以参考官方文档 ...

  2. 高德地图-搜索服务-POI搜索

    高德地图-搜索服务-POI搜索 之前公司项目收货地址仿饿了么的收货地址,结果发现自己实现的关键字搜索和周边搜索,搜索到的poi列表跟饿了么的并不完全一样,后来考虑了下,应该是搜索的范围.类型之类的设置 ...

  3. android开发之高德地图不能定位,只显示格子

    android 在引用高德地图组件进行开发的时候,不能定位,只显示格子,如下图所示: 参考了网上的一下大家的解决方案,主要是 (1)检查申请的KEY是否正确.PS:申请方法请参考这篇博客,写的很全很详 ...

  4. Android中集成高德地图SDK实现地图定位和导航功能(一)

    一.前期准备工作 1.在高德地图开发者平创建一个自己的项目 名称和应用类型随便填 2.添加Key 1.添加key 2.获取SHA1值 2.1.使用windwos+R 输入cmd 打开控制窗口 输入 w ...

  5. ffmpeg实战教程(八)Android平台下AVfilter 实现水印,滤镜等特效功能

    ffmpeg实战教程(八)Android平台下AVfilter 实现水印,滤镜等特效功能 ffmpeg实战教程(七)Android CMake avi解码后SurfaceView显示 本篇我们在此基础 ...

  6. android平台下OpenGL ES 3.0给图片添加黑白滤镜

    OpenGL ES 3.0学习实践 android平台下OpenGL ES 3.0从零开始 android平台下OpenGL ES 3.0绘制纯色背景 android平台下OpenGL ES 3.0绘 ...

  7. android平台下OpenGL ES 3.0绘制圆点、直线和三角形

    OpenGL ES 3.0学习实践 android平台下OpenGL ES 3.0从零开始 android平台下OpenGL ES 3.0绘制纯色背景 android平台下OpenGL ES 3.0绘 ...

  8. android平台下OpenGL ES 3.0绘制纯色背景

    OpenGL ES 3.0学习实践 android平台下OpenGL ES 3.0从零开始 android平台下OpenGL ES 3.0绘制纯色背景 android平台下OpenGL ES 3.0绘 ...

  9. android平台下OpenGL ES 3.0从零开始

    OpenGL ES 3.0学习实践 android平台下OpenGL ES 3.0从零开始 android平台下OpenGL ES 3.0绘制纯色背景 android平台下OpenGL ES 3.0绘 ...

  10. android平台下OpenGL ES 3.0使用GLSurfaceView对相机Camera预览实时处理

    OpenGL ES 3.0学习实践 android平台下OpenGL ES 3.0从零开始 android平台下OpenGL ES 3.0绘制纯色背景 android平台下OpenGL ES 3.0绘 ...

最新文章

  1. java一维数组排序
  2. 修改linux文件夹密码忘记,Linux中如何重新获取丢失的密码
  3. char类型包括数字吗java_Java char 与 Character
  4. mac完美解决NotADirectoryError: [Errno 20] Not a directory: ‘chromedriver
  5. flask+apache2+ubuntu
  6. Golang中unsafe.Sizeof()的问题
  7. 用jquery实现图片轮播
  8. cmd查看IP地址指令
  9. NXP JN5169使用硬件I2C从机收发数据
  10. linux 修改文件内容命令
  11. 003-信息技术学科知识与教学能力
  12. 基于微信小程序的毕业设计题目(36)PHP电影院售票小程序(含开题报告、任务书、中期报告、答辩PPT、论文模板)
  13. upc 7834 送礼物
  14. Gradle同步工程下载依赖慢
  15. 计算机wps是什么意思啊,路由器WPS是什么意思?
  16. Pandas API参考
  17. border-radius的一种经典使用(上凸边框)
  18. 学而思网校编程python的推出时间是什么时候_自学Python找不到工作?吃鸡半小时,编程五分钟,劝你还是放弃吧...
  19. Vue Router 路由管理
  20. IPHONE省电省流量技巧 电池状况查询

热门文章

  1. 基于SpringBoot的中医诊疗平台的设计与实现
  2. 根据数据批量生成excel文件
  3. 大脑的默认网络有哪些脑区组成,其具有那些功能?The Brain’s Default Mode Network
  4. 广州电子厂房净化工程_广州车间厂房净化工程哪家好优惠报价“本信息长期有效”...
  5. 王梦君 matlab,那是每个matlab程序都要有function么 “#”这个符号是什么意...
  6. 从0到1,搭建离线下载器
  7. word文档墨迹工具的笔不能用_Word墨迹绘图隐藏功能好神奇!可惜这个小技巧好多人都不知道-word画图工具...
  8. 正态分布为何如此重要?
  9. PyTorch踩坑记录
  10. 计算机毕业设计JAVA唯艺健身管理系统演示录像mybatis+源码+调试部署+系统+数据库+lw