angular2 怎么应用高德地图api 定位定位?求高手

手把手叫你如何集成高德地图,实现地图显示、定位蓝点、大头针显示、获取周围地点信息等
因项目需求,之前用的百度地图被pass,全部换位高德地图,经过不断的走坑,实现了地图的显示、定位蓝点、大头针显示、周围地理信息等
一、首先请各位要做高德的地图之前用心的去阅读下高德地图开放平台的技术文档,这个是最基本的准备,**
最重要的一点,如果想在地图界面调用相机、扫码等功能请集成3D地图,因为高德地底部是GLSurfaceView和TextureView
他俩都是地图容器,使用GLSurfaceView当你调用相机时会出现穿透或者冲突等问题,需要使用TextureView(存在于3D地图的SDK下)
本问基于3D地图SDK下:
1.显示地图:
1,进程第三方的SDK第一步注册账号、注册应用,获取appkey,如下:
2,获取到appkey 后,需要配置 AndroidManifest.xml:
//地图SDK(包含其搜索功能)需要的基础权限
&!--允许程序打开网络套接字--&
&uses-permissionandroid:name="android.permission.INTERNET" /&
&!--允许程序设置内置sd卡的写权限--&
&uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE" /&
&!--允许程序获取网络状态--&
&uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE" /&
&!--允许程序访问WiFi网络信息--&
&uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE" /&
&!--允许程序读写手机状态和身份--&
&uses-permissionandroid:name="android.permission.READ_PHONE_STATE" /&
&!--允许程序访问CellID或WiFi热点来获取粗略的位置--&
&uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION" /&
然后,设置高德Key
在application标签中加入如下内容:
//开发者申请的key
&meta-data android:name="com.amap.api.v2.apikey" android:value="key"&&/meta-data&
3.向工程中添加地图开发包 (我做的是2D的不用添加so等文件,如果3D的需要放so文件等)
在Eclipse环境下:
步骤1:开发工程中新建“ libs ”文件夹,将地图包(2D或3D)、搜索包拷贝到 libs 的根目录下。若选择3D地图包,还需要将各库文件夹一起拷贝。拷贝完成后的工程目录(以3D V2.2.0为例)如图所示:
4,初始化地图容器;在你的布局文件中放入如下:
&com.amap.api.maps.MapView
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"/&
在Activity中绑定布局,并显示:
publicclassMainActivityextendsActivity{
MapView mMapView =
protectedvoidonCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);//获取地图控件引用
mMapView = (MapView) findViewById(R.id.map); //在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图
mMapView.onCreate(savedInstanceState);
protectedvoidonDestroy(){
super.onDestroy();//在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图
mMapView.onDestroy();
protectedvoidonResume(){
super.onResume();//在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图
mMapView.onResume();
protectedvoidonPause(){
super.onPause();//在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制
mMapView.onPause();
protectedvoidonSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);//在activity执行onSaveInstanceState时执行
mMapView.onSaveInstanceState (outState),保存地图当前的状态
mMapView.onSaveInstanceState(outState); }
5.显示地图
//定义了一个地图
viewmapView = (MapView) findViewById(R.id.map);
mapView.onCreate(savedInstanceState);// 此方法须覆写,虚拟机需要在很多情况下保存地图绘制的当前状态。
//初始化地图控制器对象
AMap aMif (aMap == null) {
aMap = mapView.getMap();
即可完成地图的显示。
二、定位小蓝点显示
//设置成中文地图
aMap.setMapLanguage(AMap.CHINESE);
// 自定义系统定位小蓝点
MyLocationStyle myLocationStyle = new MyLocationStyle();
myLocationStyle.myLocationIcon(BitmapDescriptorFactory
.fromResource(R.drawable.local));// 设置小蓝点的图标
myLocationStyle.strokeColor(Color.BLACK);// 设置圆形的边框颜色
myLocationStyle.radiusFillColor(Color.argb(100, 0, 0, 180));// 设置圆形的填充颜色
// myLocationStyle.anchor(int,int)//设置小蓝点的锚点
myLocationStyle.strokeWidth(2.0f);// 设置圆形的边框粗细
aMap.setMyLocationStyle(myLocationStyle); // 将自定义的 myLocationStyle 对象添加到地图上
aMap.setLocationSource(this);// 设置定位监听
,会实现两个方法activate()、 deactivate(),在两个方法中进行操作
aMap.getUiSettings().setMyLocationButtonEnabled(true);// 设置默认定位按钮是否显示
aMap.getUiSettings().setZoomControlsEnabled(false);
//设置缩放按钮是否显示
aMap.setMyLocationEnabled(true);// 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false
//aMap.setOnCameraChangeListener(this);// 对amap添加移动地图事件监听器
会回调此方法
public void activate(OnLocationChangedListener arg0) {
mListener = arg0;
if (mlocationClient == null) {
mlocationClient = new AMapLocationClient(this);
mLocationOption = new AMapLocationClientOption();
mLocationOption.setNeedAddress(true);
//设置定位监听
mlocationClient.setLocationListener(this);
//定位成功会回调onLocationChanged()方法
//设置为高精度定位模式
mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
//设置定位参数
mlocationClient.setLocationOption(mLocationOption);
// 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗,
// 注意设置合适的定位时间的间隔(最小间隔支持为2000ms),并且在合适时间调用stopLocation()方法来取消定位请求
// 在定位结束后,在合适的生命周期调用onDestroy()方法
// 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除
mlocationClient.startLocation();
public void deactivate() {
mListener =
if (mlocationClient != null) {
mlocationClient.stopLocation();
mlocationClient.onDestroy();
mlocationClient =
//定位成功回调此方法
public void onLocationChanged(AMapLocation amapLocation) {
if (mListener != null && amapLocation != null) {
if (amapLocation != null
&& amapLocation.getErrorCode() == 0) {
mListener.onLocationChanged(amapLocation);// 显示系统小蓝点
aMap.moveCamera(CameraUpdateFactory.zoomTo(15));
//设置显示级数//将视图中心点自动移动到次此置
aMap.moveCamera(CameraUpdateFactory.changeLatLng(new LatLng(amapLocation.getLatitude(), amapLocation.getLongitude())));
deactivate();
//我只定位了一次,所以成功之后就调用此方法,如果想一直重复定位不需要写此方法
Log.e("--Main--", localAddress);
String errText = "定位失败," + amapLocation.getErrorCode()+ ": " + amapLocation.getErrorInfo();
Log.e("AmapErr",errText);
即可实现当前定位蓝点的显示,如图。
三、大头针显示,
1.获取当前位置的周边的大头针信息坐标,需要在上面已经定位成功的回调方法onLocationChanged()内调用doSearchQuery();方法,需要传城市名称,经度、纬度,如下;
private void doSearchQuery(String city,double latitude,double longitude){
//Log.e("--Main--","doSearchQuery()");
mCloudSearch = new CloudSearch(this);// 初始化查询类
mCloudSearch.setOnCloudSearchListener(this);// 设置回调函数 会回调两个方法onCloudItemDetailSearched()和onCloudSearched()一般在onCloudSearched中操作即可,
// 设置中心点及检索范围
SearchBound bound = new SearchBound(new LatLonPoint(latitude,longitude), 4000);
//设置查询条件,mTableID是将数据存储到数据管理台后获得。
mQuery = new CloudSearch.Query("59141ef37bbf197dd1873504", "", bound);
mCloudSearch.searchCloudAsyn(mQuery);// 异步搜索
} catch (AMapException e) {
// TODO Auto-generated catch blocke.printStackTrace();
//回调的方法
public void onCloudItemDetailSearched(CloudItemDetail item, int rCode) {
//在此方法会获取到周边的数据,进行操作即可
public void onCloudSearched(CloudResult result, int rCode) {
mCloudItems = result.getClouds();
if (mCloudItems != null && mCloudItems.size() & 0) {
for (CloudItem item : mCloudItems) {
//循环遍历获取数据//Log.e("--Main--", item.getTitle());
//Log.e("--Main--", "纬度为"+item.getLatLonPoint().getLatitude());
//Log.e("--Main--", "经度为"+item.getLatLonPoint().getLongitude());
//调用addMarker()方法添加大头针。
aMap.addMarker(new MarkerOptions().position(new LatLng(item.getLatLonPoint().getLatitude(),item.getLatLonPoint().getLongitude()))
.title(item.getTitle()).icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory
.decodeResource(getResources(),R.drawable.danchepic))));
2、随着屏幕移动,获取指定位置的周围标识信息的坐标,首先需要在初始化地图时添加监听如下:
aMap.setOnCameraChangeListener(this);// 对amap添加移动地图事件监听器,会回调onCameraChange()和onCameraChangeFinish(),如下:
/*** 对正在移动地图事件回调*/
public void onCameraChange(CameraPosition cameraPosition) {}
/*** 对移动地图结束事件回调*
/@Override
public void onCameraChangeFinish(CameraPosition cameraPosition) {
LatLng latLng = cameraPosition.
//泥逆地理
geocoderSearch = new GeocodeSearch(this);
geocoderSearch.setOnGeocodeSearchListener(this);
// 第一个参数表示一个Latlng,第二参数表示范围多少米,第三个参数表示是火系坐标系还是GPS原生坐标系
RegeocodeQuery query = new RegeocodeQuery(new LatLonPoint(latLng.latitude,latLng.longitude), 200,GeocodeSearch.AMAP);
geocoderSearch.getFromLocationAsyn(query);
//清除上一次的定位Marker
;aMap.clear();
aMap.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));/将定位图标移动到当前屏幕中心位置
aMap.addMarker(new MarkerOptions().position(cameraPosition.target).icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory
.decodeResource(getResources(),
R.drawable.icon_marka))));
//增加蓝色圆圈,可自定义
aMap.addCircle(new CircleOptions() .center(new LatLng(latLng.latitude, latLng.longitude))
.radius(300).strokeColor(// Color.argb(50, 1, 1, 1)Color.RED)
.fillColor(Color.argb(50, 1, 1, 1)).strokeWidth(5));
//执行搜索方法
doSearchQuery("北京",latLng.latitude,latLng.longitude);
通过以上即可实现大头针效果,如图:
四、周围的标志性建筑
首先两种需求,一种是当定位当前位置成功后获取当前位置周边的标志性建筑;另一种是随着屏幕滑动,想展示特点某个位置周边的标志性建筑
1、获取当前位置的周边的大头针薪资坐标,需要在上面已经定位成功的回调方法,onLocationChanged()内调用doSearchQuery();方法,写一个list作为每个标志性建筑的item展示,开始进行poi搜索
* 开始进行poi搜索
protected void doSearchQuery(String city,double latitude,double longitude) {
String mType="汽车服务|汽车销售|汽车维修|摩托车服务|餐饮服务|购物服务|生活服务|体育休闲服务|医疗保健服务|住宿服务|风景名胜|商务住宅|政府机构及社会团体|科教文化服务|交通设施服务|金融保险服务|公司企业|道路附属设施|地名地址信息|公共设施";
query = new PoiSearch.Query("", mType, city);// 第一个参数表示搜索字符串,第二个参数表示poi搜索类型,第三个参数表示poi搜索区域(空字符串代表全国)
query.setPageSize(20);// 设置每页最多返回多少条poiitem
query.setPageNum(1);// 设置查第一页
poiSearch = new PoiSearch(this, query);
poiSearch.setOnPoiSearchListener(this);
//以当前定位的经纬度为准搜索周围5000米范围
// 设置搜索区域为以lp点为圆心,其周围5000米范围
poiSearch.setBound(new PoiSearch.SearchBound(new LatLonPoint(latitude,longitude), 1000, true));//
poiSearch.searchPOIAsyn();// 异步搜索
//回调的方法
public void onPoiItemSearched(PoiItem arg0, int arg1) {
public void onPoiSearched(PoiResult result, int arg1) {
// TODO Auto-generated method stub
if(arg1==1000){
if (result != null && result.getQuery() != null) {// 搜索poi的结果
if (result.getQuery().equals(query)) {// 是否是同一条
List&PoiItem& poiItems = result.getPois();// 取得第一页的poiitem数据,页数从数字0开始
List&PoiBean& tem=new ArrayList();
if (poiItems != null && poiItems.size() & 0) {
for (int i = 0; i & poiItems.size(); i++) {
PoiItem poiItem = poiItems.get(i);
//写一个bean,作为数据存储
PoiBean bean=new PoiBean();
bean.setTitleName(poiItem.getTitle());
bean.setCityName(poiItem.getCityName());
bean.setAd(poiItem.getAdName());
bean.setSnippet(poiItem.getSnippet());
bean.setPoint(poiItem.getLatLonPoint());
Log.e("yufs",""+poiItem.getTitle()+","+poiItem.getProvinceName()+","
+poiItem.getCityName()+","
+poiItem.getAdName()+","//区
+poiItem.getSnippet()+","
+poiItem.getLatLonPoint()+"\n");
tem.add(bean);
poiData.addAll(tem);
mAdapter.notifyDataSetChanged();
//解析成功更新list布局
2.随着屏幕移动,获取指定位置的周围标志性建筑,和上面的大头针一样,也是在移动地图结束后调用doSearchQuery()方法,进行poi检索,就不意义叙述了
最后效果图如下:
以上就是吧基本功能显示完成了,有一些细节东西没有全部写出来,希望这些对初次集成地图的童鞋有帮助,如果发现问题请联系我qq:,欢迎指教。
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!15:00 提问
高德AMap not defined
我用的ionic2配合的angular2, 在html中引入了高德地图后,在ts中声明AMap总是报错说AMap not defined
请问各位这个bug怎么解决???
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐想做一只灵活的胖子
利用高德地图API实现定位功能
① 注册高德地图的开发者,获取key过程如图②下载SDK,导入jar包注意这里要导入高德地图定位SDK的jar包!!!如果你先前导入过地图SDK(如2D,3D地图的SDK)再导入定位的SDK运行时就会报错,包名重复!解决方法:删除所有jar包,只导入定位SDK的jar包③配置AndroidManifes.xml文件权限 + service + 密钥&uses-permission android:name="android.permission.INTERNET" /&
&uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /&
&uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /&
&uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /&
&uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /&
&application
......................
&service android:name="com.amap.api.location.APSService" /&
&meta-data
android:name="com.amap.api.v2.apikey"
android:value="你先前申请的key" /&
&/application&④布局文件&com.amap.api.maps2d.MapView
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"&&/com.amap.api.maps2d.MapView&⑤MainActivity.java结合了大佬代码和官方Demo继承的PermissionsActivity为官方Demo的权限申请类public class MainActivity extends PermissionsActivity implements LocationSource,AMapLocationListener {
private MapView mapView;
private AMap aMap;
private AMapLocationClient mLocationClient = //定位发起端
private AMapLocationClientOption mLocationClientOption = //定位参数
private OnLocationChangedListener mListener = //定位监听器
private boolean isFirstLoc =
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mapView = (MapView) findViewById(R.id.map);//找到地图控件
//在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图
mapView.onCreate(savedInstanceState);
aMap = mapView.getMap();//初始化地图控制器对象
//设置显示定位按钮 并且可以点击
UiSettings settings = aMap.getUiSettings();
//设置定位监听
aMap.setLocationSource(this);
//是否显示定位按钮
settings.setMyLocationButtonEnabled(true);
//是否可触发定位并显示定位层
aMap.setMyLocationEnabled(true);
//设置定位点的图标
默认为蓝色小点
MyLocationStyle myLocationStyle = new MyLocationStyle();
aMap.setMyLocationStyle(myLocationStyle);
//开始定位
initLoc();
private void initLoc() {
//初始化定位
mLocationClient = new AMapLocationClient(getApplicationContext());
//设置定位回调监听
mLocationClient.setLocationListener(this);
//初始化参数定位
mLocationClientOption = new AMapLocationClientOption();
//设置定位模式
mLocationClientOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
//设置是否返回地址信息,默认返回
mLocationClientOption.setNeedAddress(true);
//设置是否强制刷新WIFI,默认强制
mLocationClientOption.setWifiScan(true);
//设置定位间隔
mLocationClientOption.setInterval(<span style="color:#);
//给定客户端对象设置定位参数
mLocationClient.setLocationOption(mLocationClientOption);
//启动定位
mLocationClient.startLocation();
//定位回调函数 必须重写
public void onLocationChanged(AMapLocation aMapLocation) {
if (aMapLocation != null) {
if (aMapLocation.getErrorCode() == 0) {
//定位成功 回调信息 设置相关信息
aMapLocation.getLocationType();//获取定位结果来源
aMapLocation.getLatitude();//获取纬度
aMapLocation.getLongitude();//获取经度
aMapLocation.getAccuracy();//获取精确信息
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date(aMapLocation.getTime());
df.format(date);
aMapLocation.getAddress();//地址,如果option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息。
aMapLocation.getCountry();//国家信息
aMapLocation.getProvince();//省信息
aMapLocation.getCity();//城市信息
aMapLocation.getDistrict();//城区信息
aMapLocation.getStreet();//街道信息
aMapLocation.getStreetNum();//街道门牌号信息
aMapLocation.getCityCode();//城市编码
aMapLocation.getAdCode();//地区编码
if (isFirstLoc) {
//缩放级别
aMap.moveCamera(CameraUpdateFactory.zoomTo(17));
//将地图移动到定位点
aMap.moveCamera(CameraUpdateFactory.changeLatLng(
new LatLng(aMapLocation.getLatitude(), aMapLocation.getLongitude())));
//点击定位按钮 能够将地图的中心点移动到定位点
mListener.onLocationChanged(aMapLocation);
isFirstLoc =
//显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
Log.e("AmapError", "location Error, ErrCode:"
+ aMapLocation.getErrorCode() + ", errInfo:"
+ aMapLocation.getErrorInfo());
Toast.makeText(getApplicationContext(), "定位失败", Toast.LENGTH_LONG).show();
//激活定位
public void activate(OnLocationChangedListener listener) {
mListener = listener;
//停止定位
public void deactivate() {
mListener =
* 方法必须重写
protected void onResume() {
super.onResume();
mapView.onResume();
* 方法必须重写
protected void onPause() {
super.onPause();
mapView.onPause();
* 方法必须重写
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
* 方法必须重写
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
}⑥PermissionsActivity.java新建一个java文件,或者可以直接从官方Demo中拷贝过来........\AMap_Android_Demo\AMap_Android_API_Location_Demo\android_studio\AMapLocationDemo\app\src\main\java\com\amap\location\demo\CheckPermissionsActivity.java以下代码为精简过的CheckPermissionsActivity.javapublic class PermissionsActivity extends Activity {
* 需要进行检测的权限数组
protected String[] needPermissions = {
//在这里添加你所需的权限
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION,
private static final int PERMISSON_REQUESTCODE = 0;
* 判断是否需要检测,防止不停的弹框
private boolean isNeedCheck =
protected void onResume() {
super.onResume();
if (Build.VERSION.SDK_INT &= 23
&& getApplicationInfo().targetSdkVersion &= 23) {
if (isNeedCheck) {
checkPermissions(needPermissions);
* @param permissions
* @since 2.5.0
private void checkPermissions(String... permissions) {
if (Build.VERSION.SDK_INT &= 23
&& getApplicationInfo().targetSdkVersion &= 23) {
List&String& needRequestPermissonList = findDeniedPermissions(permissions);
if (null != needRequestPermissonList
&& needRequestPermissonList.size() & 0) {
String[] array = needRequestPermissonList.toArray(new String[needRequestPermissonList.size()]);
Method method = getClass().getMethod("requestPermissions", new Class[]{String[].class,
int.class});
method.invoke(this, array, PERMISSON_REQUESTCODE);
} catch (Throwable e) {
* 获取权限集中需要申请权限的列表
* @param permissions
* @since 2.5.0
private List&String& findDeniedPermissions(String[] permissions) {
List&String& needRequestPermissonList = new ArrayList&String&();
if (Build.VERSION.SDK_INT &= 23
&& getApplicationInfo().targetSdkVersion &= 23){
for (String perm : permissions) {
Method checkSelfMethod = getClass().getMethod("checkSelfPermission", String.class);
Method shouldShowRequestPermissionRationaleMethod = getClass().getMethod("shouldShowRequestPermissionRationale",
String.class);
if ((Integer)checkSelfMethod.invoke(this, perm) != PackageManager.PERMISSION_GRANTED
|| (Boolean)shouldShowRequestPermissionRationaleMethod.invoke(this, perm)) {
needRequestPermissonList.add(perm);
} catch (Throwable e) {
return needRequestPermissonList;
* 检测是否所有的权限都已经授权
* @param grantResults
* @since 2.5.0
private boolean verifyPermissions(int[] grantResults) {
for (int result : grantResults) {
if (result != PackageManager.PERMISSION_GRANTED) {
@TargetApi(23)
public void onRequestPermissionsResult(int requestCode,
String[] permissions, int[] paramArrayOfInt) {
if (requestCode == PERMISSON_REQUESTCODE) {
if (!verifyPermissions(paramArrayOfInt)) {
isNeedCheck =
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!19:41 提问
怎么利用高德地图的定位功能实现在自己的地图的定位(校园导航app)
怎么通过高德地图的坐标值实现在自己的校园平面图的定位功能,不需要有什么导航功能,只需要能够知道自己当前处在学校地图的哪个位置,这得怎么实现?求解
按赞数排序
package com.example.navi_
import android.os.B
import android.support.v7.app.AppCompatA
import android.util.L
import android.widget.T
import com.amap.api.location.AMapL
import com.amap.api.location.AMapLocationC
import com.amap.api.location.AMapLocationClientO
import com.amap.api.location.AMapLocationL
import com.amap.api.maps.AM
import com.amap.api.maps.CameraUpdateF
import com.amap.api.maps.LocationS
import com.amap.api.maps.MapV
import com.amap.api.maps.UiS
import com.amap.api.maps.model.LatL
import java.text.SimpleDateF
import java.util.D
public class MainActivity extends AppCompatActivity implements LocationSource, AMapLocationListener {
//AMap是地图对象
private AMap aM
private MapView mapV
//声明AMapLocationClient类对象,定位发起端
private AMapLocationClient mLocationClient =
//声明mLocationOption对象,定位参数
public AMapLocationClientOption mLocationOption =
//声明mListener对象,定位监听器
private OnLocationChangedListener mListener =
//标识,用于判断是否只显示一次定位信息和用户重新定位
private boolean isFirstLoc =
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取地图控件引用
mapView = (MapView) findViewById(R.id.map);
//在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),实现地图生命周期管理
mapView.onCreate(savedInstanceState);
if (aMap == null) {
aMap = mapView.getMap();
//设置显示定位按钮 并且可以点击
UiSettings settings = aMap.getUiSettings();
aMap.setLocationSource(this);//设置了定位的监听
// 是否显示定位按钮
settings.setMyLocationButtonEnabled(true);
aMap.setMyLocationEnabled(true);//显示定位层并且可以触发定位,默认是flase
//开始定位
location();
private void location() {
//初始化定位
mLocationClient = new AMapLocationClient(getApplicationContext());
//设置定位回调监听
mLocationClient.setLocationListener(this);
//初始化定位参数
mLocationOption = new AMapLocationClientOption();
//设置定位模式为Hight_Accuracy高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式
mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
//设置是否返回地址信息(默认返回地址信息)
mLocationOption.setNeedAddress(true);
//设置是否只定位一次,默认为false
mLocationOption.setOnceLocation(false);
//设置是否强制刷新WIFI,默认为强制刷新
mLocationOption.setWifiActiveScan(true);
//设置是否允许模拟位置,默认为false,不允许模拟位置
mLocationOption.setMockEnable(false);
//设置定位间隔,单位毫秒,默认为2000ms
mLocationOption.setInterval(2000);
//给定位客户端对象设置定位参数
mLocationClient.setLocationOption(mLocationOption);
//启动定位
mLocationClient.startLocation();
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
mapView.onDestroy();
mLocationClient.stopLocation();//停止定位
mLocationClient.onDestroy();//销毁定位客户端。
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView.onResume (),实现地图生命周期管理
mapView.onResume();
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView.onPause (),实现地图生命周期管理
mapView.onPause();
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),实现地图生命周期管理
mapView.onSaveInstanceState(outState);
public void onLocationChanged(AMapLocation aMapLocation) {
if (aMapLocation != null) {
if (aMapLocation.getErrorCode() == 0) {
//定位成功回调信息,设置相关消息
aMapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见官方定位类型表
aMapLocation.getLatitude();//获取纬度
aMapLocation.getLongitude();//获取经度
aMapLocation.getAccuracy();//获取精度信息
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date(aMapLocation.getTime());
df.format(date);//定位时间
aMapLocation.getAddress();//地址,如果option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息。
aMapLocation.getCountry();//国家信息
aMapLocation.getProvince();//省信息
aMapLocation.getCity();//城市信息
aMapLocation.getDistrict();//城区信息
aMapLocation.getStreet();//街道信息
aMapLocation.getStreetNum();//街道门牌号信息
aMapLocation.getCityCode();//城市编码
aMapLocation.getAdCode();//地区编码
// 如果不设置标志位,此时再拖动地图时,它会不断将地图移动到当前的位置
if (isFirstLoc) {
//设置缩放级别
aMap.moveCamera(CameraUpdateFactory.zoomTo(17));
//将地图移动到定位点
aMap.moveCamera(CameraUpdateFactory.changeLatLng(new LatLng(aMapLocation.getLatitude(), aMapLocation.getLongitude())));
//点击定位按钮 能够将地图的中心移动到定位点
mListener.onLocationChanged(aMapLocation);
//添加图钉
aMap.addMarker(getMarkerOptions(amapLocation));
//获取定位信息
StringBuffer buffer = new StringBuffer();
buffer.append(aMapLocation.getCountry() + ""
+ aMapLocation.getProvince() + ""
+ aMapLocation.getCity() + ""
+ aMapLocation.getProvince() + ""
+ aMapLocation.getDistrict() + ""
+ aMapLocation.getStreet() + ""
+ aMapLocation.getStreetNum());
Toast.makeText(getApplicationContext(), buffer.toString(), Toast.LENGTH_LONG).show();
isFirstLoc =
//显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
Log.e("AmapError", "location Error, ErrCode:"
+ aMapLocation.getErrorCode() + ", errInfo:"
+ aMapLocation.getErrorInfo());
Toast.makeText(getApplicationContext(), "定位失败", Toast.LENGTH_LONG).show();
public void activate(OnLocationChangedListener onLocationChangedListener) {
mListener = onLocationChangedL
public void deactivate() {
mListener =
先获取自己当前位置的经纬度,然后拿到经纬度去定位,好像是这样的
在自己的校园平面图?是一张图片还是地图。如果是图片,建议直接使用高德地图的2D平面图,定位当前位置就行。如果是地图的话,应该具有本身的定位功能,没必要添加高德地图。
你可以看看
用高德地图里的图应该就可以吧,图片没弄过
你这也是要集成高德地图定位api的,如果要只显示当前学校的位置可以限制区域,高德地图有这个api的
不过看高德地图api是最能解决问题的,可以多研究研究
做过百度的和天地图的校园导航app,我估计原理应该差不多
1. 首先下载并配置好高德的地图API(必须要有定位SDK)
2. 然后写定位代码在定义回调函数是可以获取到高德定位获取的坐标值
3.如果你要用在自己的地图上那还牵扯到坐标偏移问题,高德定位获取的坐标值和你自己地图的坐标系肯定不一致。每个地图的偏移值是不一样且保密的,这个只能用别的办法
由于不清楚题主的问题究竟在哪个方面,只写了大概的思路,详细的问题可以再追问
三点一面,你得知道你的校园平面图的三个地理位置坐标点,然后整个地图就对应了自己的地理坐标点,根据定位点就可以找到任何点了
1、首先,我们需要通过应用市场下载安装高德地图到手机上。
2、打开手机上的高德地图,出现下图界面,地图上会自动出现我们当前的所在位置和周边情况。
3、点击屏幕右下角的加减号(或者直接用手指缩放),我们可以对地图进行缩放,放大地图就可以得到更加详细的位置信息。
4、在屏幕下方,我们可以看到路线、导航、更多等选项,我们可以选择【路线】,手机界面发生变换,我们可以在下图框选处输入目的地,默认的起点是你现在所在的位置(也可以进行修改)。
5、如下图,输入目的地后就会出现路线信息,默认显示的是公交路线。
6、我们也可以选择查看步行路线,如下图步行距离比较近,我们可以步行前往目的地。
7、如果你根据步行路线不能够很好的找到方向,就可以用上【步行导航】,点击屏幕右下角的【步行导航】,跳出提示打开GPS。
8、打开GPS后在点击步行导航,就进入了步行导航界面,我们只需根据导航提示行走就可以到达目的地。
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐

我要回帖

更多关于 高德地图api 基站定位 的文章

 

随机推荐