ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

android – OSMBonusPack:检查我的GeoPoint是否在Polygon内部

2019-06-23 10:10:50  阅读:226  来源: 互联网

标签:android osmdroid


我在android中使用osmdroid以及osmdroid奖励包.我画了一个多边形.现在我想检查GeoPoint(纬度,经度)是否位于绘制的多边形内.我该怎么做?

这里我使用的是contains方法,它只接受MotionEvent对象而不能正常工作.有没有其他方法可以做到这一点?

我的代码如下:

GeoPoint gPt0 = new GeoPoint(23.215210, 72.648600);
GeoPoint gPt1 = new GeoPoint(23.216030, 72.648340);
GeoPoint gPt2 = new GeoPoint(23.217400, 72.649070);
GeoPoint gPt3 = new GeoPoint(23.216570, 72.650290);
GeoPoint gPt4 = new GeoPoint(23.214750, 72.649130);

List<GeoPoint> list = new ArrayList<>();
list.add(gPt0);
list.add(gPt1);
list.add(gPt2);
list.add(gPt3);
list.add(gPt4);
Polygon polygon = new Polygon(getApplication());
polygon.setPoints(list);
GeoPoint center = new GeoPoint(23.21612, 72.64933);
map.getOverlays().add(polygon);

MotionEvent event = MotionEvent.obtain(1, 1, MotionEvent.ACTION_HOVER_ENTER, (float)23.21602, (float) 72.64926, 1);

Log.e("CONTAINS", polygon.contains(event)+"");

解决方法:

定义新的运动事件时,X和Y是屏幕中的位置(像素),而不是地图中的位置.此外,在osmdroid的java文档中有一些注意事项:

/** Important note: this function returns correct results only if the Polygon has been drawn before, 
 * and if the MapView positioning has not changed. 
 * @param event
 * @return true if the Polygon contains the event position. 
 */
public boolean contains(MotionEvent event)

如果您看到该方法的源代码(https://github.com/osmdroid/osmdroid/blob/master/osmdroid-android/src/main/java/org/osmdroid/bonuspack/overlays/Polygon.java),则仅使用MotionEvent内的坐标:

return region.contains((int)event.getX(), (int)event.getY());

标签:android,osmdroid
来源: https://codeday.me/bug/20190623/1269757.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有