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

GIS的学习(二十一)在osmdroid 地图中添加marker 并添加事件

阅读更多

 

   我有 osmdroid,overlayswithfocus,当我们单击在覆盖的标注或弹出窗口显示,但我需要它回到正常的叠加时我触摸其他叠加图。所以,我需要帮助请。和我的添加叠加的 for 循环调用此函数。

   在osmdroid中添加marker并事件的实现。

  在osmdroid 地图中添加marker 并添加事件
     主要采用ItemizedOverlayWithFocus图层并添加
        ItemizedIconOverlay.OnItemGestureListener事件监听实现

 

 

 

package com.geoserver.osmdroid;

import java.util.ArrayList;
import org.osmdroid.ResourceProxy;
import org.osmdroid.DefaultResourceProxyImpl;
import org.osmdroid.tileprovider.util.CloudmadeUtil;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapView;
import org.osmdroid.views.overlay.ItemizedIconOverlay;
import org.osmdroid.views.overlay.ItemizedOverlayWithFocus;
import org.osmdroid.views.overlay.MinimapOverlay;
import org.osmdroid.views.overlay.OverlayItem;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.RelativeLayout;
import android.widget.RelativeLayout.LayoutParams;
import android.widget.Toast;

/**
 * 
 * 在osmdroid 地图中添加marker 并添加事件
 * 
 *   主要采用ItemizedOverlayWithFocus图层并添加
 *       ItemizedIconOverlay.OnItemGestureListener事件监听实现
 *       
			final ArrayList<OverlayItem> items = new ArrayList<OverlayItem>();
			items.add(new OverlayItem("Hannover", "Tiny SampleDescription",
					new GeoPoint(52370816, 9735936))); // Hannover
			items.add(new OverlayItem("Berlin",
					"This is a relatively short SampleDescription.",
					new GeoPoint(52518333, 13408333))); // Berlin
			items.add(new OverlayItem(
					"Washington",
					"This SampleDescription is a pretty long one. Almost as long as a the great wall in china.",
					new GeoPoint(38895000, -77036667))); // Washington
			items.add(new OverlayItem("San Francisco", "SampleDescription",
					new GeoPoint(37779300, -122419200))); // San Francisco
			this.mMyLocationOverlay = new ItemizedOverlayWithFocus<OverlayItem>(
					items,
					new ItemizedIconOverlay.OnItemGestureListener<OverlayItem>() {
						@Override
						public boolean onItemSingleTapUp(final int index,
								final OverlayItem item) {
							Toast.makeText(
									SampleWithMinimapItemizedoverlayWithFocus.this,
									"Item '" + item.mTitle + "' (index="
											+ index + ") got single tapped up",
									Toast.LENGTH_LONG).show();
							return true;
						}

						@Override
						public boolean onItemLongPress(final int index,
								final OverlayItem item) {
							Toast.makeText(
									SampleWithMinimapItemizedoverlayWithFocus.this,
									"Item '" + item.mTitle + "' (index="
											+ index + ") got long pressed",
									Toast.LENGTH_LONG).show();
							return false;
						}
					}, mResourceProxy);
			this.mMyLocationOverlay.setFocusItemsOnTap(true);
			this.mMyLocationOverlay.setFocusedItem(0);
			this.mOsmv.getOverlays().add(this.mMyLocationOverlay);
 * @Title:
 * @Description: 实现TODO
 * @Copyright:Copyright (c) 2011
 * @Company:
 * @Date:2012-9-6
 * @author longgangbai
 * @version 1.0
 */
public class SampleWithMinimapItemizedoverlayWithFocus extends Activity {
	// ===========================================================
	// Constants // ===========================================================
	private static final int MENU_ZOOMIN_ID = Menu.FIRST;
	private static final int MENU_ZOOMOUT_ID = MENU_ZOOMIN_ID + 1;
	// ===========================================================
	// Fields
	// ===========================================================
	private MapView mOsmv;
	private ItemizedOverlayWithFocus<OverlayItem> mMyLocationOverlay;
	private ResourceProxy mResourceProxy;

	// ===========================================================
	// Constructors
	// ===========================================================
	/** Called when the activity is first created. */
	@Override
	public void onCreate(final Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		mResourceProxy = new DefaultResourceProxyImpl(getApplicationContext());
		final RelativeLayout rl = new RelativeLayout(this);
		CloudmadeUtil.retrieveCloudmadeKey(getApplicationContext());
		this.mOsmv = new MapView(this, 256);
		rl.addView(this.mOsmv, new RelativeLayout.LayoutParams(
				LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
		/* Itemized Overlay */
		{

			/*
			 * Create a static ItemizedOverlay showing a some Markers on some
			 * cities.
			 */
			final ArrayList<OverlayItem> items = new ArrayList<OverlayItem>();
			items.add(new OverlayItem("Hannover", "Tiny SampleDescription",
					new GeoPoint(52370816, 9735936))); // Hannover
			items.add(new OverlayItem("Berlin",
					"This is a relatively short SampleDescription.",
					new GeoPoint(52518333, 13408333))); // Berlin
			items.add(new OverlayItem(
					"Washington",
					"This SampleDescription is a pretty long one. Almost as long as a the great wall in china.",
					new GeoPoint(38895000, -77036667))); // Washington
			items.add(new OverlayItem("San Francisco", "SampleDescription",
					new GeoPoint(37779300, -122419200))); // San Francisco
			/* OnTapListener for the Markers, shows a simple Toast. */
			this.mMyLocationOverlay = new ItemizedOverlayWithFocus<OverlayItem>(
					items,
					new ItemizedIconOverlay.OnItemGestureListener<OverlayItem>() {
						@Override
						public boolean onItemSingleTapUp(final int index,
								final OverlayItem item) {
							Toast.makeText(
									SampleWithMinimapItemizedoverlayWithFocus.this,
									"Item '" + item.mTitle + "' (index="
											+ index + ") got single tapped up",
									Toast.LENGTH_LONG).show();
							return true;
						}

						@Override
						public boolean onItemLongPress(final int index,
								final OverlayItem item) {
							Toast.makeText(
									SampleWithMinimapItemizedoverlayWithFocus.this,
									"Item '" + item.mTitle + "' (index="
											+ index + ") got long pressed",
									Toast.LENGTH_LONG).show();
							return false;
						}
					}, mResourceProxy);
			this.mMyLocationOverlay.setFocusItemsOnTap(true);
			this.mMyLocationOverlay.setFocusedItem(0);
			this.mOsmv.getOverlays().add(this.mMyLocationOverlay);
		}
		/* MiniMap */
		{
			MinimapOverlay miniMapOverlay = new MinimapOverlay(this,
					mOsmv.getTileRequestCompleteHandler());
			this.mOsmv.getOverlays().add(miniMapOverlay);
		}
		this.setContentView(rl);
	}

	@Override
	public boolean onCreateOptionsMenu(final Menu pMenu) {
		pMenu.add(0, MENU_ZOOMIN_ID, Menu.NONE, "ZoomIn");
		pMenu.add(0, MENU_ZOOMOUT_ID, Menu.NONE, "ZoomOut");
		return true;
	}

	@Override
	public boolean onMenuItemSelected(final int featureId, final MenuItem item) {
		switch (item.getItemId()) {
		case MENU_ZOOMIN_ID:
			this.mOsmv.getController().zoomIn();

			return true;
		case MENU_ZOOMOUT_ID:
			this.mOsmv.getController().zoomOut();

			return true;
		}
		return false;
	}
}

 

分享到:
评论

相关推荐

    osmdroid地图

    通过LocationProvider,开发者可以获取到GPS或网络定位的数据,并在地图上显示定位图标。此外,还可以设置定位更新的频率和精度。 **7. 范例应用:OsmdroidDemo** 提供的"OsmdroidDemo"可能是一个演示osmdroid功能...

    JavaScript添加marker并连线

    总结来说,"JavaScript添加marker并连线"的实例展示了如何利用SuperMap iClient 6R for JavaScript在地图上添加标记和绘制连接它们的线。这在展示地理空间数据、路径规划或网络分析等场景中非常有用。开发者可以根据...

    完美解决百度地图聚合中的marker添加label后移动、放大缩小时label消失的问题

    然而,一旦添加了label(标记文字)并在地图上进行移动或缩放操作,label有时会消失,这无疑对用户的理解造成了困扰。本篇文章将详细讲解如何完美解决这个问题,并提供获取已聚合点位的接口方案。 首先,我们需要...

    百度地图加载海量marker卡顿问题

    在开发基于地图的应用时,尤其是使用百度地图API时,可能会遇到一个常见的问题——当需要在地图上显示大量标记(marker)时,地图加载会变得卡顿,用户体验显著下降。这个问题通常由于JavaScript处理大量DOM元素导致...

    osmdroid基础符号化.zip

    如果你需要更复杂的文字显示,可以自定义`Marker`的子类,覆盖其`draw`方法,直接在地图上绘制文本。 2. **点符号化**: `Marker`是osmdroid中表示点的基本类,你可以通过设置`Marker`的图标来改变点的外观。图标...

    高德地图定位缩放比例尺添加marker的Demo

    "高德地图定位缩放比例尺添加marker的Demo"是一个很好的示例,它展示了如何在Android应用中集成高德地图,并实现一些核心功能,如用户定位、比例尺显示、Marker的添加以及自定义Marker和缩放操作。下面我们将详细...

    android 使用osmdroid 加载离线map格式数据以及地图网格

    在Android开发中,有时我们需要实现离线地图功能,以便用户在无网络环境下仍能查看地图。Osmdroid是一个开源库,专门用于在Android平台上显示OpenStreetMap(OSM)地图,支持离线地图数据的加载和操作。本教程将详细...

    百度地图自定义Marker(android)

    在Android开发中,百度地图API提供了丰富的功能,其中包括自定义Marker。Marker是地图上的一个标记,通常用于表示特定的位置或信息。本项目聚焦于在Android平台上如何利用百度地图SDK实现自定义Marker,以满足个性化...

    百度地图多个marker+窗口信息+聚合

    综上所述,这个项目结合了前后端开发技术,通过百度地图API实现了在地图上展示多个地点、为每个地点添加信息窗口,并且在地点密集时采用点聚合优化显示效果。对于想学习或提升地图应用开发技能的开发者来说,这是一...

    高德地图的marker聚合

    Marker在地图应用中通常用于表示特定地理位置的点,比如兴趣点、店铺位置或者用户当前位置等。然而,当一个区域内有大量Marker时,如果直接在地图上显示所有这些点,可能会导致地图变得混乱,难以阅读。为了解决这个...

    osmdroid+google地图android应用

    本教程将深入探讨如何利用osmdroid库集成Google地图,解决地图显示为空白的问题,并实现基本的定位、自定义marker和画线功能。osmdroid是一个开源的Android地图库,它为开发者提供了灵活的方式来展示来自不同来源的...

    高德地图将marker用连线连起来

    在地图应用中,`marker`通常用来表示地图上的一个具体位置,它可以是简单的图标,也可以是自定义的图片。在高德地图API中,我们可以使用`AMap.Marker`类创建marker,并通过设置`icon`属性来自定义marker的图标。 接...

    高德地图Marker平滑移动

    1. **初始化地图**:首先,你需要在XML布局文件中添加MapView,并在对应的Activity或Fragment中初始化高德地图API,获取Map对象。 2. **创建Marker**:根据需求,你可以创建一个或多个Marker,设置它们的初始位置。...

    百度地图marker动画的实现

    在开发Web应用时,地图组件常常扮演着重要角色,而百度地图API则为开发者提供了丰富的功能,包括在地图上添加标记(marker)。本教程将详细讲解如何利用百度地图API和CSS3来实现marker的动画效果。 首先,让我们...

    Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用

    在地图上添加Marker,你可以创建一个`LatLng`对象来表示位置,然后创建一个`OverlayOptions`对象,设置Marker的图标、位置等属性。最后通过`Map`对象的`addOverlay()`方法将其添加到地图上: ```java LatLng ...

    百度地图API详解之事件机制,闭包机制,marker事件,信息窗口,叠加层

    5. **叠加层(Overlay)**:叠加层是百度地图API中用于在地图上添加自定义图形或图像的一类对象,如Polygon(多边形)、Polyline(线)等。它们可以用于绘制特定形状,或者覆盖地图的一部分,实现更丰富的地图展示...

    Android 高德地图自定义点聚合marker图片及Overlay点击选中功能

    在地图上,当大量标记(Marker)聚集在一个区域时,为了提高用户体验和视觉效果,我们会采用点聚合技术,将相近的标记合并为一个更大的图标,显示数量或代表类别。自定义点聚合Marker图片意味着我们可以根据自己的...

    百度地图添加marker

    百度地图添加自定义marker 详见:http://www.cnblogs.com/wangfengdange/p/5640867.html

    openlayers实现本地图片作为背景,添加marker标记

    在这个例子中,我们将讨论如何利用OpenLayers将本地图片作为地图背景,并添加marker标记。 首先,为了将本地图片用作背景,我们需要创建一个OpenLayers的图层实例。这通常通过`ol.source.ImageStatic`类来实现。你...

    Android百度地图Marker轨迹坐标连线

    为了在地图上添加Marker,我们需要使用`BaiduMap`对象的`addOverlay`方法,传入`OverlayOptions`对象来描述Marker的属性,如位置、图标、点击事件等。`OverlayOptions`可以通过`MarkerOptions`类进行构建,设置其...

Global site tag (gtag.js) - Google Analytics