基于Android平台的GPS面积测量软件开发

2017-06-15 20:08柳开弘王学文
科技创新导报 2017年11期
关键词:全球定位系统

柳开弘+王学文

DOI:10.16660/j.cnki.1674-098X.2017.11.161

摘 要:为了提高现有土地面积测量方法效率,并为之提供一种操作简单、易于普及的方法,该文提出一种基于Android平台智能手机的土地面积测量软件开发。该软件一方面设计了手持GPS面积测量的改良方案,利用球面多边形角盈计算其面积避免了坐标转换过程中产生的误差,并且能自动采集GPS样本信息然后进行计算;一方面又利用百度地图接口,设计出利用高清卫星图像对样本区域边界勾勒并测量的方法,对于边界清晰的区域可不用到实地测量。实际测量结果表明,该软件可以满足林业上对林地测量或其他工程测绘水平面积的精度要求。

关键词:面积测量 Android软件开发 全球定位系统(GPS)

中图分类号:TP311.1 文献标识码:A 文章编号:1674-098X(2017)04(b)-0161-05

第四代移动通讯技术(4G)为移动设备带来了更快的数据传输速率,也为计算机网路与电信网络的融合提供了支持。随着4G网络的大范围普及,移动设备终端不仅是通讯网络的设备终端,也将成为互联网的终端。因此,移动终端设备的应用和需求拥有庞大的发展空间。美国谷歌公司为此于2008年9月23日推出了一款基于Linux的自由及开放源代码的操作系统——Android。其在硬件上融合了多种传感器,如电子罗盘、重力感应、光线感应、陀螺仪、GPS等,并且为其提供了应用层的调用接口,使得Android软件开发者可以便捷地调用这些传感器来开发各种功能的软件。

另一方面,利用GPS(全球定位系统简称)测量面积,是目前林地测量及其他工程测绘上普遍使用的方法。利用GPS的定位功能,在指定区域即可获得该区域各点的GPS地理坐标,经过对多个点的地理坐标采集处理,可以计算出对应的面积。但是,传统的GPS接收机功耗高、体积庞大、购置成本比较高。而且,在操作和使用方面需要经过专业的学习与培训。因此,传统的GPS面积测量难以在普通民用得以普及。而选择在Android平台上开发测面积APP,一方面,由于Android设备的普及,大部分人都拥有Android设备,并且其集成了高性能GPS模块,使得GPS面积测量可以方便、快捷、便携而且成本大大降低;另一方面,利用Android平台的开放性优势及设备的性能优势,使GPS面积测量应用接入百度地图开放平台,卫星地图、矢量地图等可视化操作大大降低了用户的学习成本,使得农民朋友们也可以轻松地使用上GPS面积测量。

1 传统面积测量方法

(1)用皮尺或测绳人工丈量距离,用面积计算公式计算地块面积。

(2)用罗盘仪、经纬仪等仪器测量距离,然后计算面积。罗盘仪或经纬仪测量即按照罗盘仪或经纬仪闭合导线方法,即定边界点为测点,测定两个变量即测距和测角(方位角),要求相邻点之间必须通视,斜距的倾斜角超过5°时要水平校正,山地测量的闭合差应小于1/150,平地测量的闭合差应小于1/200[1]。再利用距离和角度把测点展绘到图纸上,再把相邻点用直线连接起来,然后利用电子求积仪计算面积;或者是利用数方格纸法计算面积(根据比例尺把图纸面积换算成实际面积)。

(3)用GPS测量面积,GPS是(全球定位系统)的简称。测量时,持GPS接收机沿地块边界绕行一周,即可得到被测地块的面积。

(4)利用全站仪测定地块面积,先用独立坐标假定测站点坐标,安置全站仪,利用假定的测站点坐标设置测站,利用角度定后视的方法,再拿棱镜绕着边界走一圈,全站仪瞄准棱镜边测边记录点的坐标。在仪器里,计算面积有两种方法:一种是直接在仪器里利用面积求算功能求算面积;另一种是利用SD卡导出数据,利用插件转换X、Y坐标,最后利用CASS9.2软件求算地块面积。

2 当前面积测绘存在的问题

对于测量工作人员来说,当前的测量方式虽然已达到测量要求的精确度,但是亦存在许多的问题。第一,当前的测量方法都必须到现场进行测量,工作量大,野外作业辛苦,人力物力消耗都很大,特别是林业部门要测量林地面积时交通不便,要走到现场都需要花费很多时间,测量的山头地块有树木遮挡视线,也会给测绘带来更多的困难。第二,当前测量方式的工作效率不够高,而且多人协作上比较麻烦,需要花费很多时间对数据进行处理。

对于普通民众特别是农民朋友来说,用皮尺或罗盘仪等比较传统的方式一方面精准度难以达到要求,一方面也需要花费大量的人力;而先进的测量方式又需要购置专业的设备以及需要经过相应的培训,因此当前的面积测绘方法难以在普通民众上普及。

3 开发应用软件

根据以上存在的问题,笔者在学习计算机编程时就考虑如何依托现今科技发达的手段,开发出一种既可以为一线测绘人员带来便利又能满足工作项目的精度要求,并且在使用操作上大大简化使得在一般民用上得以普及推广的面积测量软件系统。

文中所设计的基于Android平台与智能手机的GPS面积测量软件系统构成上大体可分为3个部分:Android操作系统、百度地图SDK、Bmob后端云。

3.1 Android操作系统

基于Linux开发出的Android操作系统的最大特点就是开源,系统功能齐全,使用稳定。Andorid系统架构采用分层思想,与它的操作系统架构十分相似。Android的系统架构可以分为4个部分,即:Linux内核层、Android运行库、应用框架层、应用程序层[2]。此次开发的软件就是在应用程序层上进行的开发,其在应用框架中提供了众多的组件以及接口,使我们可以对GPS进行集成开发。

3.2 百度地图SDK

百度地圖SDK是一套基于Android 2.1及以上版本设备的应用程序接口。开发者可以使用该接口开发适用于iOS或Android系统移动设备的地图应用,通过调用该接口,轻松访问百度地图的数据和服务,构建功能丰富、交互性强的地图类应用程序[3]。

百度地图SDK在同类服务中具有巨大优势,其整体框架清晰合理,接口设计符合开发者使用逻辑,各方面设计人性化、规范化;在性能上进行了多方面优化处理,使得使用过程中CPU占用率、内存等方面系统资源占用率低;并且,百度地图SDK还提供了高精度定位接口,其通过GPS、基站、WiFi联合定位的高精准定位方法,适用于室内、室外多种定位场景,具有出色的定位性能——定位精度高、覆盖率广、网络定位请求流量小、定位速度快,其高精度定位模式定位成功率高达99.5%。百度地图SDK为文章所设计软件的可视化操作及高精度定位功能提供了重要支持。

3.3 Bmob后端云

Bomb后端云是由比目网络科技提供的一体化网络后端服务平台,利用其提供的SDK,在APP中进行调用,便可以很方便地进行网络数据的储存和下载以及云端数据库的编辑。

Bmob云数据库支持String、Number、Boolean、Date、Array等常用的数据类型[4],为文章所设计软件的云端同步功能提供了重要支持。

4 软件总体设计

4.1 开发环境配置

此次开发使用了Android Studio作为软件开发平台,开发语言为Java,使用Android 6.0 SDK。

实际测量所使用的Android智能终端为:小米 Redmi 3S。配置为骁龙430 8核处理器4×1.4GHz+4×1.1GHz,2GB LPDDR3内存,采用Android 6.0.1系统。全面支持GPS、AGPS、GLONASS、北斗定位4大定位系统,为该次软件开发调试提供了很好的硬件测试环境。

4.2 百度地图配置

该次开发基于百度地图SDK v4.0.0,首先配置百度地图图层mMapView.getMap();该次开发中,为了提高用户的可视化操作体验,提供了矢量地图BaiduMap.MAP_TYPE_NORMAL,以及卫星地图BaiduMap.MAP_TYPE_SATELLITE,供用户选择。

百度地图定位功能的实现主要使用BMapManager、MapView、LocationClient、LocationData、LocationClientOption、MyLocationOverlay这6类。BMapManager这类作用在整个地图的生命周期中,程序开发的时候要先对其进行初始化操作;MapView作用在展示地图界面;LocationClient为定位服务的客户端。宿主程序在客户端声明此类,并调用它;LocationData作用于接收定位所得的数据参数;MyLocationOverlay则作用于显示当前位置。

4.3 测绘功能的实现

在该程序中,将主要提供两种测绘方式,分别为勾勒边界法和手持设备移动法。

4.3.1 勾勒边界法

该方法建议配合高清卫星图像进行直观的操作,用户在地图图层上需要设点的位置进行点击,便可以放置一个锚点,锚点可以确认所需测量多边形的一个顶点,然后由多个顶点构成所需测量的区域。放置锚点的设计放置在地图点击响应事件bdMap.setOnMapClickListener中,在里面的onMapClick函数中,配置一个BitmapDescriptor对象并且放置在点击事件传入的LatLng坐标上,使之实现点击地图即可放置一个锚点。BitmapDescriptor對象具有长按拖动功能,用户可以在锚点放置完毕后再进行相应的调整适配。当锚点的位置最后放置完毕后,通过BitmapDescriptor的点击事件,确定所测量区域的顶点,使用DotOptions来配置各个顶点。并且将所有顶点所对应的经纬度LatLng依次添加进path数组中,用于接下来的数据处理。

4.3.2 手持设备移动法

该方法用户可以手持设备对所需测量区域边缘行走一圈,便可在地图图层中绘出该区域的大致轮廓。该方法实现方法为,配置一个TimerTas抽象类,设定好事件时间任务并且相隔5 s触发(如行动速度较快则相应降低触发时间以保证精确度。在每个时间任务里,获取当前的经纬度LatLng,然后配置DotOptions作为所测量区域的顶点,并且将当前的经纬度LatLng添加进path数组中,用于接下来的数据处理。

4.4 计算区域面积算法

4.4.1 球体几何简介

球体几何的产生是因为对欧几里得的《几何原本》的第五公设提出异议而产生的新的几何,因此,对球体表面多边形的计算也与欧几里得几何不同[5]。球面多边形就是封闭的球面折线,在球面多边形中,各个劣大圆弧称为球面多边形的边;相邻两边的公共端点称为球面多边形的顶点;以相邻两边的公共端点(即球面多边形的顶点)为顶点、相邻两边所在大圆弧为边的球面角称为球面多边形的角。具有3条边的球面多边形称为球面三角形;具有n条边的球面多边形称为球面n边形。球面多边形的面积公式是球面几何的基本公式之一,其可用下面公式计算:S=eR2,式中R为球半径,e为球面多边形的球面角盈(即球面多边形的内角和与其相应的平面多边形内角和的差值)。亦可化为如下公式:

其中,S为所求球面多边形面积,R为球体半径,δ为球面多边形的球面内角和,n为该多边形的边数。

4.4.2 面积计算算法设计

坐标两两之间可构成一个向量,笔者首先设计一个以经纬度为坐标参数表示的向量的方位角函数。对于球体几何来说,假定当前两点的坐标经纬度分别是(λ1,φ1)和(λ2,φ2),则其经度差值为?φ。已知atan2为方位角函数,那么可得到球体几何中通过两点经纬度计算其构成向量的方位角公式:

在程序设计中,笔者将其设计为Vector函数,参数为两个坐标的值,返回计算出的方位角。其主要代码如下:

double angle =-Math.atan2(Math.sin(lon1 - lon2)*Math.cos(lat2),Math.cos(lat1)*Math.sin(lat2)-Math.sin(lat1)*Math.cos(lat2)*Math.cos(lon1 - lon2));

其次,设计内角函数Angle,依次传入3个坐标,从几何角度上,3个有序坐标前两者与后两者分别组成向量,形成夹角。那么形成向量的过程中调用上述的Vector函数计算该向量的方位角,然后将两个返回的方位角相减,得到两向量夹角,即其中一个内角,主要代码设计如下:

double vector21 = Vector(p2, p1);

double vector23 = Vector(p2, p3);

double angle = vector21 - vector23;

最后,设计总的球面多边形面积计算函数Spherical PolygonArea,传入处理后的坐标数组,循环分别取出3个坐标值传入Angle函数中并求和,最终根据公式计算出总的面积。主要代码设计如下:

for (int i = 0; i < points.size(); ++i) {

int j = (i + 1) % points.size(); int k = (i + 2) % points.size();

totalAngle += Angle(points.get(i), points.get(j), points.get(k)); }

double planarTotalAngle = (points.size() - 2) * 180.0; double OverAngle = totalAngle - planar-TotalAngle;

return OverAngle * radiansUnit * earthRadi-usMeters * earthRadiusMeters;

4.4.3 GPS误差处理

偏移点可定义为该GPS测量点精度与平均测量精度相差很大的数据点,对于样本方差来说,这些点对其影响最大。由于外界因素或气候不佳等原因影响,会对GPS传感器造成干扰,从而产生了GPS测量偏移点,无法保证所有的数据均在理想范围内。那么,对于这些有偏差的值,我们可以选择从数据中剔除。

对于误差点的判断算法,笔者根据Haversine公式设计了误差判别算法。该公式由James Andrew于1805年首次提出,给定球体上两点之间的经纬度即可算出该两点之间的大圆距离,该公式如下:

其中,hav表达式为

假设在一次测量中,从点A移动到点B,这两点的经纬度分别为A(Lat,Lng1),B(Lat2,Lng2)。那么,设ΔLat=Lat2-Lat2、ΔLng=Lng2-Lng2。根据Haversine公式,化为两坐标点球面距离的算式

其中,R为地球半径,d为所求距离。

根据上述公式,只需要统计出手持设备移动测量方式的GPS采样间隔时间(默认为5 s)所能移动的距离值。

根据上述统计,得到行走5 s所移动的距离值范围在2~10 m之间,取上一次定位得到的经纬度LatLng与该次定位获取的经纬度LatLng值进行运算,得到的d值若大于10 m或小于2 m則可选择删除。

4.5 云同步功能实现

在该软件的设计中,通过Bmob后端云服务,实现了对路径测量的云端保存以及还原,为测量任务的保存以及多人协作测量提供了支持。

4.5.1 云数据库表的设计

在工程新建一个数据对象Model_User,其为继承自BmobUser的子类,并对应于Bmob后台的一个数据表,在表的主要设计中,objectId为每条记录在数据表中的唯一标识,添加记录时自动生成。username与password为用户设定。Path用于储存测量区域边角节点列表。

4.5.2 云同步功能设计

在云同步功能启用之前,需要用户进行注册或登陆,新建Model_User对象bu2,通过调用bu2.login(new SaveListener(){}方法进行登陆,并把登陆后回调的Model_User对象通过((App)getApplication()).model_User=model_user方法进行传递。当用户通过手动勾勒边界法或手持设备移动法对所需测量区域边缘进行勾勒后,启用云端上传功能,调用BmobUser类内的update函数,上传当前勾勒的边缘节点path。相应的,通过调用BmobQuery类的getObject函数,可下载之前上传的节点。

5 软件使用效果

5.1 软件使用测试

笔者以标准足球场(面积为7 140 m2)作为参考,使用该软件进行对比测量。

5.1.1 勾勒边界法

此方法主要适用于非实地考察情况,把软件切换至卫星地图,在地图上拖至此次测量的样本区域——广西梧州高中足球场。从卫星地图上看到样本区域的边界轮廓十分清晰。适合于样本区域边界勾勒。经过软件勾勒并计算后,得到的面积值约为7 229.64 m2,与标准值7 140 m2相比,误差为1.2%。

5.1.2 手持设备移动测量

此方法与传统GPS测量方法相似,此方法测量样本为桂林电子科技大学足球场,打开该软件的自动测量功能,然后围绕该足球场行走一圈,从矢量地图上可以看到GPS采样数据形成的轮廓。

使用手持设备移动测量方法对样本进行5次测量,得到的测量值及偏差如表3所示,测量精度均超过95%,达到了满足林业上对林地测量或其他工程测绘水平面积的精度要求。

5.2 软件使用效果对比

经过测试使用后,与传统测量面积方法对比:(1)用皮尺或测绳人工丈量距离,用面积计算公式计算地块面积的方法最耗时间,效率最低。(2)用罗盘仪、经纬仪等仪器测量距离,然后计算面积这种方法在测量面积比较大时与第一种方法比较效率会比较高些。(3)GPS的成本是罗盘仪的1/10,工效则是罗盘仪的10倍。可见采用GPS比前两种方法都省时、省力、省费用,是林业企业降低成本提高经济效益的有效途径,现在在林地测量上还普遍使用。(4)利用全站仪测定地块面积,它是在电子经纬仪的基础上增加了电子测距的功能,使得仪器不仅能够测角,而且也能测距,并且测量的距离长、时间短、精度高,智能化程度高,功能强大,操作方便,并可为用户量身定制测量程序,满足各种专业测量和工程测量的需求,这在工程测绘制图这方面普遍使用。但该方法人力成本较大,需要专业人员进行操作,不适于民用推广。

笔者所开发的手机测面积软件,在实际测量效果中,精度可达到95%以上,可满足林业上对林地测量或其他工程测绘水平面积的精度要求。而且操作简单,安装在普通智能手机中使用,大大节约了成本,不需要专门数据处理,由软件直接得出测量结果,大大提高了效率。因此在市场上具有很强的推广应用价值,前景广阔。

6 总结与展望

6.1 总结

文章针对现有的土地测量方法的不足之处,并且结合目前Android平台的巨大优势,提出了基于Andorid平台GPS面积测量APP开发方案。该软件提供了手持设备移动测量和手动勾勒边界两种不同的方法供用户选择,弥补了现有GPS测量方式单一的缺陷。在手持设备移动测量方法中,利用球面多边形的角盈计算面积,最大程度地避免了在经纬度转换过程中出现的误差,然后通过Haversine公式设计了偏移点处理方法,使得在数据处理上保证了准确度。并且,手持设备移动测量法相比于传统手持GPS测量法,还集成了百度地图接口,在可视化矢量地图中看到GPS边界采样点的位置。在手动勾勒边界法中,利用百度地图提供的高清卫星地图,对区域边界清晰的区域直接在GPS卫星地图上对其边界进行勾勒计算,免去了人工到达现场的工作。在上述测绘方法完成过程中,该软件还支持云端保存及同步,使得面积测量工作可以保存至云端或与他人协作。随着云端平台的发展,面积测量行业数据共享并上传至云端平台是测绘数字化必然发展的趋势。

6.2 展望

由于时间和个人能力有限,文章对Android平台GPS面积测量APP开发的理解和分析还不够深入,系统功能也有待完善。Android是一个拥有巨大潜力的平台,结合现在非常热门的云计算能力,基于Android平台的GPS面积测量APP在未来可演变为只通过Android进行数据的采样,然后将所收集到的数据全部上传至云端服務器进行运算处理,强大的云运算能力可将采集到的数据进行多次的分析优化,为最终面积运算结果提供更高的精准度。

参考文献

[1] 刘义.GPS在采伐小班面积测量上的应用[J].森林工程,2002(3):10-11.

[2] 刘士润,崔忠伟,韦萍萍,等.基于Android的“智慧旅游”手机APP开发[J].电子技术与软件工程,2015(8):85-86.

[3] 张波,赵双明.基于Android平台的百度地图开发研究[J].软件导刊,2015(7):96-99.

[4] 周冉,高玉竹.Bmob云平台在AndroidApp开发中的应用[J].微型机与应用,2015(1):26-28.

[5] 刘世泽.球面多边形面积[J].高等函授学报:自然科学版,2005(1):25-26,30.

猜你喜欢
全球定位系统
全球定位系统助力黑鹳保护
格拉迪丝·韦斯特:协助开发全球定位系统的隐藏人物
蘑菇点点
基于翻转课堂理论的全球定位系统课堂教学设计