Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Arcgis for Androd API开发系列教程(一)——地图显示与GPS定位

Arcgis for Androd API开发系列教程(一)——地图显示与GPS定位

作者头像
牛老师讲GIS
发布于 2018-10-23 08:02:08
发布于 2018-10-23 08:02:08
1.2K00
代码可运行
举报
运行总次数:0
代码可运行

序:最近呢,工作鸭梨不是怎么大,对于自己爱折腾的想法又冒出了水面,开始自己的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文件的内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?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的内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* 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();
	}
}

附件:

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2013年12月12日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Arcgis API for Android之GPS定位
先说说写这篇文章的原因吧,在群内讨论的过程中,有人提到了定位的问题,刚好,自己以前在做相关工作的时候做过相关的东西,所以就总结一下,给大家共享出来,由于本人水平有限,bug是在所难免,还望有更高的高人批评指正。废话不多说,直接进入主题。
牛老师讲GIS
2018/10/23
9590
Arcgis For Android之GPS定位实现
翻开以前做的东西,看了看,很多从逻辑上比较乱,对之做了修改,完成后实现的效果为: 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.Gps
牛老师讲GIS
2018/10/23
1.8K0
Arcgis andoid开发之应用百度地图接口实现精准定位与显示
怀着激动、兴奋的心情,在这个漫天柳絮的季节写下了这片博文,为什么呢,因为困扰我很久的一个技术性的问题得到了解决,发次博文,供大家参观、学习,同时,也以慰藉我长期困扰的心情,好了,废话不再,言归正传,看看这到底是个什么东西?
牛老师讲GIS
2018/10/23
7120
Arcgis andoid开发之应用百度地图接口实现精准定位与显示
用百度地图API打造方便自己使用的手机地图
有钱人咱就不说了,因为偶是个穷银……因为穷,所以去年买的Huawei C8650+到现在还在上岗,对于没有钱买好的配置的手机的童鞋来说,类似于百度,谷歌,高德等商家的地图在自己的机器上跑起来确实是有点勉为其难,为了能够用上手机的地图,并不怎么大,最近闲来无事,就动起了这方面的脑筋,结果就是用百度地图API开发一个自己想要的功能的地图……
牛老师讲GIS
2018/10/23
2.9K0
用百度地图API打造方便自己使用的手机地图
Arcgis Android API开发之离线地图
最近一直在倒腾Arcgis Android API等相关的东西,想把自己的做的图放到地图上去,也就是离线地图,穷人一般是没有钱的,一个月好几十的流量是开不起的,所以就左捉摸,右思考,看着API里面有离线地图,始终没有弄明白是怎么回事,直到今天下午,想起来了就有试了试,结果成功了,那个激动啊,好半天那……
牛老师讲GIS
2018/10/23
1.3K0
Arcgis Android API开发之离线地图
ArcGIS for Android 100.3.0(8):绘制点,线,面,圆,添加文本和图片「建议收藏」
Geometries用以在特定地理位置上通过形状来表达真实世界的对象。图层范围、视图范围、GPS定位都是通过Geometries表达实现进一步的数据编辑、空间分析、地理处理、位置与面积量算都离不开空间要素。
全栈程序员站长
2022/09/13
1.6K0
ArcGIS for Android 100.3.0(8):绘制点,线,面,圆,添加文本和图片「建议收藏」
安卓开发_慕课网_百度地图_添加覆盖物
学习内容来自“慕课网” 本片学习内容接自前四篇基础 安卓开发_慕课网_百度地图 安卓开发_慕课网_百度地图_实现定位 安卓开发_慕课网_百度地图_实现方向传感器 安卓开发_慕课网_百度地图_实现模式转换 请先学习前4篇再学习本篇,因为本篇在前四篇的基础上进行代码的编写 一、新建一个类用来存放数据(距离,点赞数,介绍图等信息) 1 package com.example.map; 2 3 import java.io.Serializable; 4 import java.util.Arra
听着music睡
2018/05/18
1.1K0
ArcGIS for Android学习(一)
GIS的开发中,什么时候都少不了地图操作。ArcGIS for Android中,地图组件就是MapView,MapView是基于Android中ViewGroup的一个类(参考),也是ArcGIS Runtime SDK for Android中的地图容器,与很多ArcGIS API中的Map、MapControl类的作用是一样的。     地图常见的操作有缩放、旋转、平移、获取范围、比例尺、分辨率等信息,以及常用的手势操作,其中,经常使用到的功能和常见问题有以下几个: 1)将地图缩放到指定的比例尺/分
水击三千
2018/02/27
5.5K0
ArcGIS for Android学习(一)
Android平台GPS系统的应用开发
第一部分、前述: Android作为Google移动互联网战略的重要组成部分,将进一步推进“随时随地为每个人提供信息”这一企业目标的实现。Google的目标是让移动通信不依赖于设备,甚至是平台。出于这个目的,Android将完善而不是替代Google长期以来推行的移动发展战略:通过与全球各地的手机制造商和移动运营商成为合作伙伴,开发既实用又有吸引力的移动服务,并推广这些产品。 随着城市化的进展和家用轿车的普及.原本根遥远的全球卫星定位系统(Global Position System.6Ps)的使用越来越多
庞小明
2018/03/07
4.5K0
Android平台GPS系统的应用开发
《移动互联网技术》第九章 感知与多媒体: 了解质感设计的基本原则和设计方法
《移动互联网技术》课程是软件工程、电子信息等专业的专业课,主要介绍移动互联网系统及应用开发技术。课程内容主要包括移动互联网概述、无线网络技术、无线定位技术、Android应用开发和移动应用项目实践等五个部分。移动互联网概述主要介绍移动互联网的概况和发展,以及移动计算的特点。无线网络技术部分主要介绍移动通信网络(包括2G/3G/4G/5G技术)、无线传感器网络、Ad hoc网络、各种移动通信协议,以及移动IP技术。无线定位技术部分主要介绍无线定位的基本原理、定位方法、定位业务、数据采集等相关技术。Android应用开发部分主要介绍移动应用的开发环境、应用开发框架和各种功能组件以及常用的开发工具。移动应用项目实践部分主要介绍移动应用开发过程、移动应用客户端开发、以及应用开发实例。 课程的教学培养目标如下: 1.培养学生综合运用多门课程知识以解决工程领域问题的能力,能够理解各种移动通信方法,完成移动定位算法的设计。 2.培养学生移动应用编程能力,能够编写Andorid应用的主要功能模块,并掌握移动应用的开发流程。 3. 培养工程实践能力和创新能力。  通过本课程的学习应达到以下目的: 1.掌握移动互联网的基本概念和原理; 2.掌握移动应用系统的设计原则; 3.掌握Android应用软件的基本编程方法; 4.能正确使用常用的移动应用开发工具和测试工具。
猫头虎
2024/04/08
1630
ArcGIS JS API 4.14实现地图加载图片
主要介绍如何用ArcGIS JS API 4.14实现在二维地图中添加图片的操作。
X北辰北
2022/02/22
4.7K0
ArcGIS JS API 4.14实现地图加载图片
Arcgis for Javascript API下类似于百度搜索A、B、C、D marker的实现方式
看到了效果,是不是各位有点小鸡动,是不是也宠宠欲动,有木有?但是具体是怎么实现的呢?下面我来详细的给各位说说我的实现思路吧。
牛老师讲GIS
2018/10/23
5530
Arcgis for Javascript API下类似于百度搜索A、B、C、D marker的实现方式
安卓开发过程中的RatingBar、Handler以及GPS在大型项目中的使用【Android】
点击评分栏后,通过Toast显示当前分数 单击按钮获取当前分数并将其显示在TextView上
上进小菜猪
2022/12/28
1.9K0
ArcGIS API for JavaScript应用开发
ArcGIS API for JavaScript 提供在线版API,4.x 是 ArcGIS API for JavaScript 的新一代版本,实现了2D和3D应用的完全集成,3.x是一个2D版本,编程思路差异还是比较大的。开发调试过程中,最好进行本地化部署。ArcGIS JavaScript API可以从Esri官网获取,需要先注册一个Esri全球账户。SDK本地化部署指在本地Web Server上的部署,在API文件夹arcgis_js_api\library\3.18\install_win.html中有官方的部署文档,基本过程如下:
IT技术小咖
2019/11/24
2.7K0
android开发_Location位置定位
新建项目: 1 New Android Project-> 2 Project name:Location 3 Build Target:Android 2.2 4 Application name:
Hongten
2018/09/13
1.1K0
android开发_Location位置定位
位置定位(LocationManager)
LocationManager是Android 提供的Location 服务,来获得当前的位置信息和卫星信息。
李小白是一只喵
2020/06/11
2.6K0
位置定位(LocationManager)
ViewPager实现启动引导页面(个人认为很详细)
效果如图: 启动页面是一张图片+延时效果,这里就不给出布局文件了。 WelcomeActivity分析:在启动页面检测是否是第一次运行程序,如果是,则先跳转到引导界面的Activity——AndyVi
用户1737026
2018/06/01
9240
Android使用百度地图定位并显示手机位置后使用前置摄像头“偷拍”
拿到这个需求后,对于摄像头的使用不太熟悉,于是我先做了定位手机并在百度地图上显示的功能
LoveWFan
2018/08/07
1.4K0
Android使用百度地图定位并显示手机位置后使用前置摄像头“偷拍”
Google Map
上一章介绍了如何使用Android的GPS来获取设备的定位信息,但这种方式得到的定位信息只不过是一些数字的经度、纬度值,如果这些经度、纬度值不能以更加形象、直观的方式显示出来,对于大部分普通用户而言,这些数据几乎没有任何价值。要想让这些经纬度值“派上”用场,就需要用到本章中介绍到的Google Map服务。在本章中我们首先对Google Map进行简单的介绍,然后介绍Android中进行Google Map开发需要的准备工作,最后通过一系列的案例讲解了在Android中进行Google Map开发的方法及技巧。
张哥编程
2024/12/17
2970
Google Map
推荐阅读
相关推荐
Arcgis API for Android之GPS定位
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验