您的位置:首页 > 其它

高德地图开发(二)地图上显示指定位置

2017-10-02 14:15 459 查看
我们在用地图软件搜索的时候,搜索结果会在地图上以红点显示,现在我们来实现一个在地图上显示指定位置的程序,先看效果图。


要实现这么个功能,首先要能将地图视图中心移动到以指定位置;还有在指定位置绘制一个点(图标),上图一个是系统自带图标,一个是自定义图标;因为这里的位置是经纬度坐标,如果是根据坐标来显示倒是可以直接显示,如果是根据地址来显示,就得从地址获取坐标了。我的代码只写了从坐标获取地址,至于从地址获取坐标,也就改两行代码就行了,如不了解参考官方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;

@Override
protected 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() {
@Override
public boolean onMarkerClick(Marker marker) {
//Toast.makeText(MainActivity.this,"点击指定位置",Toast.LENGTH_SHORT).show();
return false;
}
});
//位置上面信息窗口的点击事件
aMap.setOnInfoWindowClickListener(new AMap.OnInfoWindowClickListener() {
@Override
public 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() {
//根据坐标获取地址信息调用
@Override
public void onRegeocodeSearched(RegeocodeResult regeocodeResult, int i) {
String s =regeocodeResult.getRegeocodeAddress().getFormatAddress();
Log.e("Shunxu","获得请求结果");
makepoint(s);
}
//根据地址获取坐标信息是调用
@Override
public void onGeocodeSearched(GeocodeResult geocodeResult, int i) {
}
});

geocodeSearch.getFromLocationAsyn(regeocodeQuery);//发起异步查询请求
}

//将地图生命周期跟活动绑定,减少某些不必要的bug
@Override
protected void onPostResume() {
super.onPostResume();
mapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐