您的位置:首页 > 移动开发 > Android开发

arcgis for android 学习 - (4) 了解mapView的一些方法和事件

2015-08-14 10:23 375 查看
我写了一个示例,用于展示了几个方法和事件的使用。直接在在代码里写了注释,那么直接贴代码。



----------

布局:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

<LinearLayout

android:layout_width="fill_parent"

android:layout_height="wrap_content" >

<Button

android:id="@+id/btnZoomOut"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="缩小" />

<Button

android:id="@+id/btn1ZoomIn"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="放大" />

<Button

android:id="@+id/btnLookExtent"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="看范围" />

<Button

android:id="@+id/btnToPoint"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="坐标变换" />

</LinearLayout>

<LinearLayout

android:layout_width="fill_parent"

android:layout_height="wrap_content" >

<Button

android:id="@+id/btnLookCenter"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="看中点坐标" />

<Button

android:id="@+id/btnSetCenter"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="设中点坐标为上次单击点" />

</LinearLayout>

<!-- 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>

</LinearLayout>

代码:

package com.vir56k.arcgisDemo;

import com.esri.android.map.MapView;

import com.esri.android.map.event.OnLongPressListener;

import com.esri.android.map.event.OnPanListener;

import com.esri.android.map.event.OnPinchListener;

import com.esri.android.map.event.OnSingleTapListener;

import com.esri.android.map.event.OnStatusChangedListener;

import com.esri.android.map.event.OnZoomListener;

import com.esri.android.map.event.OnStatusChangedListener.STATUS;

import com.esri.core.geometry.Envelope;

import com.esri.core.geometry.Geometry;

import com.esri.core.geometry.Point;

import com.esri.core.geometry.Polygon;

import com.vir56k.arcgisDemo.mapviewDetail.R;

import android.app.Activity;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.Toast;

public class mapviewDetailActivity extends Activity {

Button m_btnZoomOut;

Button btn1ZoomIn;

Button btnLookCenter;

Button btnToPoint;

Button btnLookExtent;

Button btnSetCenter;

MapView mMapView;

Point m_lastClickPoint;//上次单击的点

// 图层服务的地址

final String URL_STREET_COLD = "http://cache1.arcgisonline.cn/ArcGIS/rest/services/ChinaOnlineStreetCold/MapServer";

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

// 处理放大按钮的事件

m_btnZoomOut = (Button) findViewById(R.id.btnZoomOut);

m_btnZoomOut.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View arg0) {

if (mMapView.isLoaded()) {

mMapView.zoomout();

}

}

});

// 处理缩小按钮的事件

btn1ZoomIn = (Button) findViewById(R.id.btn1ZoomIn);

btn1ZoomIn.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View arg0) {

if (mMapView.isLoaded()) {

mMapView.zoomin();

}

}

});

// 查看地图中心点坐标

btnLookCenter = (Button) findViewById(R.id.btnLookCenter);

btnLookCenter.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View arg0) {

if (mMapView.isLoaded()) {

/*

* Point getCenter() Returns the center of the MapView as an

* ArcGIS geometry Point.

*/

Point p = mMapView.getCenter();

AlertMsg("地图中心点坐标(ArcGIS几何点)是:(%s,%s)", p.getX(), p.getY());

}

}

});

// 查看地图范围

btnLookExtent = (Button) findViewById(R.id.btnLookExtent);

btnLookExtent.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View arg0) {

if (mMapView.isLoaded()) {

/*

* Polygon getExtent() Returns a polygon comprising of four

* corners of map in map coordinates.

*/

Polygon p = mMapView.getExtent();

int dimension = p.getDimension();

Geometry.Type type = p.getType();

AlertMsg("查看地图范围dimension=%s,typ=%s", dimension, type.a());

}

}

});

// btnSetCenter

btnSetCenter = (Button) findViewById(R.id.btnSetCenter);

btnSetCenter.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View arg0) {

if (mMapView.isLoaded()) {

Point p = m_lastClickPoint;

if(p != null)

{

mMapView.centerAt(p, true);

AlertMsg("设定 地图中点为: x=%s,y=%s", p.getX(),

p.getY());

}

}

}

});

// 坐标变换

btnToPoint = (Button) findViewById(R.id.btnToPoint);

btnToPoint.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View arg0) {

if (mMapView.isLoaded()) {

/*

* Point toMapPoint(float screenx, float screeny) A

* convenience method that will convert a device's screen

* coordinates to an ArcGIS geometry Point that has the same

* spatial coordinate system as the MapView's. Point

* toMapPoint(Point src) A convenience method that will

* convert a device's screen coordinates into an ArcGIS

* geometry Point that has the same spatial coordinate

* system as the MapView's. Point toScreenPoint(Point src) A

* convenience method that will convert an ArcGIS geometry

* Point from the MapView's spatial coordinate system into

* the device's screen coordinates.

*/

// AlertMsg("查看地图范围dimension=%s,typ=%s",

// dimension,type.a());

}

}

});

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

mMapView.addLayer(new com.esri.android.map.ags.ArcGISTiledMapServiceLayer(

URL_STREET_COLD));

Envelope initextext = new Envelope(12899459.4956466, 4815363.65520802,

13004178.2243971, 4882704.67712717);

mMapView.setExtent(initextext);

// 注册长按 事件

mMapView.setOnLongPressListener(new OnLongPressListener() {

@Override

public void onLongPress(float x, float y) {

if (mMapView.isLoaded()) {

AlertMsg("长按 x=%s,y=%s", x, y);

}

;

}

});

// 注册单击事件

mMapView.setOnSingleTapListener(new OnSingleTapListener() {

@Override

public void onSingleTap(float x, float y) {

/*

* x - the x coordinate of the single tap location in screen

* pixels. y - the y coordinate of the single tap location in

* screen pixels.

*/

// x,y.都是屏幕像素坐标点

if (mMapView.isLoaded()) {

AlertMsg("单击,屏幕像素坐标点: x=%s,y=%s", x, y);

Point mapPoint = mMapView.toMapPoint(new Point(x, y));

AlertMsg("单击,地图坐标点: x=%s,y=%s", mapPoint.getX(),

mapPoint.getY());

m_lastClickPoint = mapPoint;

AlertMsg("设定 上次单击的点为: x=%s,y=%s", mapPoint.getX(),

mapPoint.getY());

}

;

}

});

mMapView.setOnPanListener(new OnPanListener() {

@Override

public void prePointerUp(float fromx, float fromy, float tox,

float toy) {

// TODO Auto-generated method stub

}

@Override

public void prePointerMove(float fromx, float fromy, float tox,

float toy) {

// TODO Auto-generated method stub

}

@Override

public void postPointerUp(float fromx, float fromy, float tox,

float toy) {

// TODO Auto-generated method stub

}

@Override

public void postPointerMove(float fromx, float fromy, float tox,

float toy) {

// TODO Auto-generated method stub

}

});

mMapView.setOnPinchListener(new OnPinchListener() {

@Override

public void prePointersUp(float x1, float y1, float x2, float y2,

double factor) {

// TODO Auto-generated method stub

}

@Override

public void prePointersMove(float x1, float y1, float x2, float y2,

double factor) {

// TODO Auto-generated method stub

}

@Override

public void prePointersDown(float x1, float y1, float x2, float y2,

double factor) {

// TODO Auto-generated method stub

}

@Override

public void postPointersUp(float x1, float y1, float x2, float y2,

double factor) {

// TODO Auto-generated method stub

}

@Override

public void postPointersMove(float x1, float y1, float x2,

float y2, double factor) {

// TODO Auto-generated method stub

}

@Override

public void postPointersDown(float x1, float y1, float x2,

float y2, double factor) {

// TODO Auto-generated method stub

}

});

// 当mapView的状态改变时

mMapView.setOnStatusChangedListener(new OnStatusChangedListener() {

@Override

public void onStatusChanged(Object source, STATUS status) {

if (status.equals(STATUS.INITIALIZATION_FAILED)) {

AlertMsg("mapView的状态改变时:%s", "初始化失败");

}

;

if (status.equals(STATUS.INITIALIZED)) {

AlertMsg("mapView的状态改变时:%s", "初始化完成");

}

;

if (status.equals(STATUS.LAYER_LOADED)) {

AlertMsg("mapView的状态改变时:%s", "图层加载完成");

}

;

if (status.equals(STATUS.LAYER_LOADING_FAILED)) {

AlertMsg("mapView的状态改变时:%s", "图层加载失败");

}

;

}

});

// 当缩放时

mMapView.setOnZoomListener(new OnZoomListener() {

@Override

public void preAction(float pivotX, float pivotY, double factor) {

// TODO Auto-generated method stub

}

@Override

public void postAction(float pivotX, float pivotY, double factor) {

AlertMsg("缩放状态变化,factor=:%s", factor);

}

});

}

private void AlertMsg(String str, Object... arg) {

String msg = String.format(str, arg);

Toast.makeText(this, msg,2).show();

Log.i("AlertMsg", msg);

}

@Override

protected void onDestroy() {

super.onDestroy();

}

@Override

protected void onPause() {

super.onPause();

mMapView.pause();

}

@Override

protected void onResume() {

super.onResume();

mMapView.unpause();

}

}

代码下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: