访问Openlayers网站(https://jinuss.github.io/Openlayers_map_pages/,网站是基于
Vue3
+Openlayers
,里面有大量的实践和案例。觉得还不错,可以给个小星星Star,鼓励一波 https://github.com/Jinuss/OpenlayersMap哦~
概述
在 Openlayers 中,Polygon
类是SimpleGeometry
的子类,用于表示多边形几何形状。多边形是由一组点组成的封闭图形,通常由一系列的坐标点和多个边界组成. 关于SimpleGeometry
类,可以参考这篇文章源码分析之Openlayers中SimpleGeometry类
本文主要介绍Polygon
类的源码实现和原理。
源码解析
Polygon
类源码实现
Polygon
类的源码实现如下:
class Polygon extends SimpleGeometry {
constructor() {
super();
this.ends_ = [];
this.flatInteriorPointRevsion_ = -1;
this.flatInteriorPoint_ = null;
this.maxDelta_=-1;
this.maxDeltaRevision_ = -1;
this.orientrevision_ = -1;
this.orientedFlatCoordinates_ = null;
if (layout !== undefined && ends) {
this.setFlatCoordinates(layout, coordinates);
this.ends_ = ends;
} else {
this.setCoordinates(coordinates, layout);
}
}
appendLinearRing(linearRing) {
if (!this.flatCoordinates) {
this.flatCoordinates = linearRing.getFlatCoordinates().slice();
} else {
extend(this.flatCoordinates, linearRing.getFlatCoordinates());
}
this.ends_.push(this.flatCoordinates.length);
this.changed();
}
clone() {
const polygon = new Polygon(
this.flatCoordinates.slice(),
this.layout,
this.ends_.slice()
);
polygon.applyProperties(this);
return polygon;
}
closestPointXY(x,