在gis系統中 經常會用到一些裁剪的方法,首先推薦一個非常好用的空間分析JavaScript庫--Turf.js,不僅功能強大、使用簡單,同時處理速度也很快。
Turf.js中提供了一中多邊形的裁剪方法是使用多邊形去裁剪多邊形,但是如果實際工作中需要使用到線去裁剪多邊形卻無法滿足。
http://turfjs.org/docs#bboxClip
這邊文章使用turf.js的基本方法,在此基礎上構建了線裁剪多邊形的方法。
點擊可查看在線demo
算法原理
(一)單個polygon的裁剪
相交要求:線與多邊形有且只有兩個交點,且可以將多邊形分成兩部分
1、計算多邊形與線的兩個交點並根據交點將多邊形分割成兩條線
2、將分割的兩條線根據切割點與切割線進行拼接,分別組成兩個多邊形,(需要注意的是線的方向性問題)
(二)環多邊形的裁剪
相交要求:線與多邊形有且只有兩個交點,且可以將多邊形分成兩部分,同時切割線不可與內環相交
注:在geojson數據中外部多邊形的順序為順時針,環內部多邊形順序為逆時針
1、將環多邊形拆分成內環和外環
2、對外環多邊形通過切割線進行裁剪 方法同(一)
3、組合切割后的外環多邊形和內環多邊形:
通過判斷內環多邊形在那一個切割多邊形內部從而判斷如何進行組合還原
(三)MultiPolygon多邊形的裁剪
相交要求:切割線只能與MultiPolygon中的一個Polygon有兩個交點
1、拆分MultiPolygon分割為多個Polygon
2、根據切割線與多邊形的相交情況,對有兩個交點的多邊形進行進行切割
3、將分割后的多邊形與不參與切割的多邊形合並組成要素集進行返回即可