`
蓝月儿
  • 浏览: 49819 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

地图练习

阅读更多
今天练习了一下地图的编程,继承MapActivity类和Overlay类
在配置文件中添加
<com.google.android.maps.MapView
                 android:id="@+id/mapview_mymap_display"
                 android:layout_width="fill_parent"
                 android:layout_height="fill_parent"
                 android:apiKey="0NFa8R5kt6KmenQdcxhItm2rcaSZaNhOe3WZQTw"
                 />

在Activity的OnCreate方法中设置MapView的各个属性。是否可以获得单击事件(setClickable()方法),设置地图缩放尺度(setBuiltInZoomControls(true)),设置地图的视图模式。有三种:1.街道视图2。卫星视图3。一般地图。方法分别是mapview.setStreetView();mapview.setSatelite();mapview.setTraffic()
对地图的操作是通过对一个MapController对象的操作,该对象是通过MapView.getController()方法获取的。在使地图显示某一个地点时,则是MapController.animateTo()方法,参数是一个GeoPoint类型,经度和维度的一个组合。个人感觉类似于坐标值,并且可以通过MapController.setZoom来设置放大的倍数,其中数值越大,地图的详细细节????。GeoCoder类是处理地理编码的一个类,根据输入的地点可以获取一个和此地点相关的Address类的集合。
List<Address> addresses=geoCodeer.getFromLLocationName();方法,参数有两个,一个是输入的地点,另一个是获取的地点的个数(集合的大小?)。
也可为地图设置一个图标图层,通过继承OverLay类。在此类中重写draw()方法。canvas paint 画图的“工具”,canvas.drawBitmap();canvas.drawText();.左上坐标,根据映射将地理经纬度转换的屏幕像素坐标来确定。不要忘记把你创建的图层通过map.getOverlay()(获取一个图层集合)的add方法添加到地图上。
最后不要忘了在列表中添加访问intnet的权限(<uses-permission android:name="android:permission.Internet"/>),并且为应用添加类库(<uses-library android:name="com.google.android.maps"/>),否则地图不会出来的。
例子代码1(提供用户输入查询地点的activity):
package com.sdut.edu.zlm;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class Map extends Activity {
	
	EditText etinput;
	Button btquery;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        findViews();
        setListeners();
    }
	private void setListeners() {
		// TODO Auto-generated method stub
		btquery.setOnClickListener(query);
	}
	private void findViews() {
		// TODO Auto-generated method stub
		etinput=(EditText)findViewById(R.id.edittext_main_inputaddress);
        btquery=(Button)findViewById(R.id.button_main_query);
	}
	
	Button.OnClickListener query=new Button.OnClickListener()
	{

		public void onClick(View v) {
			// TODO Auto-generated method stub
			Bundle bundle=new Bundle();
			Log.d("Map_query",etinput.getText().toString());
			bundle.putString("address",etinput.getText().toString());
			Intent intent=new Intent();
			intent.setClass(Map.this,MyMap.class);
			intent.putExtras(bundle);
			startActivity(intent);
		}
	};
}

例子代码2(显示地图的MapActivity):
package com.sdut.edu.zlm;

import java.util.List;
import java.util.Locale;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Point;
import android.location.Address;
import android.location.Geocoder;
import android.os.Bundle;
import android.util.Log;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;

public class MyMap extends MapActivity{//程序列表中要添加联网的权限还要加一个类库
	
	MapView mapview;
    private MapController mapcontroller;
    private GeoPoint geopoint;
    protected String addressname;
    
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.mymap);
		//用于显示地图上的一个ViewGroup
		mapview=(MapView)findViewById(R.id.mapview_mymap_display);
		
		
		Bundle bundle=getIntent().getExtras();
		Log.d("MyMap_Oncreate_bundle",bundle+"");
		addressname=bundle.getString("address");
		Log.d("MyMap_oncreate",addressname);
//		findViews();
		//使得这个view可以获得点击事件
		mapview.setClickable(true);
		//是否可以设置自动缩放设置
		mapview.setBuiltInZoomControls(true);
		
		//获取控制缩放的操作对象
		mapcontroller=mapview.getController();
		//通过系统默认区域设置进行地图的定位
		Geocoder geocoder=new Geocoder(this);
		
		mapview.setTraffic(true);
		try
		{
				List<Address> addresses=geocoder.getFromLocationName(addressname,2);
			Log.d("MyMap_oncreate_addressname3",addressname);
			geopoint = new GeoPoint(
					(int) (addresses.get(0).getLatitude() * 1E6),
					(int) (addresses.get(0).getLongitude() * 1E6));
				MyOverlay myoverlay=new MyOverlay();
			    
			    mapview.getOverlays().add(myoverlay);
			    mapcontroller.setZoom(20);
			    mapcontroller.animateTo(geopoint);
		}
		catch(Exception e)
		{
			e.printStackTrace(); 
		}
	}

	@Override
	protected boolean isRouteDisplayed() {
		// TODO Auto-generated method stub
		return false;
	}
	
	class MyOverlay extends Overlay
	{
		@Override
		public boolean draw(Canvas canvas, MapView mapview, boolean shadow, long when) {
			// TODO Auto-generated method stub
			Paint paint=new Paint();
			Point screenPoint=new Point();
			mapview.getProjection().toPixels(geopoint, screenPoint);//??经纬度坐标和屏幕像素坐标的一个映射
			//并且这个映射可以把地理上的经纬度转换在屏幕上的像素点
			Bitmap bitmap=BitmapFactory.decodeResource(getResources(),R.drawable.flag1);
			canvas.drawBitmap(bitmap,screenPoint.x,screenPoint.y, paint);
			canvas.drawText(addressname,screenPoint.x,screenPoint.y, paint);
			return super.draw(canvas, mapview, shadow, when);
		}
	}
}

配置文件1:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
   
<EditText android:id="@+id/edittext_main_inputaddress" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="西直门"></EditText>

<Button android:text="查询" android:id="@+id/button_main_query" android:layout_width="fill_parent" android:layout_height="wrap_content"></Button>
</LinearLayout>

配置文件2:
<?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">
  <com.google.android.maps.MapView
                 android:id="@+id/mapview_mymap_display"
                 android:layout_width="fill_parent"
                 android:layout_height="fill_parent"
                 android:apiKey="0NFa8R5kt6KmenQdcxhItm2rcaSZaNhOe3WZQTw"
                 />
</LinearLayout>

列表为:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.sdut.edu.zlm"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
    <uses-library android:name="com.google.android.maps"/>
        <activity android:name=".Map"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
<activity android:name=".MyMap"/>
    </application>
    <uses-sdk android:minSdkVersion="3" />
    <uses-permission android:name="android.perssion.ACCESS_FINE_LOCATION" />
 <uses-permission android:name="android.permission.INTERNET" />  
</manifest> 


只是同一个程序结果在1.5的上面和在2.2的上面的运行结果不一样,





原因还没找到。
  • 大小: 53.7 KB
  • 大小: 34.9 KB
分享到:
评论

相关推荐

    环境空间数据练习图_ArcGIS地图练习图_

    标题“环境空间数据练习图_ArcGIS地图练习图_”暗示了这是一个与地理空间数据相关的学习项目,重点在于利用ArcGIS进行地图绘制和练习。这可能包括对自然环境、气候、土地覆盖、人口分布等各类环境要素的数据进行可视...

    高考热点——竖版世界地图练习及答案解析.docx

    1. 地图类型及其特点:本练习主要涉及竖版世界地图,相较于传统的横版世界地图,竖版地图在展示高纬度地区的地理特征时具有优势,如两极地区的形状变形较小,更直观地显示了两极地区国家和地区的相对位置,同时也更...

    地球及地图练习试题汇总.doc

    以上是对“地球及地图练习试题汇总.doc”中涉及的地球和地球仪知识的详细解释,包括经纬网、半球划分、地球形状、地理位置、地球运动等方面的内容。这些知识点是地理学习的基础,对于理解和应用地理知识至关重要。

    argis资源矢量地图练习用全国省级地市级县市级行政区划shp

    argis资源矢量地图练习用全国省级地市级县市级行政区划shp

    最新真三地图添加多种的技能

    《真三国无双》是一款深受玩家喜爱的策略对战游戏,其基于魔兽争霸III平台的MOD地图“真三”更是让无数玩家沉迷其中。标题提到的“最新真三地图添加多种的技能”,意味着游戏开发者或者地图制作者为游戏带来了新的...

    高考地理复习地球与地图练习.doc

    1. **地图比例尺的理解**:比例尺是地图的重要组成部分,它表示了地图上距离与实际距离的缩放关系。题目中提到的三种比例尺分别为1:1000000,1:100000和1:1000,比例尺越大,表示地图上单位距离代表的实际距离越小,...

    空白地图填图练习.doc

    地理知识点大全 本资源摘要信息涵盖了地理知识的方方面面,包括陆地和海洋、世界地形、气候类型、自然带、中国行政区划、中国地形等方面。 一、陆地和海洋 * 七大洲:亚洲、非洲、欧洲、北美洲、南美洲、澳大利亚...

    2019版高考地理一轮复习第1部分自然地理第1章地球与地图第二讲地图练习新人教版201806133240

    - 比例尺是地图上距离与实际距离的比值,它决定了地图的详细程度。在同一图幅大小的地图中,比例尺越大,表示的实际区域越小,细节展现得越清晰。 - 在题目中,甲图使用点状符号表示城市,乙图使用面状符号,通常...

    2016高考地理二轮复习专题一地球仪与地图练习

    1. **地图的基本要素**:地图是地理学习的重要工具,它包含了比例尺、方向、图例和注记等基本要素。在上述题目中,通过经纬度的运用来确定地理位置,体现了地图中方向的重要性。同时,通过等高线判断地形特征,如...

    2016秋七年级科学上册3.2地球仪和地图练习题2浙教版.doc

    【知识点详解】 ...通过以上内容,我们可以理解地球仪和地图的基本概念,学会如何使用经纬度定位地球上的地点,并掌握地图的三要素在实际应用中的重要性。这些知识对于地理学习和日常生活中的导航具有重要意义。

    人教版七年级地理上册第一章地球和地图练习题.pdf

    9. 地图比例尺应用:台北到福州的直线距离在地图上为2.2厘米,若按比例尺计算,实际距离大约在253千米左右。 10. 城市旅游地图选择:畅游城市,最好选择城市交通图,以便了解交通路线和景点分布。 11. 野外宿营...

    2020高考地理二轮复习技能一地理图表突破专项5区域地图练习

    【知识点】 1. 地理图表分析:地理学习中,图表是重要的信息呈现方式,能够直观展示地理事物的...通过这样的练习,学生可以提升地理图表解读能力,理解地理现象背后的机制,以及地理因素如何影响生物行为和人类活动。

    真三国无双AI地图,蓝宝石,练习

    真三国无双AI地图,蓝宝石,练习

    世界地理填图练习大图、清晰.doc

    1. 经纬度标注:地图练习中要求学生在图示的经线上标出经度,纬线上标出纬度。这涉及到地理坐标系统的基本概念,地球被划分为经线(子午线)和纬线(等纬圈),经度从0°到180°E和180°W,纬度则从0°(赤道)到90...

    教育信息化背景下历史地图在初中历史教学中的运用.zip

    利用多媒体技术,教师可以设计互动式的地图练习,让学生亲自操作,探索历史事件的发生地点和过程。这种参与式学习增强了学生的动手能力和思维活跃度,提高了他们对历史知识的掌握程度。 再者,历史地图结合大数据...

    地图专项练习.ppt

    地图专项练习.ppt

    2018高考地理一轮复习题组层级快练2地图

    题目中的地图练习涉及到等高线地图的阅读,包括等高线的分布规律、地形判断、高差计算、坡度分析以及方向判断。 2. **等高线地图的判读**:等高线图是表示地形地貌的重要方式,等高线间距代表地形的坡度,等高线上...

    七年级上册《地球和地图》教学要点.docx

    - **过程与方法**:通过课堂活动和地图练习,提高学生的地图阅读和应用能力,培养团队协作和独立思考的习惯。 - **情感态度与价值观**:激发学生对地理的兴趣,树立科学世界观,增强集体意识,为中考做好准备。 ...

    河南省淮阳县西城中学七年级地理上册1.3地图练习题无答案中图版

    地图是地理学的重要工具,被誉为地理学的第二语言。它们帮助我们理解和解析地球表面的特征、分布和空间关系。...通过这些练习,学生可以巩固地图阅读的基本技能,为更深入的地理学习打下坚实基础。

Global site tag (gtag.js) - Google Analytics