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();//信息容器,与绘制无关