翻开曾经做的东西,看了看,非常多从逻辑上比較乱,对之做了改动,完毕后实现的效果为:

MapActivity源码例如以下:

package com.lzugis.map;

import java.io.File;
import java.util.Iterator; import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.location.GpsSatellite;
import android.location.GpsStatus;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.os.Bundle;
import android.os.Environment;
import android.provider.Settings;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast; import com.esri.android.map.GraphicsLayer;
import com.esri.android.map.MapView;
import com.esri.android.map.ags.ArcGISLocalTiledLayer;
import com.esri.android.runtime.ArcGISRuntime;
import com.esri.core.geometry.GeometryEngine;
import com.esri.core.geometry.Point;
import com.esri.core.geometry.SpatialReference;
import com.esri.core.map.Graphic;
import com.esri.core.symbol.PictureMarkerSymbol;
import com.lzugis.tool.ZoomCtrl; public class MapActivity extends Activity {
private static File dataFile;
private static String dirName;
private static String filename; private LocationListener locationListener = new LocationListener(){
/**
* 位置信息变化时触发
*/
public void onLocationChanged(Location location) {
markLocation(location);
}
/**
* 状态改变时调用
*/
public void onStatusChanged(String provider, int status, Bundle extras)
{
switch (status) {
//GPS状态为可见时
case LocationProvider.AVAILABLE:
showToast("当前GPS状态为可见状态");
Log.i("TAG", "当前GPS状态为可见状态");
break;
//GPS状态为服务区外时
case LocationProvider.OUT_OF_SERVICE:
showToast("当前GPS状态为服务区外状态");
Log.i("TAG", "当前GPS状态为服务区外状态");
break;
//GPS状态为暂停服务时
case LocationProvider.TEMPORARILY_UNAVAILABLE:
showToast("当前GPS状态为暂停服务状态");
Log.i("TAG", "当前GPS状态为暂停服务状态");
break;
}
}
/**
* GPS开启时触发
*/
public void onProviderEnabled(String provider)
{
showToast("GPS打开");
Location location=locMag.getLastKnownLocation(provider);
markLocation(location);
}
/**
* GPS禁用时触发
*/
public void onProviderDisabled(String provider)
{
showToast("GPS已关闭");
}
}; MapView mapview;
ArcGISLocalTiledLayer local;
ZoomCtrl zoomCtrl;
GraphicsLayer gLayerGps; Button btnPosition;
Toast toast;
LocationManager locMag;
Location loc ; /** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_map);
//去除水印
ArcGISRuntime.setClientId("1eFHW78avlnRUPHm"); //要定位在地图中的位置,须要知道当前位置,而当前位置有Location对象决定,
//可是,Location对象又须要LocationManager对象来创建。
//创建LocationManager的唯一方法
locMag = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); mapview = (MapView)findViewById(R.id.map);
dataFile = Environment.getExternalStorageDirectory();
dirName = this.getResources().getString(R.string.offline_dir);
filename = this.getResources().getString(R.string.local_tpk); String basemap = "file://"+dataFile + File.separator +dirName + File.separator + filename;
local = new ArcGISLocalTiledLayer(basemap);
mapview.addLayer(local); //放大与缩小
zoomCtrl = (ZoomCtrl) findViewById(R.id.ZoomControl);
zoomCtrl.setMapView(mapview); gLayerGps = new GraphicsLayer();
mapview.addLayer(gLayerGps); btnPosition=(Button)findViewById(R.id.btnPosition);
btnPosition.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
//推断GPS是否正常启动
if(!locMag.isProviderEnabled(LocationManager.GPS_PROVIDER)){
showToast("请开启GPS导航...");
//返回开启GPS导航设置界面
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivityForResult(intent,0);
return;
}
Location location= locMag.getLastKnownLocation(LocationManager.GPS_PROVIDER);
markLocation(location);
locMag.addGpsStatusListener(listener);
locMag.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, locationListener);
}
});
} //状态监听
GpsStatus.Listener listener = new GpsStatus.Listener() {
public void onGpsStatusChanged(int event) {
switch (event) {
//第一次定位
case GpsStatus.GPS_EVENT_FIRST_FIX:
Log.i("TAG", "第一次定位");
break;
//卫星状态改变
case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
Log.i("TAG", "卫星状态改变");
//获取当前状态
GpsStatus gpsStatus=locMag.getGpsStatus(null);
//获取卫星颗数的默认最大值
int maxSatellites = gpsStatus.getMaxSatellites();
//创建一个迭代器保存全部卫星
Iterator<GpsSatellite> iters = gpsStatus.getSatellites().iterator();
int count = 0;
while (iters.hasNext() && count <= maxSatellites) {
GpsSatellite s = iters.next();
count++;
}
System.out.println("搜索到:"+count+"颗卫星");
break;
//定位启动
case GpsStatus.GPS_EVENT_STARTED:
Log.i("TAG", "定位启动");
break;
//定位结束
case GpsStatus.GPS_EVENT_STOPPED:
Log.i("TAG", "定位结束");
break;
}
};
}; private void markLocation(Location location)
{
if(location!=null){
Log.i("TAG", "时间:"+location.getTime());
Log.i("TAG", "经度:"+location.getLongitude());
Log.i("TAG", "纬度:"+location.getLatitude());
Log.i("TAG", "海拔:"+location.getAltitude());
double locx = location.getLongitude();
double locy = location.getLatitude();
ShowPointOnMap(locx,locy);
}
} public void ShowPointOnMap(double lon,double lat){
//清空定位图层
gLayerGps.removeAll();
//接收到的GPS的信号X(lat),Y(lon)
double locx = lon;
double locy = lat;
Point wgspoint = new Point(locx, locy);
Point mapPoint = (Point) GeometryEngine.project(wgspoint,SpatialReference.create(4326),mapview.getSpatialReference());
//图层的创建
// Graphic graphic = new Graphic(mapPoint,new SimpleMarkerSymbol(Color.RED,18,STYLE.CIRCLE));
PictureMarkerSymbol pms = new PictureMarkerSymbol(this.getResources().getDrawable(
R.drawable.location));
Graphic graphic = new Graphic(mapPoint,pms);
gLayerGps.addGraphic(graphic);
} private void showToast(String msg)
{
if(toast == null)
{
toast = Toast.makeText(this, msg, Toast.LENGTH_SHORT);
}
else
{
toast.setText(msg);
toast.setDuration(Toast.LENGTH_SHORT);
}
toast.setGravity(Gravity.BOTTOM, 0, 0);
toast.show();
} @Override
protected void onDestroy() {
super.onDestroy();
}
@Override
protected void onPause() {
super.onPause();
mapview.pause();
}
@Override
protected void onResume() {
super.onResume();
mapview.unpause();
}
}

Arcgis For Android之GPS定位实现的更多相关文章

  1. [置顶] xamarin android使用gps定位获取经纬度

    看了文章你会得出以下几个结论 1.android定位主要有四种方式GPS,Network(wifi定位.基站定位),AGPS定位 2.绝大部分android国产手机使用network进行定位是没有作用 ...

  2. Android中GPS定位的简单应用

    在Android中通过GPS获得当前位置,首先要获得一个LocationManager实例,通过该实例的getLastKnownLocation()方法获得第一个的位置,该方法的说明如下: void ...

  3. android 获取GPS定位

    AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xm ...

  4. 【Android】GPS定位基本原理浅析

    位置服务已经成为越来越热的一门技术,也将成为以后所有移动设备(智能手机.掌上电脑等)的标配.而定位导航技术中,目前精度最高.应用最广泛的,自然非GPS莫属了.网络上介绍GPS原理的专业资料很多,而本文 ...

  5. Android开发——GPS定位

    1.LocationManager LocationManager系统服务是位置服务的核心组件,它提供了一系列方法来处理与位置相关的问题. 与LocationManager相关的两个知识点: 1.1 ...

  6. Arcgis API for Android之GPS定位

    欢迎大家增加Arcgis API for Android的QQ交流群:337469080 先说说写这篇文章的原因吧,在群内讨论的过程中,有人提到了定位的问题,刚好,自己曾经在做相关工作的时候做过相关的 ...

  7. Android之GPS定位详解

    一.LocationManager LocationMangager,位置管理器.要想操作定位相关设备,必须先定义个LocationManager.我们可以通过如下代码创建LocationManger ...

  8. ArcGIS Runtime SDK for Android 定位权限(GPS定位\网络定位)

    ACCESS_COARSE_LOCATION和ACCESS_FINE_LOCATION: android.permission.ACCESS_COARSE_LOCATION:是基站定位,即基于无线网络 ...

  9. 外业数据采集平台(GPS+Android Studio+Arcgis for android 100.2.1)

    外业数据采集平台 1. 综述 在室外,通过平板或者手机接收GPS坐标,实时绘制点.线.面数据,以便为后续进行海域监测.土地确权.地图绘图提供有效数据和依据. 2. 技术路线 Android studi ...

随机推荐

  1. JavaFX横幅类游戏开发 教训 游戏贴图

    上一节课,我们即将完成战旗Demo有了一个大概的了解.教训这,我们将学习绘制游戏地图. 由于JavaFX 2.2中添加了Canvas相关的功能,我们就能够使用Canvas来实现游戏绘制了. 游戏地图绘 ...

  2. VC POST表单——登录验证新浪邮箱

    1.本机环境: Windows XP SP3.ADSL 2.开发工具: WildPackets OmniPeek V5.1.4 Visual C++ 6.0 IE6.0 FlexEdit V2.3.1 ...

  3. Oracle 重建索引脚本

    该指数是一个有力的武器,以提高数据库的查询性能. 没有索引,喜欢同样的标签库没有书籍,找书,他们想预订比登天还难.中,尤其是在批量的DML的情形下会产生对应的碎片.以及B树高度会发生对应变化.因此能够 ...

  4. WindowState注意事项

    本文将分析具体WindowState个别关键的成员变量和成员函数. Window #3 Window{20dd178e u0 com.android.mms/com.android.mms.ui.Co ...

  5. 学习vi和vim编辑(3):一个简单的文本编辑器(2)

    然后文章,继续评论vi编辑简单的文本编辑命令. 本文主要是删除的文字.复制,运动命令. 删除文本: 正如上一篇文章中讲过的,对于删除命令("d")也具有"(command ...

  6. Maven本地仓库配置

    一. 为什么配置? 默认情况下,maven的本地仓库在C盘下用户文件夹: .m2/repository.全部的maven构件(artifact)都被存储到该仓库中.以方便重用. 可是放在C盘一个是占用 ...

  7. Codeforces Round #261 (Div. 2) E. Pashmak and Graph DP

    http://codeforces.com/contest/459/problem/E 不明确的是我的代码为啥AC不了,我的是记录we[i]以i为结尾的点的最大权值得边,然后wa在第35  36组数据 ...

  8. cocos2dX 音乐和声音效果

    今天, 我们学习cocos2dX里面音乐和音效, 为什么学他呢, 难道你喜欢看无声电影( 旁白: 我就喜欢关着声音玩), 我们不要管旁白了, 她是个疯子 老规矩, 资源准备好: 一首<故宫神思& ...

  9. MEF初体验之六:导出和元素据

    在导出声明这一节中解释了部件导出服务和值的基础知识.在某些情况下,出于多种原因,关联与导出相关的信息是有必要的.通常,它被用来解释一个指定的普通契约实现的能力.这对于允许导入约束满足它的导出,或者导入 ...

  10. 使用Java快速实现进度条(转)

    基于有人问到怎样做进度条,下面给个简单的做法: 主要是使用JProgressBar(Swing内置javax.swing.JProgressBar)和SwingWorker(Swing内置javax. ...