我有一个带有一些多边形的geojson,将其添加为源并创建一个图层以在mapbox地图上显示这些功能。
由于我正在使用此方法:(从示例源编辑:MapboxGLAndroidSDKTestApp)
final PointF pixel = mapboxMap.getProjection().toScreenLocation(point);
List<Feature> fList = mapboxMap.queryRenderedFeatures(pixel, "polygons");
for(Feature feature:fList){
Log.d(TAG,"FeatureInfo: "+feature.toJson());
}
我可以通过将标记位置传递给它来检查标记是否位于这些多边形之一内。
但是当我将相机移到远离标记时,多边形不会渲染,检查器也不再工作。
所以我的问题是,有没有办法检查标记是否在多边形内部,无论我的相机指向哪里?
检查点是否位于mapbox上的多边形内部 可以使用 turf.js 库 http://turfjs.org/
这是您不需要在地图框上绘制点或多边形的方式(无需绘制)。
var point = turf.point([-75.343, 39.984]);
// here first is lng and then lat
var polygon = turf.polygon([[
[-2.275543, 53.464547],
[-2.275543, 53.489271],
[-2.215118, 53.489271],
[-2.215118, 53.464547],
[-2.275543, 53.464547]
]], { name: 'poly1'});
// here first is lng and then lat
现在您可以使用 turf lib 中的内部方法 即
turf.inside(point, polygon); // return boolean True/False
如果是点或线,您可以使用:
var coords = turf.polygon(e.features[0].geometry.coordinates);
map.queryRenderedFeatures({ layers: [layer], filter: ['within', coords] })
希望有帮助