凸包是将点集最外层的点连接起来构成的凸多边形,它能够包含点集中所有的点。
可以计算凸包的方法有很多,请根据你使用的应用场景做选择。
存储端计算
特点:效率高,降低数据传输损耗
方法:使用PostGIS数据库,通过查询语句实现。
SELECT the_geom AS alpha_shape
FROM
points_as_polygon(
'SELECT id, ST_X(your_geom) AS x, ST_Y(your_geom) AS y FROM your_table');
官方使用说明,请参考这里
用户端计算
特点:数据量大时,效率偏低。开发易实现,系统影响性小。
方法:采用Turf JavaScript库实现。
var points = turf.featureCollection([
turf.point([-63.601226, 44.642643]),
turf.point([-63.591442, 44.651436]),
turf.point([-63.580799, 44.648749]),
turf.point([-63.573589, 44.641788]),
turf.point([-63.587665, 44.64533]),
turf.point([-63.595218, 44.64765]),
]);
var options = { units: "miles", maxEdge: 1 };
var hull = turf.concave(points, options);
脚本预处理
特点:应用便捷,预处理结果不易更改,适应性差。
方法:采用QGIS或ArcGIS Desktop软件实现。
QGIS参考矢量>地理处理工具>凸包,参考这里。
ArcGIS使用Minimum Bounding Geometry,参考这里。