java 地理围栏实现_基于Turf.js教你快速实现地理围栏的合并拆分

以下内容转载自totoro的文章《几何计算-基于Turf.js实现多边形的拆分及合并》

作者:totoro

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

JavaScript API GL近期为支持物流行业实现了几何图形编辑器,用户可通过编辑器接口进行点、线、面、圆的绘制和编辑。在物流行业中常见的使用场景是配送区域及地理围栏的绘制,常会有对已有区域进行拆分或者合并的需要,所以编辑器也提供了相应的功能。本文介绍了如何基于Turf实现多边形的拆分及合并。

背景介绍

多边形的拆分合并

多边形的拆分是指将多边形沿着线切分为几个多边形。如下图所示,不仅可以沿线一分为二,当线与多边形有多段相交时也可以分为多份,另外当多边形带洞(环多边形)时也可以在拆分后保持洞的形状。

56e15a0c0b3215329021a7fe8f81ebec.gif

多边形的合并是指将多个多边形合并为一个多边形,其前提条件是多边形之间有交叉区域或者共边。如下图所示,完全共边或者部分共边都可以合并,当有交叉时会贯通交叉部分。

e2be9a6d058539b112faef1120199814.gif

Turf.js

不难发现,多边形的拆分合并中会有大量且复杂的几何计算,包括点、线、面相互之间的相交、包含等计算。不过我们并不需要造轮子,可以使用Turf.js完成大部分的基础计算。Turf是由mapbox推出的空间几何计算库,常用于地理空间内的几何关系分析,功能非常强大,具体功能可见Turf.js | Advanced geospatial analysis。

可是Turf.js目前还没有提供多边形的拆分方法,另外多边形的合并虽然已有union方法,但在实际应用中也无法很好解决部分共边的多边形的合并问题,所以只能在Turf的基础上自行实现符合业务需求的拆分合并功能。

多边形的拆分

基础方案

多边形拆分的核心思想是找到切割点,所以线对面的切割可以简化为线对线的切割。两条线互相切割得到子线段,将子线段互相组合形成多边形。

16e6f2c6b7b34d4e5253ab7cdb640b81.png

如上图所示,待拆分的多边形记为polygon,切割折线记为splitter。拆分步骤如下:

面化为线:polygon从起点解开可以形成路径为[p0, p1, p2, p3, p0

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值