`
longgangbai
  • 浏览: 7338933 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

GIS的学习(三十五)osmdroid 地图触摸图层的实现

阅读更多

   源代码源自osmdbonusPack的代码,具体实现如下:

package com.etrip.osmdroid;

import org.osmdroid.api.IGeoPoint;
import org.osmdroid.views.MapView;
import org.osmdroid.views.MapView.Projection;
import org.osmdroid.views.overlay.Overlay;

import android.content.Context;
import android.graphics.Canvas;
import android.view.MotionEvent;

/**
 * Empty overlay than can be used to detect events on the map, 
 * and to throw them to a MapEventsReceiver. 
 * @see MapEventsReceiver
 * @author M.Kergall
 */
public class MapEventsOverlay extends Overlay {
	
	private Context context;
	private MapEventsReceiver mReceiver;
	private int x;
	private int y;
	
	/**
	 * @param ctx the context
	 * @param receiver the object that will receive/handle the events. 
	 * It must implement MapEventsReceiver interface. 
	 */
	public MapEventsOverlay(Context ctx, int x, int y,MapEventsReceiver receiver) {
        super(ctx);
        this.context = ctx;
        this.x = x;
        this.y = y;
		mReceiver = receiver;
    }

	@Override 
	protected void draw(Canvas c, MapView osmv, boolean shadow) {
		
	}
	
	@Override public boolean onSingleTapUp(MotionEvent e, MapView mapView){
		Projection proj = mapView.getProjection();
		IGeoPoint p = proj.fromPixels(e.getX(), e.getY());
		
		


		mapView.getController().animateTo(p);
		
		return mReceiver.singleTapUpHelper(p);
	}
	
	@Override public boolean onLongPress(MotionEvent e, MapView mapView) {
		Projection proj = mapView.getProjection();
		IGeoPoint p = proj.fromPixels(e.getX(), e.getY());
		//throw event to the receiver:
		return mReceiver.longPressHelper(p);
    }

}

 

 

 

package com.etrip.osmdroid;

import org.osmdroid.api.IGeoPoint;

/**
 * Interface for objects that need to handle map events thrown by a MapEventsOverlay. 
 * @see MapEventsOverlay
 * @author M.Kergall
 */
public interface MapEventsReceiver {

	/**
	 * @param p the position where the event occurred. 
	 * @return true if the event has been "consumed" and should not be handled by other objects. 
	 */
	boolean singleTapUpHelper(IGeoPoint p);
	
	/**
	 * @param p the position where the event occurred. 
	 * @return true if the event has been "consumed" and should not be handled by other objects. 
	 */
	boolean longPressHelper(IGeoPoint p);	
}

 

 

具体的使用如下:

package com.etrip.osmdroid;
import org.osmdroid.api.IGeoPoint;
import org.osmdroid.tileprovider.tilesource.TileSourceFactory;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapController;
import org.osmdroid.views.MapView;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;

/**
 * 
 * @Title: 
 * @Description: 实现TODO
 * @Copyright:Copyright (c) 2011
 * @Company:
 * @Date:2012-7-31
 * @author  longgangbai
 * @version 1.0
 */
public class GeoServersmdroidActivity extends Activity {
	private MapController mapController;
	
	private MapView mapView;
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		mapView = (MapView) findViewById(R.id.map);

		mapView.setTileSource(TileSourceFactory.MAPNIK);

		mapView.setBuiltInZoomControls(true);

		mapController = mapView.getController();

		mapController.setZoom(15);

		GeoPoint geopoint=new GeoPoint(39.92605, 116.42616); 

		mapController.setCenter(geopoint);
		
		MapEventsOverlay mapEventOverlay=new MapEventsOverlay(this,100,100,new MapEventsReceiver() {
			
			@Override
			public boolean singleTapUpHelper(IGeoPoint p) {
		        Toast.makeText(GeoServersmdroidActivity.this, "test touch event ", Toast.LENGTH_LONG).show();
				return true;
			}
			
			@Override
			public boolean longPressHelper(IGeoPoint p) {
				return false;
			}
		});
		mapView.getOverlays().add(mapEventOverlay);
		mapView.invalidate();
	}
}

 

分享到:
评论

相关推荐

    GIS.rar_gis_gis管网_百度地图_管网图形_管网地图

    在"GIS.rar_gis_gis管网_百度地图_管网图形_管网地图"这个压缩包中,我们可以推测它包含了与GIS应用相关的文件,特别是关于管网地图的创建和编辑。 首先,"GIS.html"可能是该压缩包的核心文件,它可能是一个基于Web...

    天地图图层(ArcGIS Layer (.lyr))

    总的来说,天地图图层(ArcGIS Layer (.lyr))为ArcGIS用户提供了便捷接入天地图服务的途径,结合GIS的强大功能,可以实现多样的地图制作和地理分析。理解并熟练运用这一工具,将极大地提升我们在地理信息处理中的...

    arcgis天地图lyr图层文件合集

    总的来说,这个"arcgis天地图lyr图层文件合集"是连接低版本ArcGIS与天地图服务的桥梁,通过它可以实现高效便捷的数据访问,提高工作效率,进一步推动地理信息科学的发展和应用。无论是专业工作者还是学习者,都能...

    vue+三维GIS地图

    此实例为vue版本三维GIS地图,其中包含底图切换、图层控制、图上量算、空间分析、坐标定位、图上标绘、地图打印等功能

    在原有的路径规划功能中添加在地图中添加自定义图层,并使图层跟随地图移动而移动,点击图层时可获取图层所在位置的现实坐标

    在IT领域,尤其是在移动应用开发中,特别是在地理信息系统(GIS)和地图应用中,自定义图层是一个重要的功能。此功能允许开发者根据特定需求在地图上叠加个性化信息,以提供更丰富的用户体验。以下是对这个主题的...

    天地图显示定位显示图层

    在Android开发领域,"天地图显示定位显示图层"是一个重要的功能实现,它结合了地理信息系统(GIS)和移动应用技术,使得用户可以在移动设备上查看、定位并操作地图图层。下面将详细介绍这一功能的实现及其相关知识点...

    地图的图层操作

    在GIS(地理信息系统)领域,地图的图层操作是核心功能之一,特别是在使用像ArcEngine这样的强大GIS开发平台时。ArcEngine是由Esri公司提供的一个全面的开发工具集,用于构建具有地图显示、数据编辑、空间分析等功能...

    GIS.rar_csharp gis_gis_gis csharp_gis-ae_图层渲染

    GIS(Geographic Information System,地理信息系统)是一种集成了计算机硬件、软件和地理数据...通过深入学习和实践,不仅可以掌握图层渲染,还能进一步探索GIS的其他高级功能,如空间分析、网络分析和三维可视化等。

    重庆市GIS矢量图层shp

    【GIS矢量图层与shp格式】 GIS(Geographic Information System)是地理信息系统,它是一种结合了计算机硬件、软件及地理数据的系统,用于采集、存储、管理、分析和展示所有类型地理空间信息。在GIS中,矢量图层是...

    天地图水系GIS数据.zip

    标题“天地图水系GIS数据.zip”所指的是一份包含天地图水系地理信息的压缩文件,这个压缩包主要用于GIS(地理信息系统)应用。GIS是一种整合了地图、数据库和计算机技术的系统,用于处理与地理位置相关的数据。在这...

    高德地图自定义图层

    在IT行业中,地图服务是数据可视化和地理信息系统(GIS)不可或缺的一部分。高德地图作为一款广泛应用的地图服务提供商,为开发者提供了丰富的API和SDK,使得我们可以根据需求自定义地图的显示内容和交互方式。本篇...

    GIS 地图亚洲地图

    GIS 地图亚洲地图

    GIS基础知识讲解_gis学习资料_gis_gis基础知识_

    7. 开发与编程:对于GIS开发工程师,掌握GIS软件的API(如ArcGIS API for Python、QGIS Processing Toolbox等)和编程语言(如Python、JavaScript)是必要的,这能实现自定义功能和自动化工作流程。 通过阅读“GIS...

    supermap加载天地图图层

    在SuperMap中加载天地图图层,主要通过SuperMap的API实现。SuperMap的API是一套用于开发GIS应用的接口,它支持多种编程语言,如JavaScript、.NET、Java等,使得开发者能够灵活地在各种环境下构建GIS应用。对于...

    高德地图图层效果.zip

    在IT行业中,地图服务是应用广泛的技术之一,特别是在地理信息系统(GIS)和移动应用开发中。高德地图作为中国领先的数字地图提供商,提供了丰富的API和SDK,使得开发者能够轻松地在其平台上实现各种复杂的地图功能...

    GIS设计与开发地图漫游

    GIS设计与开发实验报告中,关于地图漫游的代码和详细过程中,涉及到了多个GIS相关的知识点,包括全屏显示、缩放到指定窗口大小、地图放大、缩放到图层、缩放到所选择的元素等,这些知识点都是GIS设计与开发的基础。

    GIS图层编辑C++

    GIS图层编辑是地理信息系统(GIS)开发中的一个重要环节,特别是在使用C++编程语言进行ArcObjects(AE)开发时。本文档将详细讲解如何在AE环境下设置图层属性,特别是如何将树目录与属性设置对话框关联起来。 首先...

    百度地图生成基站图层工具V3.1.rar

    【百度地图生成基站图层工具V3.1】是一款专为IT从业者和地理信息系统(GIS)爱好者设计的应用程序,主要用于在百度地图上自定义显示基站信息。通过此工具,用户可以方便地将基站数据导入,生成可视化基站图层,从而...

    gis.rar_gis_gis 地图 c++_地图数据读取

    在这个"gis.rar_gis_gis 地图 c++_地图数据读取"的项目中,开发者已经实现了一个基于C++的基础GIS功能,主要用于地图数据的读取和交互操作。 1. **地图数据读取**:在GIS中,地图数据通常以多种格式存在,如...

    陕西省省界GIS矢量图层shp

    在ArcGIS中,用户可以加载、编辑和分析这些矢量图层,进行地图制作、地理分析和空间决策支持。.shp文件通常与其他关联文件一起使用,如.shx(索引文件)、.dbf(属性数据文件)、.prj(投影文件)、.sbn和.sbx(备份...

Global site tag (gtag.js) - Google Analytics