高德地图开发(二)地图上显示指定位置
我们在用地图软件搜索的时候,搜索结果会在地图上以红点显示,现在我们来实现一个在地图上显示指定位置的程序,先看效果图。
要实现这么个功能,首先要能将地图视图中心移动到以指定位置;还有在指定位置绘制一个点(图标),上图一个是系统自带图标,一个是自定义图标;因为这里的位置是经纬度坐标,如果是根据坐标来显示倒是可以直接显示,如果是根据地址来显示,就得从地址获取坐标了。我的代码只写了从坐标获取地址,至于从地址获取坐标,也就改两行代码就行了,如不了解参考官方API:http://lbs.amap.com/api/android-sdk/guide/map-data/geo
下面是代码以及解析,有一点需要注意,在解析坐标地址的时候,查询结果的监听一定写在异步请求的前面,不然可能获取不到地址解析数据。切记!
package com.example.gdmap;import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.Toast;import com.amap.api.maps.AMap;
import com.amap.api.maps.CameraUpdate;
import com.amap.api.maps.CameraUpdateFactory;
import com.amap.api.maps.MapView;
import com.amap.api.maps.model.BitmapDescriptorFactory;
import com.amap.api.maps.model.CameraPosition;
import com.amap.api.maps.model.LatLng;
import com.amap.api.maps.model.Marker;
import com.amap.api.maps.model.MarkerOptions;
import com.amap.api.services.core.LatLonPoint;
import com.amap.api.services.geocoder.GeocodeResult;
import com.amap.api.services.geocoder.GeocodeSearch;
import com.amap.api.services.geocoder.RegeocodeQuery;
import com.amap.api.services.geocoder.RegeocodeResult;public class MainActivity extends AppCompatActivity{MapView mapView=null;//地图视图AMap aMap;//地图对象CameraUpdate cameraUpdate;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mapView= (MapView) findViewById(R.id.map);mapView.onCreate(savedInstanceState);//创建地图aMap=mapView.getMap();//获取地图对象getadress();}//根据地址绘制需要显示的点public void makepoint(String s){Log.e("Shunxu","开始绘图");//北纬39.22,东经116.39,为负则表示相反方向LatLng latLng=new LatLng(39.22,116.39);Log.e("地址",s);//使用默认点标记Marker maker=aMap.addMarker(new MarkerOptions().position(latLng).title("地点:").snippet(s));//自定义点标记MarkerOptions markerOptions=new MarkerOptions();markerOptions.position(new LatLng(34,115)).title("标题").snippet("内容");markerOptions.icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher)));//设置图标aMap.addMarker(markerOptions);//改变可视区域为指定位置//CameraPosition4个参数分别为位置,缩放级别,目标可视区域倾斜度,可视区域指向方向(正北逆时针算起,0-360)cameraUpdate= CameraUpdateFactory.newCameraPosition(new CameraPosition(latLng,8,0,30));aMap.moveCamera(cameraUpdate);//地图移向指定区域//位置坐标的点击事件aMap.setOnMarkerClickListener(new AMap.OnMarkerClickListener() {@Overridepublic boolean onMarkerClick(Marker marker) {//Toast.makeText(MainActivity.this,"点击指定位置",Toast.LENGTH_SHORT).show();return false;}});//位置上面信息窗口的点击事件aMap.setOnInfoWindowClickListener(new AMap.OnInfoWindowClickListener() {@Overridepublic void onInfoWindowClick(Marker marker) {Toast.makeText(MainActivity.this,"点击了我的地点",Toast.LENGTH_SHORT).show();}});}//解析指定坐标的地址public void getadress(){Log.e("Shunxu","调用getadress");GeocodeSearch geocodeSearch=new GeocodeSearch(this);//地址查询器//设置查询参数,//三个参数依次为坐标,范围多少米,坐标系RegeocodeQuery regeocodeQuery=new RegeocodeQuery(new LatLonPoint(39.22,116.39),200,GeocodeSearch.AMAP);//设置查询结果监听geocodeSearch.setOnGeocodeSearchListener(new GeocodeSearch.OnGeocodeSearchListener() {//根据坐标获取地址信息调用@Overridepublic void onRegeocodeSearched(RegeocodeResult regeocodeResult, int i) {String s =regeocodeResult.getRegeocodeAddress().getFormatAddress();Log.e("Shunxu","获得请求结果");makepoint(s);}//根据地址获取坐标信息是调用@Overridepublic void onGeocodeSearched(GeocodeResult geocodeResult, int i) {}});geocodeSearch.getFromLocationAsyn(regeocodeQuery);//发起异步查询请求}//将地图生命周期跟活动绑定,减少某些不必要的bug@Overrideprotected void onPostResume() {super.onPostResume();mapView.onResume();}@Overrideprotected void onPause() {super.onPause();mapView.onPause();}@Overrideprotected void onDestroy() {super.onDestroy();mapView.onDestroy();}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
