【控件】给地图添加一个简单的比例尺条

本文介绍了如何在ArcGIS API for Android 10.2.3中,由于官方未提供内置比例尺功能,作者通过自定义实现了一个简单的比例尺条。在屏幕底部添加了一个2cm比例尺条,它会实时显示地图比例尺,随着底图颜色改变调整颜色,并动态调整位置。通过监听地图缩放事件更新比例尺显示,同时讨论了像素单位与厘米的转换,以及如何确保比例尺不会被其他视图遮挡。
AI助手已提取文章相关产品:

ArcGIS API for Android 10.2.3暂时没有直接提供显示比例尺条的功能,但是又必须要用肿么办呢?自己动手丰衣足食!以一个简单的例子介绍一下如何给地图添加一个简单的比例尺条。

一、目标

在屏幕下方添加一个长2cm的比例尺条,实时显示地图当前比例尺,随底图颜色的改变而改变,并动态调整其位置。

 

二、逻辑

1、两个TextView:一个用于显示获取到比例尺,一个用于显示一个2cm的比例尺条

2、2cm比例尺条:1dp=0.00625英寸=0.015875 厘米,理论上不同品牌的手机这个比例是不变的,但是实际上是不太一样的,根据实际情况微调;

3、通过监听mapview的zoom事件来动态获取比例尺,并将其显示到TextView上;

4、通过改变TextView的字体颜色和背景达到随底图颜色变化的目的;

5、将比例尺和下方的result界面置于同一个LinearLayout中,这样就不用担心比例尺条会被下方窗口遮盖。

 

三、代码

1、布局层次

      <LinearLayout
            android:id="@+id/layout_scale_detail"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:orientation="vertical"
            android:visibility="visible" >

            <RelativeLayout
                android:id="@+id/layout_scale"
                android:layout_width="wrap_content"
                android:layout_height="50dp"
                android:paddingBottom="5dp"
                android:paddingLeft="5dp" >

                <TextView
                    android:id="@+id/txtScaleBar"
                    android:layout_width="115dp"
                    android:layout_height="10dp"
                    android:layout_alignParentBottom="true"
                    android:layout_alignParentLeft="true"
                    android:background="@drawable/scale_06_dark" />

                <TextView
                    android:id="@+id/txtScale"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerHorizontal="true"
                    android:layout_centerVertical="true"
                    android:text="2cm"
                    android:textSize="15sp" />
            </RelativeLayout>

            <LinearLayout
                android:id="@+id/layout_detailboard"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@drawable/listbackground_blue"
                android:orientation="horizontal"
                android:visibility="gone" >
            </LinearLayout>
        </LinearLayout>


 2、格式化比例尺并将单位转换为cm/m,其中若比例尺条为2cm,则分母除以50

doubleFormat = new DecimalFormat("0");
txtScale.setText(doubleFormat.format(mMapView.getScale() / 50)+ "米");


3、动态控制比例尺颜色和背景

txtScale.setTextColor(android.graphics.Color.WHITE);
txtScaleBar.setBackground(getResources().getDrawable(R.drawable.scale_06_light));

 

4、动态获取并显示比例尺

		mMapView.setOnZoomListener(new OnZoomListener() {
			/**
			 * 
			 */
			private static final long serialVersionUID = 1L;

			@Override
			public void preAction(float pivotX, float pivotY, double factor) {
				txtScale.setText(doubleFormat.format(mMapView.getScale() / 50)
						+ "米");
			}

			@Override
			public void postAction(float pivotX, float pivotY, double factor) {
				txtScale.setText(doubleFormat.format(mMapView.getScale() / 50)
						+ "米");
			}

		});


 

四、讨论

1、问题关键在于如何在自己手机屏幕上定义一条2cm的比例尺条,建议百度一下px、dp、dip、sp、in、cm相关知识;

2、该实例比较简单,但实用性很强,可用于简单量测,实测精度在1米左右;

3、顺便吐个槽:百度地图那种比例尺条随地图缩放长度不断变化,看着很炫,但是基本什么用。

4、更多参考:

http://blog.youkuaiyun.com/xiaanming/article/details/11821523

http://stackoverflow.com/questions/23303823/android-uses-dp-why-not-cm-mm

 

 

以上谨代表个人意见,抛砖引玉,代码有写作不规范的地方,接受走过的路过的直接拍砖斧正。

您可能感兴趣的与本文相关内容

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值