博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android GIS开发系列-- 入门季(14)FeatureLayer之范围查询
阅读量:5965 次
发布时间:2019-06-19

本文共 2289 字,大约阅读时间需要 7 分钟。

Android GIS开发系列-- 入门季(5),这篇文章中,我们知道如何去查找要素。现在有一个需求,查找某点5000米范围的要素,那如何来做呢?首先我们需要在地图上画个5000米半径的圆,然后根据QueryParameters来查询相关要素。具体如下:

一、画个5000米半径的圆

1.确定中心点:centerPoint 

2.半径为5000 
3.将一个圆分为120个点(当然可以细分更多),比如第一个点角度为0,求出sin与cos值,再分别求出经度与纬度:

纬度= 中心点的纬度+半径*cos值*每米的纬度偏移量经度= 中心点的经度+半径*sin值*每米的经度偏移量 相关代码如下 :
 
View Code

将上面的Polygon添加到GraphicsLayer中:

SimpleFillSymbol fillSymbol = new SimpleFillSymbol(Color.parseColor("#88ff0000"));                fillSymbol.setOutline(new SimpleLineSymbol(Color.TRANSPARENT, 0)); Graphic g = new Graphic(polygon, fillSymbol); mLayer.addGraphic(g); 效果如下:

分别计算polygon的面积与长度:
double area = GeometryEngine.geodesicArea(polygon, SpatialReference.create(SpatialReference.WKID_WGS84), new AreaUnit(AreaUnit.Code.SQUARE_METER)); Log.e("huang", "area==="+area); double length = GeometryEngine.geodesicLength(polygon, SpatialReference.create(SpatialReference.WKID_WGS84), new LinearUnit(LinearUnit.Code.METER)); Log.e("huang", "area==="+length); 结果值为与实际计算值有偏差,但偏差不是很大。
//面积:78128662.10079278//长度:31343.779712156855

二、通过圆polygon来查询FeatureLayer在此范围内的要素

private void queryFeature(Geometry geometry) {        try {            QueryParameters args = new QueryParameters();            args.setReturnGeometry(true);// 是否返回Geometry            args.setGeometry(geometry); // 查询范围面            args.setInSpatialReference(SpatialReference                    .create(SpatialReference.WKID_WGS84));            args.setSpatialRelationship(SpatialRelationship.WITHIN);            //获取查询结果result            Future
result = featureLayer.getFeatureTable() .queryFeatures(args, null); } catch (Exception e) { e.printStackTrace(); } }

三、思考

其实FeatureLayer的getFeatureIDs(float x, float y, int tolerance)与 

getFeatureIDs(float x, float y, int tolerance, int numberOfResults)、

GraphicsLayer中的getGraphicIDs(float x, float y, int tolerance)与 

getGraphicIDs(float x, float y, int tolerance, int numberOfResults) 
这几个查询方法也是通过范围去查询,只不过x,y是屏幕坐标,相当于中心坐标,而tolerance相当于半径,范围的大小由tolerance决定。那5dp的查找范围相当于多少范围呢? 
可以获取当前地图的比例尺*查找半径获取到。

 

 
 
 
 
没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。
   本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/7752021.html
,如需转载请自行联系原作者
你可能感兴趣的文章
根据request获取请求路径
查看>>
mysql 并行复制
查看>>
傲不可长,欲不可纵,乐不可极,志不可满——提高个人修养
查看>>
linux系统增加swap容量的方法
查看>>
后台调用gps
查看>>
HTML5标签的语义认知和理解(1)
查看>>
MySQL日志功能详解(2)
查看>>
HP LaserJet 305X 和 339X 系列一体机如何设置手动或自动接收传真?
查看>>
linux之权限之隐藏权限
查看>>
XDCTF成长记录
查看>>
Linux系统中的文本处理工具
查看>>
IDE---Python IDE之Eric5在window下的安装
查看>>
Mybatis调用Oracle中的存储过程和function
查看>>
telnet :No route to host
查看>>
基本安装lnmp环境
查看>>
yum源资料汇总
查看>>
7、MTC与MTV,http请求介绍
查看>>
logstash消费阿里云kafka消息
查看>>
第四节课作业
查看>>
EasyUI Calendar 日历
查看>>