Android GIS开发系列-- 入门季(14)FeatureLayer之范围查询

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<FeatureResult> 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 ,如需转载请自行联系原作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值