高德地图 ———定位,Marker

本期给大家高德地图的展示,和定位,并显示popwindow(当前位置信息),滑动地图实时更新位置信息;

  • 界面预览
  • 具体实现
  • 新司机爬坑

界面预览

具体实现

    //地图控件和定位必须的private AMap aMap;private MapView mapView;LocationManagerProxy mLocationManagerProxy;private OnLocationChangedListener mListener;private LocationManagerProxy mAMapLocationManager;private ImageView location;private Marker locationMarker;private LatLng locationLatLng;private Handler handler = new Handler();Double geoLat, geoLng;//经纬度,城市String latitude, longitude, city;//显示在marker上的地址信息String desc = "";
@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mapView = (MapView) findViewById(R.id.map);// 此处必须加上       mapView.onCreate(savedInstanceState); if (aMap == null) {aMap = mapView.getMap();if (AMapUtil.checkReady(this, aMap)) {//这个方法是定位并且显示当前位置。一会单独说setUpMap();}}//这货就是取消地图缩放按钮的aMap.getUiSettings().setZoomControlsEnabled(false);//mLocationManagerProxy = LocationManagerProxy.getInstance(this);mLocationManagerProxy.requestLocationData(LocationProviderProxy.AMapNetwork, 60 * 1000, -1, this);mLocationManagerProxy.setGpsEnable(false);//定位按钮location = (ImageView) findViewById(R.id.iv_location);location.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {setUpMap();}});}

**AMapLocation,AMapLocationListener,LocationManagerProxy,LocationProviderProxy
与 android自带的Location服务一样,AMapLocationManagerProxy类是Location服务的关键类,其意思就是Location服务的管理,而LocationProviderProxy类就是Location服务的提供者,而AMapLocation就是Location服务的实现形式,AMapLocationListener就是Location的监听器。**

当然最关键的还是 setUpMap这个方法,也是今天的大头;

private void setUpMap() {//marker 显示的位置信息aMap.setOnCameraChangeListener(cameraChangeListener);//设置marker,这里我写了一个内部的适配器,看着方便aMap.setInfoWindowAdapter(infoWindowAdapter);mAMapLocationManager = LocationManagerProxy.getInstance(MainActivity.this);aMap.setLocationSource(locationSource);// 设置为true表示系统定位按钮显示并响应点击,false表示隐藏,默认是falseaMap.setMyLocationEnabled(true);aMap.getUiSettings().setMyLocationButtonEnabled(false);aMap.getUiSettings().setTiltGesturesEnabled(false);}

依次就先说OnCameraChangeListener,这个方法是根据定位获取到的经纬度来进行判断desc,也就是我们的要展示到页面上的当前的位置信息(后面几期我再告诉大家这里的小坑),还是这些个操作必须要放到线程中去,原因:你懂的!!

onCameraChangeListener cameraChangeListener = new OnCameraChangeListener() {@Overridepublic void onCameraChangeFinish(CameraPosition position) {if (locationMarker != null) {final LatLng latLng = position.target;new Thread(new Runnable() {@Overridepublic void run() {GeocodeSearch geocodeSearch = new GeocodeSearch(MainActivity.this);LatLonPoint point = new LatLonPoint(latLng.latitude,latLng.longitude);RegeocodeQuery regeocodeQuery = new RegeocodeQuery(point, 1000, GeocodeSearch.AMAP);RegeocodeAddress address = null;try {address = geocodeSearch.getFromLocation(regeocodeQuery);} catch (Exception e) {e.printStackTrace();}if (null == address) {return;}StringBuffer stringBuffer = new StringBuffer();String area = address.getProvince();// 省或直辖市String loc = address.getCity();// 地级市或直辖市String subLoc = address.getDistrict();// 区或县或县级市String ts = address.getTownship();// 乡镇String thf = null;// 道路List<RegeocodeRoad> regeocodeRoads = address.getRoads();// 道路列表if (regeocodeRoads != null && regeocodeRoads.size() > 0) {RegeocodeRoad regeocodeRoad = regeocodeRoads.get(0);if (regeocodeRoad != null) {thf = regeocodeRoad.getName();}}String subthf = null;// 门牌号StreetNumber streetNumber = address.getStreetNumber();if (streetNumber != null) {subthf = streetNumber.getNumber();}String fn = address.getBuilding();// 标志性建筑,当道路为null时显示if (area != null)stringBuffer.append(area);if (loc != null && !area.equals(loc))stringBuffer.append(loc);if (subLoc != null)stringBuffer.append(subLoc);if (ts != null)stringBuffer.append(ts);if (thf != null)stringBuffer.append(thf);if (subthf != null)stringBuffer.append(subthf);if ((thf == null && subthf == null) && fn != null&& !subLoc.equals(fn))stringBuffer.append(fn + "附近");locationMarker.setSnippet(stringBuffer.toString());handler.post(new Runnable() {@Overridepublic void run() {locationMarker.showInfoWindow();}});}}).start();}}

下面是 infowindowadapter ,这里比较简单不做多余的解释

InfoWindowAdapter infoWindowAdapter = new InfoWindowAdapter() {@Overridepublic View getInfoWindow(Marker marker) {return null;}@Overridepublic View getInfoContents(Marker marker) {View mContents = getLayoutInflater().inflate(R.layout.custom_info_contents, null);render(marker, mContents);return mContents;}};

custom_info_contents,,@dimen/dimen_20_dip == 10dp

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="left|center_vertical"android:orientation="vertical" ><LinearLayout
        android:id="@+id/layout_infowindow_text"android:layout_width="fill_parent"android:layout_height="fill_parent"android:gravity="left|center_vertical"android:orientation="vertical"android:visibility="visible" ><TextView
            android:id="@+id/title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:ellipsize="end"android:singleLine="true"android:textColor="#ff000000"android:textSize="14sp"android:textStyle="bold" /><TextView
            android:id="@+id/snippet"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textColor="#ff7f7f7f"android:textSize="14sp"android:maxWidth="@dimen/dimen_400_dip" /></LinearLayout><ProgressBar
        android:id="@+id/progressBar_info_waiting"style="?android:attr/progressBarStyleSmall"android:layout_width="wrap_content"android:layout_height="wrap_content"android:indeterminateDrawable="@drawable/progress_drawable"android:visibility="gone" /></LinearLayout>

然后把信息 add上去。背景用的是 一个.9图

private void addMarker(LatLng latLng, String desc) {MarkerOptions markerOptions = new MarkerOptions();markerOptions.position(latLng);markerOptions.title("[我的位置]");markerOptions.snippet(desc);markerOptions.icon(BitmapDescriptorFactory.defaultMarker());locationMarker = aMap.addMarker(markerOptions);}

小坑

1:因为要去掉地图的缩放按钮,百度了几次都没有找到,去高德开放平台看api也是没有,后来问朋友告诉我一个方法,aMap.getUiSettings().setZoomControlsEnabled(false); 希望对有用到的朋友有些帮助。

这个模块就搞定了。

有帮助的 顶下。。。。。,下期来说,高德的逆地理编码及其他用法。。

我的高德地图之定位,Marker,位置信息。相关推荐

  1. vue项目中使用高德地图获取用户当前位置信息

    项目背景是用vue开发的小程序,需要获取当前用户的地理位置,折腾了好久终于弄好了,今天分享给大家,话不多说,let's go! 第一步:在index.html页面引入高德地图 <script t ...

  2. 高德地图准确获取当前位置信息

    代码示例 JavaScript mapObj = new AMap.Map('iCenter'); mapObj.plugin('AMap.Geolocation', function () {geo ...

  3. Android 集成高德地图——当前定位,添加图标,画路线,设置显示中心位置,比例,地图刷新位置监听,判断GPS开启,去打开GPS

    /*** 判断定位服务是否开启** @param* @return true 表示开启*/ public static boolean isLocationEnabled(Context contex ...

  4. android定位附近店铺,高德地图怎么添加店铺位置_高德地图定位怎么设置添加自己家店铺位置_攻略...

    高德地图是国内最知名的地图导航软件,基本上每个人的手机上都有这款软件.如今想要方便出行都可以通过高得地图查询位置就可以了,给我们的生活带来了很多的便利.在高德地图上也可以很方便的查询各个地方的店铺,通 ...

  5. android高德地图默认当前位置,【报Bug】1.9.2 android 高德地图无法定位到当前位置...

    详细问题描述 (DCloud产品不会有明显的bug,所以你遇到的问题大都是在特定环境下才能重现的问题,请仔细描述你的环境和重现方式,否则DCloud很难排查解决你的问题) [内容] 1.9.2版本 a ...

  6. Android Studio之高德地图实现定位和3D地图显示

    在应用开发中,地图开发是经常需要使用的"组件",国内比较出名的是就是百度地图和高德地图. 此博客讲的是高德地图实现定位和3D地图显示,并标注相应位置,话不多说,先看看效果,在上代码 ...

  7. android------之高德地图实现定位和3D地图显示

    2019独角兽企业重金招聘Python工程师标准>>> 在应用开发中,地图开发是经常需要使用的"组件",国内比较出名的是就是百度地图和高德地图. 此博客讲的是高德 ...

  8. 高德地图——浏览器定位+点击获取经纬度+去除高德百度地图左下角logo

    高德地图--浏览器定位+点击获取经纬度+去除高德百度地图左下角logo 1.代码 <!doctype html> <html> <head><meta cha ...

  9. android高德marker添加点击,高德地图上添加marker,给每一个marker添加点击事件。...

    高德地图上添加marker,给每一个marker添加点击事件. 高德地图上添加marker,给每一个marker添加点击事件.javascript var watch = [] $.ajax({ ty ...

  10. 高德地图H5 定位失败报错 geolocation time out. Get ipLocation failed解决方案

    高德地图H5 定位失败报错 geolocation time out. Get ipLocation failed的解决方法. 前言:此坑踩得我挺难受的,搞了三天 需求:进入页面,获取用户具体经纬度并 ...

最新文章

  1. QT 下配置OpenCV(VS编译器+QT+OpenCV)
  2. 【LeetCode】121.买卖股票的最佳时机
  3. 洛谷——P3807 【模板】卢卡斯定理
  4. 让程序员不再苦逼的四大神器
  5. [转] 理解SVG transform坐标变换
  6. android 格式格式:YYYYMMDDHH24MISS 的时间戳timestamp
  7. 我化身保姆为你提供 html 教学服务(6)
  8. 拼团功能实现 php_PHP实现微信退款功能
  9. [ 1003 ] 判断小偷那些事
  10. 搜索最好的Android 代码
  11. 【统计模拟及其R实现】往年上机试题答案
  12. 【动画演示软件】Focusky教程 | 如何使插入的视频自动播放?
  13. 台式计算机上的fn键是哪个,电脑键盘上Fn键到底有什么用?
  14. (转)sonicstage 完整删除的方法
  15. 内存测试软件 ddr4,RAMCHECK LX DDR4 PRO/DDR3 内存测试仪
  16. Redis 50问
  17. 单片机笔记五:改进无源蜂鸣片驱动电路
  18. 金立E6刷MIUI V5教程
  19. app不能备份数据,更改allowBackup为true,并重新打包apk
  20. SPAMnet(AAAI2020) 立体图像SR+一致性保持 Stereoscopic Image Super-Resolution with Stereo Consistent Feature

热门文章

  1. 嵌入式linux编程过成中模块从串口读数需要特定的字符段并且需要每两位字符数组元素转换成一个16进制数(提取特定字符串+字符串转16进制)
  2. 深度学习之格式转换笔记(三):keras(.hdf5)模型转TensorFlow(.pb) 转TensorRT(.uff)格式
  3. 【C语言进阶】你真的懂数据文件吗?一文带你了解什么是数据文件
  4. Sigmoid 与 Softmax 的区别
  5. Deep Face Recognition读书笔记
  6. 计算机安全技术(第2版)
  7. 京东电器工程师笔试题
  8. UserBehavior用户行为分析
  9. 【bzoj 3339】Rmq Problem 【bzoj 3585】mex(可持久化线段树)
  10. 超全面!用户生命周期分析攻略