序:最近呢,工作鸭梨不是怎么大,对于自己爱折腾的想法又冒出了水面,开始自己的android开发的学习之旅。但是呢,本人是做GIS的,所以呢,就打算从这方面入手看看,是不是有什么比较好玩的玩意呢,这才导致了“Arcgis for Androd API开发系列教程”的成功问世……

本篇呢,是用“Arcgis for Androd API”实现基本的地图显示并在图上显示当前GPS所在位置。为了比较直观的让大家看看本人的成果呢,先给大家上账图吧:

看见了吧,人所在的位置呢就是本人所处的位置……知道要做什么了之后,下面给大家说一下具体的实现方法吧。

在做Arcgis for Android API开发之前,你得做一件大事,那就是搭建Android的开发环境,至于怎么搭建,我在此就不再说了,本来没打算说这玩意的。安卓开发环境搭建完成之后了,你需要需要安装 ArcGIS 发相关的库和 Eclipse插件了,这个的安装呢,你可以选择在线的安装方式,也可以选择离线的安装方式,在线的比较简单,Eclipse菜单/help/Install New Softwear...,在弹出的框框里面输入http://downloads.esri.com/software/arcgis/android即可,离线的更省事,不过你本机得有ArcGISAndroidSDK_v????.zip,没有的那别着急,你可以去网站上找,不想找的呢,我呢也给大家共享了,下载地址为:http://download.csdn.net/detail/gisshixisheng/6703689,大家按需下载,不受积分的。

靠,废话一大堆,终于到主题了!上面的工作完成之后呢,首先你得新建一个Arcgis for Android的工程,暂且就叫做MapGps吧,建成之后文件组织形式如下:

我想,做过安卓开发或者了解安卓开发的人呢对着玩意肯定不陌生吧,具体的我也不做解释,有疑问的我们可以私聊,最好是美女……不过呢,有些东西呢,还是交代一下吧:

1、src

这个东东我不怎么清楚,个人认为类似于web开发的后台

2、libs

这个是开发相关的类库

3、res

英语差不多的人应该明白,res是resources的简写,是“资源”的意思。其中,darwable命名的文件夹是一些图片文件,layout是一些布局文件,values是一些值文件,里面包括string,color等等……这个layout类似于web的前台吧……

首先,来看看main.xml文件的内容:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <!-- MapView layout and initial extent -->
    <com.esri.android.map.MapView
  		android:id="@+id/map"
  		android:layout_width="fill_parent"
  		android:layout_height="fill_parent">
  	</com.esri.android.map.MapView>

  	<com.esri.arcgis.android.samples.helloworld.ZoomControlView
        android:id="@+id/ZoomControlView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_marginBottom="20.0dip"
        android:layout_marginRight="5.0dip"/>

  	<ZoomControls
  	    android:id="@+id/zoomCtrl"
  	    android:layout_width="wrap_content"
  	    android:layout_height="wrap_content"
  	    android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:layout_marginTop="20.0dip"
        android:layout_marginRight="5.0dip" />

  	<android.widget.SearchView
  	    android:id="@+id/searchView"
  	    android:layout_width="wrap_content"
  	    android:layout_height="wrap_content"
  	    android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_marginTop="20.0dip"
        android:layout_marginLeft="5.0dip" />

  	<Button
  	    android:id="@+id/btnGps"
  	    android:layout_width="wrap_content"
  	    android:layout_height="wrap_content"
  	    android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_marginBottom="20.0dip"
        android:layout_marginLeft="5.0dip"
  	    android:text="GPS" />

</RelativeLayout>

接着,看看HelloWorld.java的内容:

/* Copyright 2012 ESRI
 *
 * All rights reserved under the copyright laws of the United States
 * and applicable international laws, treaties, and conventions.
 *
 * You may freely redistribute and use this sample code, with or
 * without modification, provided you include the original copyright
 * notice and use restrictions.
 *
 * See the �Sample code usage restrictions� document for further information.
 *
 */

package com.esri.arcgis.android.samples.helloworld;

import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ZoomControls;

import com.esri.android.map.GraphicsLayer;
import com.esri.android.map.MapView;
import com.esri.android.map.ags.ArcGISTiledMapServiceLayer;
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;

public class HelloWorld extends Activity {
	Button zoomin;
	Button zoomout;
	Button btnGps;
	ZoomControls zoomctrl;
	LocationManager locMag;
	Location loc ;

	MapView map = null;
	ArcGISTiledMapServiceLayer tileLayer;
	GraphicsLayer gLayerPos;
	Point point;
	Point wgspoint;
	Point mapPoint;
	PictureMarkerSymbol locationSymbol;

	ZoomControlView mZoomControlView;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		map = (MapView)findViewById(R.id.map);

		tileLayer = new ArcGISTiledMapServiceLayer(
				"http://cache1.arcgisonline.cn/ArcGIS/rest/services/ChinaOnlineCommunity/MapServer");

		map.addLayer(tileLayer);

		//设置地图中心点
		point = (Point) GeometryEngine.project(new Point(40.805, 111.661),SpatialReference.create(4326),map.getSpatialReference());
		map.centerAt(point, true);
		/*
		zoomin=(Button)findViewById(R.id.zoomin);
		zoomout=(Button)findViewById(R.id.zoomout);
		zoomin.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				map.zoomin();
			}
		});
		zoomout.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				map.zoomout();
			}
		});*/
		//放大与缩小——自定义
		mZoomControlView = (ZoomControlView) findViewById(R.id.ZoomControlView);
		mZoomControlView.setMapView(map);

		//放大与缩小ZoomControls
		zoomctrl=(ZoomControls)findViewById(R.id.zoomCtrl);
		zoomctrl.setOnZoomInClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				map.zoomin();
			}
		});
		zoomctrl.setOnZoomOutClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				map.zoomout();
			}
		});

		gLayerPos = new GraphicsLayer();
	    map.addLayer(gLayerPos);	    

	    locationSymbol =  new PictureMarkerSymbol(this.getResources().getDrawable(
				R.drawable.location));

	    //要定位在地图中的位置,需要知道当前位置,而当前位置有Location对象决定,
	  	//但是,Location对象又需要LocationManager对象来创建。
	    //创建LocationManager的唯一方法
	  	locMag = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
	  	//获得Provider列表
	  	final List<String> providers=locMag.getProviders(true);
	  	//循环Provider,根据Provider获取位置信息
	  	for(String provider:providers)
	  	{
		    loc = locMag.getLastKnownLocation(provider);

		    LocationListener locationListener = new LocationListener(){
		    	/**
		    	 * 位置改变时调用
		    	 */
		    	public void onLocationChanged(Location location) {
					//刷新图层
					markLocation(location);
				}
		    	//Provider失效时调用
				public void onProviderDisabled(String arg0)
				{
				}
				//Provider生效时调用
				public void onProviderEnabled(String arg0)
				{
				}
				//状态改变时调用
				public void onStatusChanged(String arg0, int arg1, Bundle arg2)
				{
				}
			};
			locMag.requestLocationUpdates(provider, 100, 0, locationListener);
			if(loc!=null)
			{
				//开始画图
				markLocation(loc);
			}
		}
	}

	private void markLocation(Location location)
	{
		gLayerPos.removeAll();
		double locx = location.getLongitude();
		double locy = location.getLatitude();
		wgspoint = new Point(locx, locy);
		mapPoint = (Point) GeometryEngine.project(wgspoint,SpatialReference.create(4326),map.getSpatialReference());

		//图层的创建
		Graphic graphic = new Graphic(mapPoint,locationSymbol);
		gLayerPos.addGraphic(graphic);
		map.centerAt(mapPoint, true);
	}

	@Override
	protected void onPause() {
		super.onPause();
		map.pause();
	}

	@Override
	protected void onResume() {
		super.onResume();
		map.unpause();
	}
}

附件:

点此下载源码    
点此现在类库包

Arcgis for Androd API开发系列教程(一)——地图显示与GPS定位的更多相关文章

  1. 高德地图 JavaScript API 开发系列教程(一)

    高德地图 API 提供包括 Web API 即 JavaScript API,Android API,定位API,IOS API,WP API,Win8 API等,本系列教程主要针对高德 JavaSc ...

  2. 高德地图 JavaScript API 开发系列教程(二)

    上节简单介绍高德地图JavaScript API及网页中基本地图展示.有了地图后我们可以用来做什么?有人说离我最近的超市在哪里,我怎么去?别急,这些功能我们后面都会慢慢实现.今天为大家详细讲解如何在地 ...

  3. C#微信公众号开发系列教程六(被动回复与上传下载多媒体文件)

    微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) C#微信公众号开发系列教程三(消息体签名及加解密) C ...

  4. 循序渐进学.Net Core Web Api开发系列【8】:访问数据库(基本功能)

    系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一.概述 本篇讨论如 ...

  5. 使用react全家桶制作博客后台管理系统 网站PWA升级 移动端常见问题处理 循序渐进学.Net Core Web Api开发系列【4】:前端访问WebApi [Abp 源码分析]四、模块配置 [Abp 源码分析]三、依赖注入

    使用react全家桶制作博客后台管理系统   前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基 ...

  6. Android 开发系列教程之(一)Android基础知识

    什么是Android Android一词最早是出现在法国作家维里耶德利尔·亚当1986年发表的<未来夏娃>这部科幻小说中,作者利尔·亚当将外表像人类的机器起名为Android,这就是And ...

  7. C#微信公众号开发系列教程三(消息体签名及加解密)

    http://www.cnblogs.com/zskbll/p/4139039.html C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试) C ...

  8. C#微信公众号开发系列教程二(新手接入指南)

    http://www.cnblogs.com/zskbll/p/4093954.html 此系列前面已经更新了两篇博文了,都是微信开发的前期准备工作,现在切入正题,本篇讲解新手接入的步骤与方法,大神可 ...

  9. 微信公众号开发系列教程一(调试环境部署续:vs远程调试)

    http://www.cnblogs.com/zskbll/p/4080328.html 目录 C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试 ...

随机推荐

  1. SHELL —— grep命令+正则表达式

    一 什么是正则 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则. 生活中处处都是正则: 比如我们描述:4条腿 你可能会想 ...

  2. oracle 创建视图、修改视图、删除视图、利用视图操作基本表

    转:http://blog.sina.com.cn/s/blog_6b58d2fa0100rgvw.html 1.使用create or replace view命令创建视图 语法格式: create ...

  3. linux svn 命令

    windows下的TortoiseSVN是资源管理器的一个插件,以覆盖图标表示文件状态,几乎所以命令都有图形界面支持,比较好用,这里就不多说.主要说说linux下svn的使用,因为linux下大部分的 ...

  4. HDU - 6437 Problem L.Videos 2018 Multi-University Training Contest 10 (最小费用最大流)

    题意:M个影片,其属性有开始时间S,结束时间T,类型op和权值val.有K个人,每个人可以看若干个时间不相交的影片,其获得的收益是这个影片的权值val,但如果观看的影片相邻为相同的属性,那么收益要减少 ...

  5. NGUI,多相机共存时,控制显示的元素

    当多个相机存在于一个场景中时,我们需要控制某些元素的可见性来达到我们想要的结果. 1:某个相机不需要看见的元素,统一用一个layer来管理 2:选中UIROOT下的相机 在clear flag里面设置 ...

  6. json字符串转化为json对象and 对象转化为 json字符串

    第一种方法: var data =evel('('+jsonstr+')') 解析:  这种方法是常用的方法, 即动态执行 javascript代码 在堆中存放数据. 存在安全问题. 第二种方法:   ...

  7. SpringBoot服务器压测对比(jetty、tomcat、undertow)

    1.本次对比基础环境信息如下: springboot版本1.5.10 centos虚机4c6G,版本7.4 centos实机2u16c40G,版本7.4,虚机运行在实机上 ab版本2.3 jprofi ...

  8. Scala:scala的一些简单操作命令

    Scala是一门多范式的编程语言,一种类似java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编程和函数式编程的各种特性. 不太久之前编程语言还可以毫无疑意地归类成“命令式”或者“函数式”或 ...

  9. MyBatis正在爬的坑

    换了份工作,开始接触Mybatis,开一篇文章记录一下自己遇到的坑 2018-06-20 今天遇到了一个问题,编好的sql语句在数据库可以执行但是写到程序里边就GG,什么问题呢?一直纠结在程序哪里写错 ...

  10. Linux中显示空闲内存空间的free命令的基本用法

    free 命令显示系统使用和空闲的内存情况,包括物理内存.交互区内存(swap)和内核缓冲区内存 参数 -b 显示内存的单位为字节-k 显示内存的单位为 KB-m 显示内存的单位为 M-o 忽略缓冲区 ...