" />

亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android高德地圖poi檢索仿微信發(fā)送位置實(shí)例代碼

 更新時(shí)間:2017年04月13日 09:05:42   作者:tijjyire  
本篇文章主要介紹了Android高德地圖poi檢索仿微信發(fā)送位置實(shí)例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下。

最近項(xiàng)目需求把發(fā)送定位模塊改成類似微信發(fā)送位置給好友的效果,我使用了高德地圖實(shí)現(xiàn)了一個(gè)demo,效果圖如下:

從主界面中我們可以看到中心標(biāo)記上面顯示的就是我們定位的地址,下面是一個(gè)listview列表,第一條item的數(shù)據(jù)就是我們定位得到的地址,下面其余的都是我們根據(jù)定位得到的經(jīng)緯度通過poi周邊搜索得到的地址。我們進(jìn)行了如下操作:

  1. 我們點(diǎn)擊列表的item,中心標(biāo)記會(huì)移動(dòng)到該item對象的地址上面去。
  2. 我們手動(dòng)移動(dòng)地圖的時(shí)候,中心標(biāo)記的地址會(huì)發(fā)生相應(yīng)的變化并且下面的列表也會(huì)發(fā)生相應(yīng)的變化。
  3. 根據(jù)關(guān)鍵字poi搜索得到的列表,然后點(diǎn)擊item主界面立馬進(jìn)行更新操作。

這里貼出主要代碼,首先我們進(jìn)行地圖地位初始化操作:

@Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_map);
    mapView.onCreate(savedInstanceState);// 此方法必須重寫
    if (aMap == null) {
      aMap = mapView.getMap();
      // 自定義系統(tǒng)定位小藍(lán)點(diǎn)
      MyLocationStyle myLocationStyle = new MyLocationStyle();
      // 設(shè)置小藍(lán)點(diǎn)的圖標(biāo)
      myLocationStyle.myLocationIcon(BitmapDescriptorFactory.
      fromResource(R.mipmap.ic_location_marker));// 設(shè)置小藍(lán)點(diǎn)的圖標(biāo)        
      myLocationStyle.strokeColor(0x7F0070D9);// 設(shè)置圓形的邊框顏色
      myLocationStyle.radiusFillColor(0x130070D9);// 設(shè)置圓形的填充顏色
//       myLocationStyle.anchor(int,int)//設(shè)置小藍(lán)點(diǎn)的錨點(diǎn)
      myLocationStyle.strokeWidth(1.0f);// 設(shè)置圓形的邊框粗細(xì)
      aMap.setMyLocationStyle(myLocationStyle);
      aMap.setLocationSource(this);// 設(shè)置定位(1)
      aMap.setOnCameraChangeListener(this);//手動(dòng)移動(dòng)地圖 (2)
      aMap.getUiSettings().setMyLocationButtonEnabled(true);// 設(shè)置默認(rèn)定位按鈕是否顯示
      //設(shè)置為true表示顯示定位層并可觸發(fā)定位,false表示隱藏定位層并不可觸發(fā)定位,默認(rèn)是false
      aMap.setMyLocationEnabled(true);
      aMap.moveCamera(CameraUpdateFactory.zoomTo(17.5f));
    }
    //------------------------------------------添加中心標(biāo)記
    mMarkerOptions = new MarkerOptions();
    mMarkerOptions.draggable(false);//可拖放性
    mMarkerOptions.icon(BitmapDescriptorFactory.fromResource(R.mipmap.ic_tips_nearby));
    mCenterMarker = aMap.addMarker(mMarkerOptions);
    ViewTreeObserver vto = mapView.getViewTreeObserver();
    vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
      @Override
      public void onGlobalLayout() {
        mapView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
        mCenterMarker.setPositionByPixels(mapView.getWidth() >> 1, mapView.getHeight() >> 1);
        mCenterMarker.showInfoWindow();
      }
    });
    //---------------------------------------------初始化正反編碼類 (3)
    mGeocoderSearch = new GeocodeSearch(this);
    mGeocoderSearch.setOnGeocodeSearchListener(this);

  }

我們注意重點(diǎn)關(guān)注在上面的三個(gè)回調(diào),1處是定位,有以下兩個(gè)回調(diào)方法:

    //-----------------地圖定位回調(diào)
  //激活定位
  @Override
  public void activate(OnLocationChangedListener onLocationChangedListener) {
    mListener = onLocationChangedListener;
    if (mlocationClient == null) {
      mlocationClient = new AMapLocationClient(this);
      mLocationOption = new AMapLocationClientOption();
      //設(shè)置定位
      mlocationClient.setLocationListener(this);(4)
      //設(shè)置為高精度定位模式
      mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
      //設(shè)置定位參數(shù)
      mlocationClient.setLocationOption(mLocationOption);
      // 此方法為每隔固定時(shí)間會(huì)發(fā)起一次定位請求,為了減少電量消耗或網(wǎng)絡(luò)流量消耗,
      // 注意設(shè)置合適的定位時(shí)間的間隔(最小間隔支持為2000ms),并且在合適時(shí)間調(diào)用stopLocation()
      // 方法來取消定位請求
      // 在定位結(jié)束后,在合適的生命周期調(diào)用onDestroy()方法
      // 在單次定位情況下,定位無論成功與否,都無需調(diào)用stopLocation()方法移除請求,定位sdk內(nèi)部會(huì)移除
      mlocationClient.startLocation();
    }
  }

  //停止定位
  @Override
  public void deactivate() {
    mListener = null;
    if (mlocationClient != null) {
      mlocationClient.stopLocation();
      mlocationClient.onDestroy();
    }
    mlocationClient = null;
  }

4處的定位成功后會(huì)回調(diào)onLocationChanged這個(gè)方法,在這個(gè)方法里面我們可以獲得定位到的經(jīng)緯讀,地址,顯示出上面我們設(shè)置的自定義系統(tǒng)定位小藍(lán)點(diǎn)出來等等,

  @Override
  public void onLocationChanged(AMapLocation aMapLocation) {
     //這個(gè)方法循環(huán)執(zhí)行
     mLongitude = aMapLocation.getLongitude();//經(jīng)度
     mLatitude = aMapLocation.getLatitude();//緯度
     cityCode = aMapLocation.getCityCode();//citycode
  }

我們再來分析2處地圖位置改變時(shí)回調(diào):

  @Override
  public void onCameraChange(CameraPosition cameraPosition) {
  }

  @Override
  public void onCameraChangeFinish(CameraPosition cameraPosition) {
    /**這個(gè)方法很重要,雖然在上述的onLocationChanged方法我們也能獲得坐標(biāo)點(diǎn)的信息但是我們
      通常在這里獲得定位坐標(biāo)的經(jīng)緯度,獲得了經(jīng)緯度后我們并不能知道該坐標(biāo)點(diǎn)的具體坐標(biāo)信息,所以
      需要把對應(yīng)的坐標(biāo)點(diǎn)轉(zhuǎn)化為具體地址,這就是所謂的同步逆地理編碼請求,和定位是黃金搭檔
     */
       mCurrentPoint = new LatLonPoint(cameraPosition.target.
       latitude, cameraPosition.target.longitude);
      // 第一個(gè)參數(shù)表示一個(gè)Latlng,第二參數(shù)表示范圍多少米,第三個(gè)參數(shù)表示是火系坐標(biāo)系還是GPS原生坐標(biāo)系
      RegeocodeQuery query = new RegeocodeQuery(mCurrentPoint, 200, GeocodeSearch.AMAP);
      mGeocoderSearch.getFromLocationAsyn(query);// 設(shè)置同步逆地理編碼請求
  }

3處我們做的地理正反編碼回調(diào)如下:

  //----------------逆地址編碼回調(diào):坐標(biāo)->地址
  @Override
  public void onRegeocodeSearched(RegeocodeResult result, int rCode) {
    if (rCode == 0) {
      if (result != null && result.getRegeocodeAddress() != null && 
        result.getRegeocodeAddress().getFormatAddress() != null) {
        mPoiQuery = new PoiSearch.Query("", "住宿服務(wù)|公司企業(yè)", 
        result.getRegeocodeAddress().getCityCode());
        mPoiQuery.setPageSize(10);// 設(shè)置每頁最多返回多少條poiitem
        mPoiQuery.setPageNum(0);//設(shè)置查第一頁
        PoiSearch poiSearch = new PoiSearch(this, mPoiQuery);
        poiSearch.setOnPoiSearchListener(this);//設(shè)置數(shù)據(jù)返回 (5)
        //設(shè)置周邊搜索的中心點(diǎn)以及區(qū)域
        poiSearch.setBound(new PoiSearch.SearchBound(mCurrentPoint, 1500, true)); 
        poiSearch.searchPOIAsyn();//開始搜索
      } else {
        ToastUtil.show(mContext, R.string.no_result);
      }
    } else {
      ToastUtil.show(mContexts, rCode);
    }

  }

  //----------------地址編碼回調(diào):地址->坐標(biāo)
  @Override
  public void onGeocodeSearched(GeocodeResult geocodeResult, int rCode) {

  }

我們在這兒進(jìn)行了poi周邊搜索操作,回調(diào)方法

  @Override
  public void onPoiSearched(PoiResult result, int rcode) {
    if (rcode == 0) {
      if (result != null && result.getQuery() != null) {// 搜索poi的結(jié)果
        if (result.getQuery().equals(query)) {// 是否是同一條
          poiItems = poiResult.getPois();// 取得第一頁的poiitem數(shù)據(jù),頁數(shù)從數(shù)字0開始
          // 當(dāng)搜索不到poiitem數(shù)據(jù)時(shí),會(huì)返回含有搜索關(guān)鍵字的城市信息
          List<SuggestionCity> suggestionCities = poiResult
              .getSearchSuggestionCitys();
          /**
          * listviw具體操作邏輯
          */ 
        }
      } else if (suggestionCities != null
              && suggestionCities.size() > 0) {
            showSuggestCity(suggestionCities);
          }else {
        ToastUtil.show(mContexts, "對不起,沒有搜索到相關(guān)數(shù)據(jù)!");
      }
    }
  }

  @Override
  public void onPoiItemSearched(PoiItem poiitem, int rcode) {

  }
  /**
   * poi沒有搜索到數(shù)據(jù),返回一些推薦城市的信息
   */
  private void showSuggestCity(List<SuggestionCity> cities) {
    String infomation = "推薦城市\(zhòng)n";
    for (int i = 0; i < cities.size(); i++) {
      infomation += "城市名稱:" + cities.get(i).getCityName() + "城市區(qū)號(hào):"
          + cities.get(i).getCityCode() + "城市編碼:"
          + cities.get(i).getAdCode() + "\n";
    }
    ToastUtil.show(this, infomation);
  }

類似的含關(guān)鍵字的poi搜索也是類似的:

    // 第一個(gè)參數(shù)表示搜索字符串,第二個(gè)參數(shù)表示poi搜索類型,第三個(gè)參數(shù)表示poi搜索區(qū)域(空字符串代表全國)
    mPoiQuery = new PoiSearch.Query(key, "", cityCode);
    mPoiSearch = new PoiSearch(this, mPoiQuery);
    mPoiQuery.setPageSize(15);// 設(shè)置每頁最多返回多少條poiitem
    mPoiQuery.setPageNum(0);//設(shè)置查第一頁
    mPoiSearch.setOnPoiSearchListener(this);
    // 設(shè)置搜索區(qū)域?yàn)橐詌p點(diǎn)為圓心,其周圍5000米范圍
    LatLonPoint lp=new LatLonPoint(latitude,longitude);
    mPoiSearch.setBound(new PoiSearch.SearchBound(lp, 5000, true));
    mPoiSearch.searchPOIAsyn();//開始搜索

最后還有一個(gè)知識(shí)點(diǎn)就是我們點(diǎn)擊item的時(shí)候地圖自動(dòng)去移動(dòng)的實(shí)現(xiàn),其實(shí)就是aMap.moveCamera方法去實(shí)現(xiàn)的,它會(huì)自動(dòng)調(diào)用onCameraChangeFinish方法走的流程還是和我們手動(dòng)拖動(dòng)地圖一樣的。

復(fù)制代碼 代碼如下:

aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(poiItem.getLatLonPoint().getLatitude(), poiItem.getLatLonPoint().getLongitude()), 20));

基本上就是這樣了,至于一些細(xì)節(jié)方面自己去調(diào)節(jié)和優(yōu)化吧,哪些問題都不大。以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android 多渠道(友盟)打包教程分享

    Android 多渠道(友盟)打包教程分享

    這篇文章主要介紹了Android 多渠道(友盟)打包教程分享,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Android Lock鎖實(shí)現(xiàn)原理詳細(xì)分析

    Android Lock鎖實(shí)現(xiàn)原理詳細(xì)分析

    這篇文章主要介紹了Android Lock鎖實(shí)現(xiàn)原理,Lock接口的實(shí)現(xiàn)類提供了比使用synchronized關(guān)鍵字更加靈活和廣泛的鎖定對象操作,而且是以面向?qū)ο蟮姆绞竭M(jìn)行對象加鎖
    2023-02-02
  • Android實(shí)現(xiàn)GridView中的item自由拖動(dòng)效果

    Android實(shí)現(xiàn)GridView中的item自由拖動(dòng)效果

    在前一個(gè)項(xiàng)目中,實(shí)現(xiàn)了一個(gè)功能是gridview中的item自由拖到效果,實(shí)現(xiàn)思路很簡單,主要工作就是交換節(jié)點(diǎn),以及拖動(dòng)時(shí)的移動(dòng)效果,下面小編給大家分享具體實(shí)現(xiàn)過程,對gridview實(shí)現(xiàn)拖拽效果感興趣的朋友一起看看吧
    2016-11-11
  • Android自定義實(shí)現(xiàn)開關(guān)按鈕代碼

    Android自定義實(shí)現(xiàn)開關(guān)按鈕代碼

    經(jīng)??梢钥吹揭恍┻x擇開個(gè)狀態(tài)的配置文件,但是外觀都不多好看。我感覺還是自定義的比較好,下面小編給大家介紹通過Android自定義實(shí)現(xiàn)開關(guān)按鈕代碼,感興趣的童鞋一起學(xué)習(xí)吧
    2016-05-05
  • android基本控件ToggleButton&Switch使用指南

    android基本控件ToggleButton&Switch使用指南

    本文給大家匯總介紹了android的2個(gè)基本控件ToggleButton和Switch的使用方法,非常的詳細(xì),有需要的小伙伴可以參考下。
    2016-01-01
  • Android 使用ViewPager實(shí)現(xiàn)輪播圖效果

    Android 使用ViewPager實(shí)現(xiàn)輪播圖效果

    這篇文章主要介紹了Android 使用ViewPager實(shí)現(xiàn)輪播圖效果,通過實(shí)例代碼給大家講解了適配器和各個(gè)方法的作用介紹,需要的朋友可以參考下
    2017-05-05
  • Android編程操作嵌入式關(guān)系型SQLite數(shù)據(jù)庫實(shí)例詳解

    Android編程操作嵌入式關(guān)系型SQLite數(shù)據(jù)庫實(shí)例詳解

    這篇文章主要介紹了Android編程操作嵌入式關(guān)系型SQLite數(shù)據(jù)庫的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Android操作SQLite數(shù)據(jù)庫的基本技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2016-01-01
  • Android編程自定義圓角半透明Dialog的方法

    Android編程自定義圓角半透明Dialog的方法

    這篇文章主要介紹了Android編程自定義圓角半透明Dialog的方法,涉及Android控件的布局及相關(guān)屬性設(shè)置技巧,需要的朋友可以參考下
    2017-03-03
  • Android實(shí)現(xiàn)圖片轉(zhuǎn)高斯模糊以及高斯模糊布局

    Android實(shí)現(xiàn)圖片轉(zhuǎn)高斯模糊以及高斯模糊布局

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)圖片轉(zhuǎn)高斯模糊的方法,以及高斯模糊布局,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Android自定義View實(shí)現(xiàn)shape圖形繪制

    Android自定義View實(shí)現(xiàn)shape圖形繪制

    這篇文章主要為大家詳細(xì)介紹了Android使用自定義View實(shí)現(xiàn)shape圖形繪制,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01

最新評論