查找几何点是否在多个多边形之一内
Find if a geometric point is within one of several polygons
我试图找出一个几何点是否在几个多边形之一内,我正在使用 mongoose 和节点 js。我在 Mongoose 文档中找到了这段代码。
var polyA = [[[ 10, 20 ], [ 10, 40 ], [ 30, 40 ], [ 30, 20 ]]]
query.where('loc').within().geometry({ type: 'Polygon', coordinates: polyA })
// or
var polyB = [[ 0, 0 ], [ 1, 1 ]]
query.where('loc').within().geometry({ type: 'LineString', coordinates: polyB })
// or
var polyC = [ 0, 0 ]
query.where('loc').within().geometry({ type: 'Point', coordinates: polyC })
// or
query.where('loc').intersects().geometry({ type: 'Point', coordinates: polyC })
但是它们都是在一个多边形中搜索,我想在例如 10 个多边形中搜索。可以吗
谢谢。
查询点intersects
或者是within
一个MultiPolygon:
var polygons = [polyA, polyB, polyC];
var multipolygon = { type: 'MultiPolygon', coordinates: polygons };
var results = query.where('loc').within().geometry(multipolygon);
现在,如果要查找哪个多边形包含该点,请使用 JSTS:
// MongoDB query result
var point = results[0].loc;
// Convert geometries to JSTS
var geojsonReader = new jsts.io.GeoJSONReader();
jstsPoint = geojsonReader.read(point);
var jstsPolygons = polygons.map(function(polygon, index) {
jstsPolygon = geojsonReader.read({type: 'Polygon', coordinates: polygon});
jstsPolygon.__index = index; // or use whatever suits you best
return jstsPolygon;
});
// Find polygons containing point
jstsPolygons.filter(function(jstsPolygon){
return jstsPoint.within(jstsPolygon);
}).forEach(function(poly) {
console.log('Point is within polygon ' + poly.__index);
});
Here 是一个使用 GeoJSON 几何图形的 JSTS 工作示例。
我试图找出一个几何点是否在几个多边形之一内,我正在使用 mongoose 和节点 js。我在 Mongoose 文档中找到了这段代码。
var polyA = [[[ 10, 20 ], [ 10, 40 ], [ 30, 40 ], [ 30, 20 ]]]
query.where('loc').within().geometry({ type: 'Polygon', coordinates: polyA })
// or
var polyB = [[ 0, 0 ], [ 1, 1 ]]
query.where('loc').within().geometry({ type: 'LineString', coordinates: polyB })
// or
var polyC = [ 0, 0 ]
query.where('loc').within().geometry({ type: 'Point', coordinates: polyC })
// or
query.where('loc').intersects().geometry({ type: 'Point', coordinates: polyC })
但是它们都是在一个多边形中搜索,我想在例如 10 个多边形中搜索。可以吗
谢谢。
查询点intersects
或者是within
一个MultiPolygon:
var polygons = [polyA, polyB, polyC];
var multipolygon = { type: 'MultiPolygon', coordinates: polygons };
var results = query.where('loc').within().geometry(multipolygon);
现在,如果要查找哪个多边形包含该点,请使用 JSTS:
// MongoDB query result
var point = results[0].loc;
// Convert geometries to JSTS
var geojsonReader = new jsts.io.GeoJSONReader();
jstsPoint = geojsonReader.read(point);
var jstsPolygons = polygons.map(function(polygon, index) {
jstsPolygon = geojsonReader.read({type: 'Polygon', coordinates: polygon});
jstsPolygon.__index = index; // or use whatever suits you best
return jstsPolygon;
});
// Find polygons containing point
jstsPolygons.filter(function(jstsPolygon){
return jstsPoint.within(jstsPolygon);
}).forEach(function(poly) {
console.log('Point is within polygon ' + poly.__index);
});
Here 是一个使用 GeoJSON 几何图形的 JSTS 工作示例。