`
GLC
  • 浏览: 112704 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

高德地图——输入经纬度查找

阅读更多

首先我们在原来已安装Android的SDK的情况下、我在需要实现高德地图时,需要先做以下功能:




一、引入高德的jar包:这里为方便大家学习、就不用大家自己去下载了,文件已附在后面、需要的话可以自己下载。

首先创建工程,并在工程Build Path>Configure Build Path…>libraries 中选择“Add Externel JARs…”,选定

MapApi.jar,点击OK,这样就可以将高德地图Android API 库文件引入。然后在工程Build Path>Configure Build

Path…>Order and Export 中将引入的库文件MapApi.jar 选中,点击OK,这样您就可以在您的程序中使用高德地图API

了。

二、我们在不熟悉的情况下、先尽量多的添加此软件应用权限;所以在mainifest中添加如下代码;插入的位置在

<application的代码之前。



<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
	<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
	<uses-permission android:name="android.permission.INTERNET"></uses-permission>
	<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
	<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
	<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
	<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
	<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>





三、接着就要在res文件下的layout中添加界面布局了。其代码如下、你可以完全复制进去。


<?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"
    >
 <!--添加文本輸入框,查找地址-->
 <LinearLayout 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" android:orientation="horizontal" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_gravity="center_horizontal">
    <TextView android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:text="经度"/>
    <EditText android:layout_height="fill_parent" 
    android:layout_width="100px" 
    android:id="@+id/longitude"/>
    <TextView android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:text="纬度"/>
    <EditText android:layout_height="fill_parent" 
    android:layout_width="100px" 
    android:id="@+id/latitude"/>
    <Button android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="查找"
    android:id="@+id/button"/>
    </LinearLayout>   
  
   <com.amap.mapapi.map.MapView android:id="@+id/mapView"  
android:layout_width="fill_parent" android:layout_height="fill_parent"   
android:clickable="true"     
/> 
</LinearLayout>



四、最后就是软件的主程序部分了、里面需要的类和方法不多,主要以按钮的监听器和地图的界面实现为主



public void onCreate(Bundle savedInstanceState) {
		// this.setMapMode(MAP_MODE_VECTOR);//设置地图为矢量模式

		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		mMapView = (MapView) findViewById(R.id.mapView);
		mMapView.setBuiltInZoomControls(true); // 设置启用内置的缩放控件
		mMapController = mMapView.getController(); // 得到mMapView
													// 的控制权,可以用它控制和驱动平移和缩放
		point = new GeoPoint((int) (39.982378 * 1E6), (int) (116.304923 * 1E6)); // 用给定的经纬度构造一个GeoPoint,单位是微度(度*
																					// 1E6)
		// 按钮添加监听器
		button_location = (Button) findViewById(R.id.location);
		longitude = (EditText) findViewById(R.id.longitude);
		latidute = (EditText) findViewById(R.id.latitude);
		locationListener = new OnClickListener() {
			public void onClick(View e) {
				if (e.equals(button_location)) {
					// 得到文本输入框的中经纬 度坐标值
					String latStr = longitude.getText().toString();
					// 将得到的字符串转成数值
					double lat = Integer.parseInt(latStr);
					String lngStr = latidute.getText().toString();
					double lng = Integer.parseInt(lngStr);
					//转成经纬度坐标
					lat=lat*1E6;
					lng=lng*1E6;
						// 用给定的经纬度构造一个GeoPoint,单位是微度(度*1E6)
						point = new GeoPoint((int) (lat), (int) (lng));
						mMapController.setCenter(point); // 设置地图中心点
						mMapController.setZoom(12); // 设置地图zoom 级别
						// 添加地图覆盖物
//						MyLocationOverlay(this, mMapView);
						mylocTest.enableMyLocation(); // 判断是否发现位置提供者
						mylocTest.enableCompass(); // 打开指南针
						mMapView.getOverlays().add(mylocTest);// 添加定位覆盖物
					}
				}
		};
		// 按钮添加监听器
		button_location.setOnClickListener(locationListener);
		mMapController.setCenter(point); // 设置地图中心点
		mMapController.setZoom(12); // 设置地图zoom 级别
		// 添加地图覆盖物
		mylocTest = new MyLocationOverlay(this, mMapView);
		mylocTest.enableMyLocation(); // 判断是否发现位置提供者
		mylocTest.enableCompass(); // 打开指南针
		mMapView.getOverlays().add(mylocTest);// 添加定位覆盖物
	}
//另外一个添加界面覆盖物的类:

public class MyLocationOverlayProxy extends com.amap.mapapi.map.MyLocationOverlay{

	private Location mLocation;
	 protected final Paint mPaint = new Paint();
	 protected final Paint mCirclePaint = new Paint();
	 private Bitmap gps_marker=null;
	 private Point mMapCoords = new Point();
	 private final float gps_marker_CENTER_X;
	 private final float gps_marker_CENTER_Y;
	 private final LinkedList<Runnable> mRunOnFirstFix = new LinkedList<Runnable>();
	public MyLocationOverlayProxy(amap amap, MapView mMapView) {

		super(amap, mMapView);
		gps_marker = ((BitmapDrawable) amap.getResources().getDrawable(
				R.drawable.marker_gpsvalid)).getBitmap();
		gps_marker_CENTER_X = gps_marker.getWidth() / 2 - 0.5f;
		gps_marker_CENTER_Y= gps_marker.getHeight() / 2 - 0.5f;
	}
	
	public boolean runOnFirstFix(final Runnable runnable) {
		if (mLocation != null) {
			new Thread(runnable).start();
			return true;
		} else {
			mRunOnFirstFix.addLast(runnable);
			return false;
		}
    }
	
	public void onLocationChanged(Location location) {
		// TODO Auto-generated method stub	
        mLocation = location;
        for(final Runnable runnable : mRunOnFirstFix) {
			new Thread(runnable).start();
		}
		mRunOnFirstFix.clear();
		super.onLocationChanged(location);
	}
	
	protected void drawMyLocation(Canvas canvas,  MapView mapView, final Location mLocation,
			GeoPoint point, long time) {
	    Projection pj=mapView.getProjection();
        if (mLocation != null) {
                mMapCoords=pj.toPixels(point, null);
				final float radius = pj.metersToEquatorPixels(mLocation.getAccuracy());	
				this.mCirclePaint.setAntiAlias(true);
				this.mCirclePaint.setARGB(35, 131, 182, 222);
				this.mCirclePaint.setAlpha(50);
				this.mCirclePaint.setStyle(Style.FILL);
				canvas.drawCircle(mMapCoords.x, mMapCoords.y, radius, this.mCirclePaint);
				this.mCirclePaint.setARGB(225, 131, 182, 222);
				this.mCirclePaint.setAlpha(150);
				this.mCirclePaint.setStyle(Style.STROKE);
				canvas.drawCircle(mMapCoords.x, mMapCoords.y, radius, this.mCirclePaint);				
				canvas.drawBitmap(gps_marker, mMapCoords.x-gps_marker_CENTER_X, mMapCoords.y-gps_marker_CENTER_Y, this.mPaint);
		}
  }

}



最后


[img]





[/img]

[img]

[/img]
  • 大小: 124.7 KB
  • 大小: 123 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics