android高德地图调用定位显示
注意:本程序是我亲自测过的,可以支持直接下载使用不同的eclipse需要注册申请不同的高德地图key,否则不能显示地图,你们自己下载下载地址:http://download.csdn.net/detail/cfpackage com.example.import java.util.Limport android.app.Aimport android.graphics.Bimport android.graphics.Pimport android.graphics.drawable.Dimport android.location.Limport android.os.AsyncTimport android.os.Bimport android.os.Himport android.os.SystemCimport android.view.Vimport android.view.View.MeasureSimport android.view.animation.BounceIimport android.view.animation.Iimport android.widget.LinearLimport android.widget.TextVimport com.amap.api.location.AMapLimport com.amap.api.location.AMapLocationLimport com.amap.api.location.LocationManagerPimport com.amap.api.location.LocationProviderPimport com.amap.api.maps.AMimport com.amap.api.WindowAimport com.amap.api.maps.AMap.OnCameraChangeLimport com.amap.api.maps.CameraUpdateFimport com.amap.api.maps.LocationSimport com.amap.api.maps.LocationSource.OnLocationChangedLimport com.amap.api.maps.MapVimport com.amap.api.maps.Pimport com.amap.api.maps.model.BitmapDescriptorFimport com.amap.api.maps.model.CameraPimport com.amap.api.maps.model.LatLimport com.amap.api.maps.model.Mimport com.amap.api.maps.model.MarkerOimport com.amap.api.services.core.AMapEimport com.amap.api.services.core.LatLonPimport com.amap.api.services.geocoder.GeocodeSimport com.amap.api.services.geocoder.RegeocodeAimport com.amap.api.services.geocoder.RegeocodeQimport com.amap.api.services.geocoder.RegeocodeRimport com.amap.api.services.geocoder.StreetNpublic class LocationActivity extends Activity {private AMap aMprivate MapView mapVprivate OnLocationChangedListener mLprivate LocationManagerProxy mAMapLocationMprivate Marker locationMprivate LatLng locationLatLpublic static Drawable mapPrintSprivate Handler handler = new Handler();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mapView = (MapView) findViewById(R.id.map);mapView.onCreate(savedInstanceState); //此处必须加上init();}private void init() {if (aMap == null) {aMap = mapView.getMap();if (AMapUtil.checkReady(this, aMap)) {setUpMap();}}}private void setUpMap() {aMap.setOnCameraChangeListener(cameraChangeListener);aMap.setInfoWindowAdapter(infoWindowAdapter);mAMapLocationManager = LocationManagerProxy.getInstance(LocationActivity.this);aMap.setLocationSource(locationSource);aMap.setMyLocationEnabled(true);// 设置为true表示系统定位按钮显示并响应点击,false表示隐藏,默认是falseaMap.getUiSettings().setMyLocationButtonEnabled(false);aMap.getUiSettings().setTiltGesturesEnabled(false);}/*** 往地图上添加marker*&* @param latLng*/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);}&LocationSource locationSource = new LocationSource() {@Overridepublic void deactivate() {mListener =if (mAMapLocationManager != null) {mAMapLocationManager.removeUpdates(aMapLocationListener);mAMapLocationManager.destroy();}mAMapLocationManager =}@Overridepublic void activate(OnLocationChangedListener listener) {mListener =if (mAMapLocationManager == null) {mAMapLocationManager = LocationManagerProxy.getInstance(LocationActivity.this);}&mAMapLocationManager.requestLocationData(LocationProviderProxy.AMapNetwork, 5000, 10,aMapLocationListener);}};AMapLocationListener aMapLocationListener = new AMapLocationListener() {@Overridepublic void onLocationChanged(AMapLocation aLocation) {if (mListener != null) {// 此处注释掉,表示不用系统提供的定位图标等// mListener.onLocationChanged(aLocation);}if (aLocation != null) {Double geoLat = aLocation.getLatitude();Double geoLng = aLocation.getLongitude();locationLatLng = new LatLng(geoLat, geoLng);String desc = &&;Bundle locBundle = aLocation.getExtras();if (locBundle != null) {desc = locBundle.getString(&desc&);}addMarker(locationLatLng, desc);locationMarker.showInfoWindow();// 显示信息窗口aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(locationLatLng, 15));locationSource.deactivate();&}}@Overridepublic void onStatusChanged(String provider, int status, Bundle extras) {}@Overridepublic void onProviderEnabled(String provider) {}@Overridepublic void onProviderDisabled(String provider) {}@Overridepublic void onLocationChanged(Location location) {}};OnCameraChangeListener cameraChangeListener = new OnCameraChangeListener() {@Overridepublic void onCameraChangeFinish(CameraPosition position) {if (locationMarker != null) {final LatLng latLng = position.new Thread(new Runnable(){@Overridepublic void run(){GeocodeSearch geocodeSearch = new GeocodeSearch(LocationActivity.this);LatLonPoint point =new LatLonPoint(latLng.latitude, latLng.longitude);RegeocodeQuery regeocodeQuery = new RegeocodeQuery(point, 1000,GeocodeSearch.AMAP);RegeocodeAddress address =try {address = geocodeSearch.getFromLocation(regeocodeQuery);} catch (AMapException e) {e.printStackTrace();}if(null==address){}StringBuffer stringBuffer = new StringBuffer();String area = address.getProvince();//省或直辖市String loc = address.getCity();//地级市或直辖市String subLoc = address.getDistrict();//区或县或县级市String ts = address.getTownship();//乡镇String thf =//道路List&RegeocodeRoad& regeocodeRoads = address.getRoads();//道路列表if(regeocodeRoads != null && regeocodeRoads.size() & 0){RegeocodeRoad regeocodeRoad = regeocodeRoads.get(0);if(regeocodeRoad != null){thf = regeocodeRoad.getName();}}String subthf =//门牌号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();}}@Overridepublic void onCameraChange(CameraPosition position) {if (locationMarker != null) {LatLng latLng = position.locationMarker.setPosition(latLng);}}};InfoWindowAdapter infoWindowAdapter = new InfoWindowAdapter() {@Overridepublic View getInfoWindow(Marker marker) {}@Overridepublic View getInfoContents(Marker marker) {View mContents = getLayoutInflater().inflate(R.layout.custom_info_contents,null);render(marker, mContents);return mC}};class GetLocationTask extends AsyncTask&Object, Integer, Object&{@Overrideprotected Object doInBackground(Object... params) {}@Overrideprotected void onPostExecute(Object result) {super.onPostExecute(result);}}/** 自定义infowindow的样式 */public void render(Marker marker, View view) {String title = marker.getTitle();TextView titleUi = ((TextView) view.findViewById(R.id.title));if (title != null) {titleUi.setText(title);} else {titleUi.setText(&&);}String snippet = marker.getSnippet();TextView snippetUi = ((TextView) view.findViewById(R.id.snippet));if (snippet != null) {snippetUi.setText(snippet);} else {snippetUi.setText(&&);}}/*** marker点击时跳动一下*/public void jumpPoint(final Marker marker, final LatLng latLng) {final Handler handler = new Handler();final long start = SystemClock.uptimeMillis();Projection proj = aMap.getProjection();Point startPoint = proj.toScreenLocation(latLng);startPoint.offset(0, -100);final LatLng startLatLng = proj.fromScreenLocation(startPoint);final long duration = 1500;final Interpolator interpolator = new BounceInterpolator();handler.post(new Runnable() {@Overridepublic void run() {long elapsed = SystemClock.uptimeMillis() -float t = interpolator.getInterpolation((float) elapsed/ duration);double lng = t * latLng.longitude + (1 - t)* startLatLng.double lat = t * latLng.latitude + (1 - t)* startLatLng.marker.setPosition(new LatLng(lat, lng));if (t & 1.0) {handler.postDelayed(this, 16);}}});}/*** 把一个view转化成bitmap对象*/public static Bitmap getViewBitmap(View view) {view.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());view.buildDrawingCache();Bitmap bitmap = view.getDrawingCache();}/*** 把一个xml布局文件转化成view*/public View getView(String title, String text) {View view = getLayoutInflater().inflate(R.layout.marker, null);// TextView text_title = (TextView)// view.findViewById(R.id.marker_title);//textViewLocationInfo = (TextView) view.findViewById(R.id.marker_text);// text_title.setText(title);//textViewLocationInfo.setText(text);}/*** 方法必须重写*/@Overrideprotected void onResume() {super.onResume();mapView.onResume();}/*** 方法必须重写*/@Overrideprotected void onPause() {super.onPause();locationSource.deactivate();mapView.onPause();}/*** 方法必须重写*/@Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);mapView.onSaveInstanceState(outState);}/*** 方法必须重写*/@Overrideprotected void onDestroy(){super.onDestroy();mapView.onDestroy();}}
最新教程周点击榜
微信扫一扫高德地图 -
- ITeye技术网站
摘 要:关于地图的显示,我想大家最关心的就是麻点图,自定义底图的解决方案了吧。在过去,marker大于500之后,浏览器开始逐渐卡死,大家都开始寻找 解决方案,比如聚合marker啊,比如麻点图啊。聚合marker里面还有一些复杂的算法,而麻点图,最让大家头疼的,就是如何生成麻点图,如何切图, 如何把图片贴到地图上,还有如何定位图片的位置吧。以前那么复杂的一系列操作,居然让云图的可视化操作一下子解决了。现在只要点一点鼠标,麻点图就自动生 成了。真是广大LBS开发者的福音。
以 前写过从零开始学百度地图API系列,写得比较浅显。如今,自己在LBS领域成长了几年,学到比较多的专业知识,所以此次再次写到”从零系列”,希望加上 更多功能,更多想法。比如这期的地图展现,不单单只是告诉大家,一张2D地图如何用代码写出来,同时,还会加上3D地图,卫星图,街景,交通流量图,麻点 图,仙剑奇侠传地图等。也希望借此可以和大家更多的交流。
-----------------------------------------------------------------------
一、先第一步,当然是申请一个key。
申请key:/datamanager/index.html
登录之后,点新建地图,就有一个自动的key了。
key在右上角密钥管理处
二、 2D地图
2D地图,就是一张普通的高德地图。只需要简单几句话就可以实现。
var mapOvar point = new AMap.LngLat(120.422);function mapInit(){
//初始化地图对象,加载地图。
mapObj = new AMap.Map("iCenter"{
center : point //地图中心点
level : 15
//地图显示的缩放级别
其中,level指的是地图级别,默认为[318]。3为世界地图,18为街道级地图。
center指的是地图的中心点,可以用坐标拾取工具来取点。坐标拾取工具:
/amap/picpoint.html
2D效果图:
三、实时路况
添加实时路况,只需要两句话
var trafficLayer = new AMap.TileLayer.Traffic({zIndex:10}); //实时路况图层trafficLayer.setMap(mapObj);
//添加实时路况图层
消除实时路况有2种方法,一是隐藏hide方法,二是重置地图setMap(null)
trafficLayer.setMap(null);
//隐藏实时路况图层trafficLayer.hide();
//隐藏实时路况图层
实时路况效果:
四、路网,卫星图
路网、卫星图,都跟实时路况路况差不多,只是换了个类名。
添加路网、卫星图,只需要两句话
var roadNetLayer = new AMap.TileLayer.RoadNet({zIndex:10}); //实例化路网图层roadNetLayer.setMap(mapObj); //在map中添加路网图层var satellLayer = new AMap.TileLayer.Satellite({zIndex:10}); //实例化卫星图satellLayer.setMap(mapObj); //在map中添加卫星图
消除路网、卫星图,有2种方法,一是隐藏hide方法,二是重置地图setMap(null)
roadNetLayer.setMap(null); //隐藏路网roadNetLayer.hide(); //隐藏路网satellLayer.setMap(null);
//隐藏卫星图satellLayer.hide();
//隐藏卫星图
路网、卫星图效果:
五、3D地图
3D地图,是在地图比较详细的级别17-18的时候,有三维楼块效果的地图。
所以,要看到3D效果,必须把地图级别调整到17-18才可以看到。
var buildingLayer = new AMap.Buildings(); //实例化3D地图图层buildingLayer.setMap(mapObj); //在map中添加3D图层mapObj.setZoom(18); //改变地图级别到17-18
3D地图没有hide方法,所以隐藏他,需要重置地图。
buildingLayer.setMap(null);
3D地图效果:
六、麻点图
(记得以前研究百度地图API的时候,麻点图的制作很苦难,要自己去对准坐标,自己生成麻点图,然后自己切片……实在费力……)
高德地图API最好用的就是麻点图。不用自己生成麻点图,不用自己切图。只需要在云图上点一点,就可以完成所有操作。
打开云图管理台:/datamanager/index.html
新建或打开已有的地图:
点右上角的按钮,可以手工一个一个标注你自己的麻点。
当然也可以批量导入你的数据。
数据填充完毕后,记录下你的tableid。这就是你的云图层(麻点图)的id,放到下面的代码里。
// 加载云图层插件
mapObj.plugin('AMap.CloudDataLayer' function () {
var layerOptions = {
query:{keywords: ''}
clickable:true
var cloudDataLayer = new AMap.CloudDataLayer('【您的tableid】' layerOptions); //实例化云图层类
cloudDataLayer.setMap(mapObj); //叠加云图层到地图
云图层,就是麻点图,是实时渲染的,你在云图管理台操作之后,立马在你的前台得到显示。
这真是我用过最好用的麻点图了。marker大于500之后,终于有如此方便的解决方案了。
更多关于云图的教程,可以看我以前发过的教程
云存储:/milkmap/p/3623775.html
三甲医院例子:/milkmap/p/3637899.html
东莞酒店例子:/milkmap/p/3657829.html
七、仙剑地图
这个算是投机取巧,将仙剑地图直接覆盖在高德地图上,属于图片覆盖物。
图片覆盖物需要指定一个显示范围,取左下角和右上角。
显示范围设定后,不管地图放大缩小,图片都只在这个范围中显示。
这样的图片覆盖物,比较适合制作校园地图,厂区地图,小区地图等。
而且,跟云图一样,图片覆盖物不需要切图。
(又想感叹一句!真真是开发者的福音!为何高德API做得那么好,之前我都不知道!!)
var bounds = new AMap.Bounds(new AMap.LngLat(120.596) new AMap.LngLat(120.171))
groundImageOpts = {
opacity: 1
//图片透明度
clickable: true//图片相应鼠标点击事件,默认:false
map: mapObj
//图片叠加的地图对象
//实例化一个图片覆盖物对象
var groundImage = new AMap.GroundImage('xianjian.jpg' bounds groundImageOpts);
仙剑地图效果:
八、自定义地图
这里用谷歌的底图作为例子,将高德底图直接换为谷歌底图。跟上一段的内容不一样,不是图片覆盖物那么简单哦。
高德的切图方式,和谷歌的一样。所以,在网上找的谷歌地图的切图工具,都可以适用于高德地图。
google = new AMap.TileLayer({
tileUrl:"http://mt{1230}./vt/lyrs=m@142&hl=zh-CN&gl=cn&x=[x]&y=[y]&z=[z]&s=Galil"//图块取图地址
google.setMap(mapObj);
谷歌地图:
高德地图街景覆盖城市共33个,分别为:杭州,南京,成都,西安,拉萨,昆明,烟台,沈阳,哈尔滨,长春,常州,南通,林芝,泰安,日照,那曲,东营,日喀则,德州,滨州,聊城,莱芜,郑州,洛阳,平顶山,开封,安阳,信阳,新乡,焦作,商丘,周口,驻马店。
使用街景,必须将您的网页文件传到服务器上。
var opts = {
heading:270
position: point
position,就是街景的位置,必须在33个城市有街景的范围内,才能看到街景哦。 可以先到amap上看一眼,哪里有街景,然后再设置您的街景位置。高德地图 /
街景效果:
十、全部源代码,请点击这里:
&!DOCTYPE HTML&&html&&head&&meta http-equiv="Content-Type" content="text/ charset=utf-8"&&title&地图展示&/title&&link rel="stylesheet" type="text/css" href="zero.css" /&&script language="javascript" src="/maps?v=1.2&key=【您的key】"&&/script&&/head&&body onLoad="mapInit()"&
&div id="iCenter"&&/div&
&div id="iControlbox"&
&p id="lnglat"&&/p&
&button onclick="to2D();"&2D地图&/button&
&p&是一张普通的地图,地图级别是13。&/p&
&button onclick="addTraffic();"&实时路况&/button&
&p&叠加上实时交通,路况信息。红色最堵。&/p&
&button onclick="addRoadNetLayer();"&路网&/button&
&p&叠加上路网&/p&
&button onclick="yunLayer();"&麻点图&/button&
&p&麻点图,就是云图的云图层显示。&/p&
&button onclick="addsatellLayer();"&卫星图&/button&
&p&换上卫星图&/p&
&button onclick="addBuildingLayer();"&3D地图&/button&
&p&显示3D楼块,只有地图级别在会显示。&/p&
&button onclick="googlMap();"&自定义底图&/button&
&p&自定义底图,是需要自己切图的。这里展示了谷歌的底图。&/p&
&button onclick="xianjianLayer();"&仙剑地图&/button&
&p&显示的仙剑地图,感觉很帅。其实这是一个图片覆盖物,而不是图层。&/p&
&button onclick="jiejing();"&街景&/button&
&p&显示街景,点了这个要刷新才能回来,哈哈。&/p&
&/div&&!-- tongji begin--&&script type="text/javascript"&var _bdhmProtocol = (("https:" == document.location.protocol) ? " https://" : " http://");document.write(unescape("%3Cscript src='" + _bdhmProtocol + "/h.js%3Faeff88fafcea3bd' type='text/javascript'%3E%3C/script%3E"));&/script&&!-- tongji end --&&/body&&script language="javascript"&var mapOvar point = new AMap.LngLat(120.422);var buildingLayer = new AMap.Buildings(); //实例化3D地图图层var trafficLayer = new AMap.TileLayer.Traffic({zIndex:10}); //实时路况图层var roadNetLayer = new AMap.TileLayer.RoadNet({zIndex:10}); //实例化路网图层var satellLayer = new AMap.TileLayer.Satellite({zIndex:10}); //实例化卫星图function mapInit(){
//初始化地图对象,加载地图。
mapObj = new AMap.Map("iCenter"{
center : point //地图中心点
level : 15
//地图显示的缩放级别
AMap.event.addListener(mapObj'click'getLnglat); //点击事件}//鼠标点击,获取经纬度坐标
function getLnglat(e){
var x = e.lnglat.getLng();
var y = e.lnglat.getLat();
document.getElementById("lnglat").innerHTML = x + "" +
}function addBuildingLayer(){
buildingLayer.setMap(mapObj); //在map中添加3D图层
satellLayer.setMap(null);
//隐藏卫星图
//cloudDataLayer.setMap(null);
mapObj.setZoom(18);}function addTraffic(){
//交通,实时路况
trafficLayer.setMap(mapObj);
//添加实时路况图层
roadNetLayer.setMap(null);
//隐藏路网图层
satellLayer.setMap(null);
//隐藏卫星图
//cloudDataLayer.setMap(null);
mapObj.setZoom(15);}function addRoadNetLayer(){
roadNetLayer.setMap(mapObj); //在map中添加路网图层
trafficLayer.setMap(null);
//隐藏实时路况图层
satellLayer.setMap(null);
//隐藏卫星图
//cloudDataLayer.setMap(null);
mapObj.setZoom(15);}function to2D(){
buildingLayer.setMap(null);
roadNetLayer.setMap(null);
trafficLayer.setMap(null);
mapObj.setZoom(15);
groundImage.hide();
google.setMap(null);
//cloudDataLayer.setMap(null);}function addsatellLayer(){
satellLayer.setMap(mapObj); //在map中添加卫星图
buildingLayer.setMap(null);
roadNetLayer.setMap(null);
trafficLayer.setMap(null);
//cloudDataLayer.setMap(null);
mapObj.setZoom(18);}function yunLayer(){
buildingLayer.setMap(null);
roadNetLayer.setMap(null);
trafficLayer.setMap(null);
mapObj.setZoom(15);
//groundImage.hide();
//加载云图层插件
mapObj.plugin('AMap.CloudDataLayer' function () {
var layerOptions = {
query:{keywords: ''}
clickable:true
var cloudDataLayer = new AMap.CloudDataLayer('b1' layerOptions); //实例化云图层类
cloudDataLayer.setMap(mapObj); //叠加云图层到地图
});}function xianjianLayer(){
var bounds = new AMap.Bounds(new AMap.LngLat(120.596) new AMap.LngLat(120.171))
groundImageOpts = {
opacity: 1
//图片透明度
clickable: true//图片相应鼠标点击事件,默认:false
map: mapObj
//图片叠加的地图对象
//实例化一个图片覆盖物对象
var groundImage = new AMap.GroundImage('xianjian.jpg' bounds groundImageOpts);
//mapObj.setBounds(bounds);
mapObj.setZoom(15);}function googlMap(){
buildingLayer.setMap(null);
//mapObj.setZoom(15);
google = new AMap.TileLayer({
tileUrl:"http://mt{1230}./vt/lyrs=m@142&hl=zh-CN&gl=cn&x=[x]&y=[y]&z=[z]&s=Galil"//图块取图地址
google.setMap(mapObj);
}function jiejing(){
var opts = {
heading:270
position: point
var panorama = new AMap.Panorama('iCenter'opts); }&/script&&/html&
浏览: 261022 次
来自: 杭州
为什么都是只有问没有答,哭晕在厕所
不完整,缺com.tcs.org.demostic.pub.u ...