是否可以从geojson检查一个点是否在多边形内部?

问题描述 投票:0回答:4

我有一个带有一些多边形的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());
                    }

我可以通过将标记位置传递给它来检查标记是否位于这些多边形之一内。

但是当我将相机移到远离标记时,多边形不会渲染,检查器也不再工作。

所以我的问题是,有没有办法检查标记是否在多边形内部,无论我的相机指向哪里?

android mapbox-gl
4个回答
5
投票

检查点是否位于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




0
投票

如果是点或线,您可以使用:

var coords = turf.polygon(e.features[0].geometry.coordinates);    
map.queryRenderedFeatures({ layers: [layer], filter: ['within', coords] })

希望有帮助

© www.soinside.com 2019 - 2024. All rights reserved.