Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android-高德地圖

Android-高德地圖

編輯:關於Android編程

配置信息
--AndroidManifest.xml--

 

1.基本地圖顯示
MapView:定義地圖容器
AMap:地圖控制 包括顯示交通 定位層顯示配置
>初始化容器MapView
>配置信息
private void init() {
		if (aMap == null) {
			aMap = mapView.getMap();
		}
	}

2.通過AMap顯示交通
aMap.setTrafficEnabled(true);

3.Location定位功能
>設置當前位置的配置
private void setUpMap() {
	MyLocationStyle locationStyle=new MyLocationStyle();
	locationStyle.strokeColor(Color.BLACK);
	locationStyle.strokeWidth(1.0f);
	locationStyle.radiusFillColor(0x8333);
	locationStyle.myLocationIcon(BitmapDescriptorFactory.fromResource(R.drawable.location_marker));
	aMap.setMyLocationStyle(locationStyle);//設置定位點樣式
	aMap.setLocationSource(this);//設置監聽
	aMap.setMyLocationEnabled(true);//啟動定位圖層
}

>繼承LocationSource,定位監聽開始和結束
@Override
public void activate(OnLocationChangedListener arg0) {
	mLocationChangedListener=arg0;
	if (mLocationManager==null) {
		mLocationManager=LocationManagerProxy.getInstance(this);
		//調用控制 每2秒更新1次,其主要的實時更改在最後一個參數AMapLocationListener
		mLocationManager.requestLocationUpdates(LocationProviderProxy.AMapNetwork, 2000, 10, this);
	}
}


@Override
public void deactivate() {
	mLocationChangedListener=null;
	if (mLocationManager!=null) {
		mLocationManager.removeUpdates(this);
		mLocationManager.destroy();
		mLocationManager=null;
	}
}

>繼承AMapLocationListener,主要實現onLocationChanged修改位置
@Override
public void onLocationChanged(AMapLocation arg0) {
	if (mLocationChangedListener!=null && arg0!=null) {
		mLocationChangedListener.onLocationChanged(arg0);
	}
}

4.定位中 實時更改方向和位置,默認的定位只是簡單的圖片 沒有涉及方向等(思路:添加標記並用傳感器修改指示方向)
>初始化傳感器
mSensorManager=(SensorManager)getSystemService(Context.SENSOR_SERVICE);
mSensor=mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);

>初始化Marker,
private void setUpMap() {
	
	mGPSMarker=aMap.addMarker(new MarkerOptions()
		.icon(BitmapDescriptorFactory.fromResource(R.drawable.location_marker))
		.anchor(0.5f, 0.5f));
	
	aMap.setLocationSource(this);
	aMap.setMyLocationEnabled(true);
}

>啟動位置監聽器時注冊傳感器 關閉時注銷
@Override
public void activate(OnLocationChangedListener arg0) {
	//....
	mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_NORMAL);
}


@Override
public void deactivate() {
	//.....
	mSensorManager.unregisterListener(this, mSensor);
}

>位置移動時修改Marker
@Override
public void onLocationChanged(AMapLocation arg0) {
	if (mLocationChangedListener!=null && arg0!=null) {
		mLocationChangedListener.onLocationChanged(arg0);
		mGPSMarker.setPosition(new LatLng(arg0.getLatitude(),arg0.getLongitude()));
	}
}

>位置角度轉換時修改Marker
@Override
public void onSensorChanged(SensorEvent event) {
	if (System.currentTimeMillis() - lastTime < TIME_SENSOR) {
		return;
	}
	switch (event.sensor.getType()) {
	case Sensor.TYPE_ORIENTATION: {
		float x = event.values[0];
		 
		x += getScreenRotationOnPhone(this);
		x %= 360.0F;
		if (x > 180.0F)
			x -= 360.0F;
		else if (x < -180.0F)
			x += 360.0F;
		if (Math.abs(mAngle -90+ x) < 3.0f) {
			break;
		}
		mAngle = x;
		if (mGPSMarker != null) {
			mGPSMarker.setRotateAngle(-mAngle); 
			aMap.invalidate();
		}
		lastTime = System.currentTimeMillis();
	}
	}
}


/**
 * 獲取當前屏幕旋轉角度
 * 
 * @param activity
 * @return 0表示是豎屏; 90表示是左橫屏; 180表示是反向豎屏; 270表示是右橫屏
 */
public static int getScreenRotationOnPhone(Context context) {
	final Display display = ((WindowManager) context
			.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();


	switch (display.getRotation()) {
		case Surface.ROTATION_0:
			return 0;
		case Surface.ROTATION_90:
			return 90;
		case Surface.ROTATION_180:
			return 180;
		case Surface.ROTATION_270:
			return -90;
	}
	return 0;
}

5.設置縮放和顯示位置
LatLngBounds bounds=new LatLngBounds.Builder()
				.include(new LatLng(22.117719,112.323274))
				.include(new LatLng(22.117719,114.323274))
				.include(new LatLng(24.117719,112.323274))
				.include(new LatLng(24.117719,114.323274))
				.build();
aMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, 10));
aMap.moveCamera(CameraUpdateFactory.zoomBy(8));


aMap.setOnMapLoadedListener(this);//設置地圖顯示監聽器

6.設置標記
ArrayList icons=new ArrayList();
icons.add(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE));
//...	
aMap.addMarker(new MarkerOptions().icons(icons)//顯示多圖片
		.period(2)//變化周期
		.position(new LatLng(23.118674,113.321614))
		.anchor(0.5f, 0.5f)//錨點位置
		.title(fuliyinkai)//點擊顯示文字
		).showInfoWindow();//默認顯示


aMap.setInfoWindowAdapter(this);//點擊標記 顯示自定義浮動View

7.設置圓形
aMap.addCircle(
	new CircleOptions().center(new LatLng(23.118674,113.321614))
	.fillColor(0x88888888).strokeColor(Color.BLACK)
	.strokeWidth(5).radius(400));

8.獲取周圍關鍵字查詢
>文字查找
Inputtips inputtips=new Inputtips(this,new InputtipsListener() {
			@Override
			public void onGetInputtips(List tips, int arg1) {
				tip.getName()//獲取匹配的單個數據名字
			}
		});
try {
	inputtips.requestInputtips(content,);
} catch (AMapException e) {
	e.printStackTrace();
}

>地圖獲取相關位置
// 第一個參數表示搜索字符串,第二個參數表示poi搜索類型,第三個參數表示poi搜索區域(空字符串代表全國)
query = new PoiSearch.Query(keyWord, , editCity.getText().toString());
query.setPageSize(10);// 設置每頁最多返回多少條poiitem
query.setPageNum(currentPage);// 設置查第一頁
poiSearch = new PoiSearch(this, query);
poiSearch.setOnPoiSearchListener(this);//主要執行onPoiSearched()
poiSearch.searchPOIAsyn();


@Override
public void onPoiSearched(PoiResult result, int rCode) {
	dissmissProgressDialog();// 隱藏對話框
	if (rCode == 0) {
		if (result != null && result.getQuery() != null) {// 搜索poi的結果
			if (result.getQuery().equals(query)) {// 是否是同一條
				poiResult = result;
				// 取得搜索到的poiitems有多少頁
				List poiItems = poiResult.getPois();// 取得第一頁的poiitem數據,頁數從數字0開始
				List suggestionCities = poiResult
						.getSearchSuggestionCitys();// 當搜索不到poiitem數據時,會返回含有搜索關鍵字的城市信息


				if (poiItems != null && poiItems.size() > 0) {
					aMap.clear();// 清理之前的圖標
					PoiOverlay poiOverlay = new PoiOverlay(aMap, poiItems);
					poiOverlay.removeFromMap();
					poiOverlay.addToMap();
					poiOverlay.zoomToSpan();
				} else if (suggestionCities != null
						&& suggestionCities.size() > 0) {
					showSuggestCity(suggestionCities);
				} else {
					ToastUtil.show(PoiKeywordSearchActivity.this,
							R.string.no_result);
				}
			}
		} else {
			ToastUtil.show(PoiKeywordSearchActivity.this,
					R.string.no_result);
		}
	} else if (rCode == 27) {
		ToastUtil.show(PoiKeywordSearchActivity.this,
				R.string.error_network);
	} else if (rCode == 32) {
		ToastUtil.show(PoiKeywordSearchActivity.this, R.string.error_key);
	} else {
		ToastUtil.show(PoiKeywordSearchActivity.this,
				getString(R.string.error_other) + rCode);
	}


}


 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved