arcgis for android: 绘制带流向箭头的线

本文介绍了在ArcGIS for Android中如何绘制带流向箭头的线,因为linesymbol默认配置无法满足需求,所以采取手动绘制箭头的方法。通过添加箭头图标,计算线的起点、终点和地图比例尺,确定箭头的位置和旋转角度,最终成功实现箭头的绘制。
摘要由CSDN通过智能技术生成

arcgis for android: 绘制带流向箭头的线

需求描述

项目中需要绘制如下图所示的线,但arcgis for android中linesymbol只提供了单箭头/颜色/实虚线等简单配置项,无法通过配置更改线型.

思路

既然没法直接配置线型,那我们就把箭头画上去!
利用PictureMarkerSymbol把箭头画到线上,我们需要这些东西:
1.箭头图标
2.每条线上各自需要多少箭头,以及相应的坐标位置
3.由于线的倾斜程度各不相同,我们需要算出每条线上箭头的旋转角度
得到这些东西 我们就可以渲染箭头啦,开整~

实现过程

一.将箭头图标添加到项目中

箭头如下图所示,添加过程略过
在这里插入图片描述

二.依据线的起点,终点,和地图当前比例尺来绘制箭头

/***
*添加箭头
*l1:线的起点  l2:线的终点  scale:当前地图比例尺(通过mapview自带接口获得 自行百度) l:线(获取某些信息用,懒得一个个传就直接把线传来了)
*/
private void addarrow(LineGlBean l1,LineGlBean l2,double scale,LineBean l) {
   
        //计算两点之间的实际像素
        Point p1 = new Point(convertToFloat(l1.getX(),10),convertToFloat(l1.getY(),10),SpatialReferences.getWgs84());
        Point p2 = new Point(convertToFloat(l2.getX(),10),convertToFloat(l2.getY(),10),SpatialReferences.getWgs84());
        LinearUnit linearUnit = new LinearUnit(LinearUnitId.METERS);//距离单位
        AngularUnit angularUnit = new AngularUnit(AngularUnitId.DEGREES);//角度单位

        double pixel = metreToScreenPixel(GeometryEngine.distanceGeodetic(p1,p2,linearUnit, angularUnit, GeodeticCurveType.GEODESIC).getDistance(),scale,getBaseContext())*10E7;
        //计算总箭头数(这里一直没太弄明白单位,感兴趣的自己研究下)
        int number = (int)(pixel/13/2);
        List<PointBean> pointBeanList = new ArrayList<>();
        for(int i=1;i<number;i++)
        {
   //计算每个箭头的位置,创建PictureMarkerSymbol,为之设置图片和角度
        

			//获取箭头图标生成PictureMarkerSymbol
            Bitmap bitmap = null;
            String lineType = "";//信息容器,与绘制无关
            String linecode = l.getGLDM();//信息容器,与绘制无关
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值