高德地图入门(三)——地图图层


地图是由多个图层组成,每个图层会显示一部分的地理或交通信息。开发者可以通过设置 AMap 类,灵活控制图层的显示状态。例如,用户所看到包括街道、兴趣点、学校、公园等内容的地图展现就是一个图层。实时路况等的展现也是通过图层来实现的。

基本地图

2D地图SDK提供两种地图类型:MAP_TYPE_NORMAL 和 MAP_TYPE_SATELLITE。

3D地图SDK提供三种地图类型:MAP_TYPE_NORMAL 、 MAP_TYPE_SATELLITE 和 MAP_TYPE_NIGHT。

  • MAP_TYPE_NORMAL:标准地图。地图包含道路、建筑,以及重要的自然风光(如河流)等。道路和功能标签为可见的。

  • MAP_TYPE_SATELLITE:卫星地图。3D地图道路和功能标签为可见的,2D地图道路和功能标签不可见。

  • MAP_TYPE_NIGHT:夜景地图(仅3D地图)。道路和功能标签可见。

 

layers_activity.xml代码如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <com.amap.api.maps.MapView
        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignTop="@id/map"
        android:background="#D000"
        android:minWidth="130dip"
        android:orientation="vertical"
        android:padding="6dp" >
        <Spinner
            android:id="@+id/layers_spinner"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
        <CheckBox
            android:id="@+id/traffic"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/traffic" />
    </LinearLayout>
</RelativeLayout>

   LayersActivity.Activity代码如下:

 /**
 * 基础地图——高德地图中介绍基本图层的使用
 * @author jiatao
 * @date 2015-4-29
 * @version 1.0
 */
package com.jt1024.mapgd;
import com.amap.api.maps.AMap;
import com.amap.api.maps.MapView;
import com.amap.api.maps.model.MyTrafficStyle;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.Spinner;
public class LayersActivity extends Activity implements OnItemSelectedListener,OnClickListener{
 
 private MapView mapView;
 private AMap aMap;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.layers_activity);
  mapView = (MapView) findViewById(R.id.map);
  mapView.onCreate(savedInstanceState);
  init();
 } 
 
 /**
  * 初始化AMap对象
  */
 private void init(){
  
  if(aMap == null){
   aMap = mapView.getMap();
  }
  
  //是否显示交通状况的复选框及其监听器
  CheckBox traffic = (CheckBox) findViewById(R.id.traffic);
  traffic.setOnClickListener(this);
  
  //选择矢量地图/卫星地图/夜景地图的下拉框及其适配器、监听器
  Spinner spinner = (Spinner) findViewById(R.id.layers_spinner);
  ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
    this, R.array.layers_array,
    android.R.layout.simple_spinner_item);
  adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
  spinner.setAdapter(adapter);
  spinner.setOnItemSelectedListener(this);
  
  /**
   * MyTrafficStyle 在地图上添加自定义拥堵畅通颜色的实时交通图层。
   * 默认实时交通的颜色为畅通(#00a209)、缓慢(#ff7508)、拥堵(#ea0312)、极度拥堵(#92000a)。
   * 目前可根据喜好自定义其颜色。
   */
  MyTrafficStyle myTrafficStyle = new MyTrafficStyle();
  
  /**
   * public void setSeriousCongestedColor(int seriousCongestedColor)
   * 设置行驶严重拥堵路段的标记颜色。
   * 参数:seriousCongestedColor - 颜色值。
   */
  myTrafficStyle.setSeriousCongestedColor(0xff92000a);
  
  /**
   * public void setCongestedColor(int congestedColor)
   * 设置行驶拥堵路段的标记颜色。
   * 参数:congestedColor - 颜色值。
   */
  myTrafficStyle.setCongestedColor(0xffea0312);
  
  /**
   * public void setSlowColor(int slowColor)
   * 设置行驶缓慢路段的标记颜色。
   * 参数:slowColor - 颜色值。
   */
  myTrafficStyle.setSlowColor(0xffff7508);
  
  /**
   * public void setSmoothColor(int smoothColor)
   * 设置行驶畅通路段的标记颜色。
   * 参数:smoothColor - 颜色值。
   */
  myTrafficStyle.setSmoothColor(0xff00a209);
  
  aMap.setMyTrafficStyle(myTrafficStyle);
 }
 
 /**
  * 方法必须重写
  */
 @Override
 protected void onResume() {
  super.onResume();
  mapView.onResume();
 }
 /**
  * 方法必须重写
  */
 @Override
 protected void onPause() {
  super.onPause();
  mapView.onPause();
 }
 /**
  * 方法必须重写
  */
 @Override
 protected void onSaveInstanceState(Bundle outState) {
  super.onSaveInstanceState(outState);
  mapView.onSaveInstanceState(outState);
 }
 /**
  * 方法必须重写
  */
 @Override
 protected void onDestroy() {
  super.onDestroy();
  mapView.onDestroy();
 }

 /**
  * 对选择是否显示交通状况事件的响应
  */
 @Override
 public void onClick(View v) {
  // TODO Auto-generated method stub
  if (v.getId() == R.id.traffic) {
   
   /**
    * public final boolean isTrafficEnabled()
    * 返回当前地图是否有实时交通数据。
    * 返回:如果返回true 则说明当前地图有实时交通数据,否则返回false。
    * 
    * public void setTrafficEnabled(boolean enabled)
    * 设置是否显示交通。默认不显示。
    * 参数:enabled - true 表示显示,false 表示不显示。
    * 抛出:RemoteException
    */   
   aMap.setTrafficEnabled(((CheckBox) v).isChecked());// 显示实时交通状况
  }
 }

 @Override
 public void onItemSelected(AdapterView<?> parent, View view, int position,
   long id) {
  // TODO Auto-generated method stub
  if (aMap != null) {
   setLayer((String) parent.getItemAtPosition(position));
  }
 }
 
 /**
  * 选择矢量地图/卫星地图/夜景地图事件的响应
  */
 private void setLayer(String layerName) {
  if (layerName.equals(getString(R.string.normal))) {
   aMap.setMapType(AMap.MAP_TYPE_NORMAL);// 矢量地图模式
  } else if (layerName.equals(getString(R.string.satellite))) {
   aMap.setMapType(AMap.MAP_TYPE_SATELLITE);// 卫星地图模式
  } else if (layerName.equals(getString(R.string.night_mode))) {
   aMap.setMapType(AMap.MAP_TYPE_NIGHT);// 夜景地图模式
  }
 }

 @Override
 public void onNothingSelected(AdapterView<?> parent) {
  // TODO Auto-generated method stub
  
 }
}

转载于:https://my.oschina.net/u/2344644/blog/408283

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cesium是一个开源的地球可视化引擎,高德地图是中国主要的地图服务提供商。在Cesium中使用高德地图图层时,可能会出现一些偏移的问题。 这种偏移问题主要是由于不同地图服务提供商使用了自己的坐标系统或投影方式,导致不同地图之间存在一定的地理坐标偏移。在使用高德地图图层时,也会遇到类似的偏移情况。 为了解决这个问题,可以尝试以下两种方法来进行偏移修正。 第一种方法是手动修正。在Cesium中,我们可以通过手动调整图层的位置,使其与其他图层或实际地图上的特定位置对齐。调整的方法可以根据实际情况选择,在代码中设置图层的位置坐标。 第二种方法是使用坐标转换库。可以使用一些开源的坐标转换库,如Proj4js、Coordinate Transformations for Cesium等,将高德地图的坐标转换到与Cesium相同的坐标系或投影系统。通过使用这些坐标转换库,可以将高德地图的坐标进行转换,以解决偏移问题。 需要注意的是,每个地图服务提供商可能会采用不同的坐标系统、投影方式或坐标转换方法。因此,在使用高德地图图层时,需要根据实际情况选择适合的坐标转换方法,并进行相应的调整。 总之,在Cesium中使用高德地图图层时存在一定的偏移问题,可以通过手动修正或使用坐标转换库来解决。根据实际情况选择适合的方法,进行相应的调整,以实现准确的地图显示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值