访问Openlayers网站(https://jinuss.github.io/Openlayers_map_pages/,网站是基于
Vue3
+Openlayers
,里面有大量的实践和案例。觉得还不错,可以给个小星星Star,鼓励一波 https://github.com/Jinuss/OpenlayersMap哦~
概述
在Openlayers中,MultiPolygon
类顾名思义就是表示由多个多边形组成的几何对象,关于Polygon
类可以参考这篇文章源码分析之Openlayers中Polygon类;同Polygon
类一样,MultiPolygon
类继承于SimpleGeometry
类。
本文主要介绍MultiPolygon
类的源码实现和原理。
源码分析
MultiPolygon
类的源码实现
MultiPolygon
类的源码实现如下:
class MultiPolygon extends SimpleGeometry {
constructor(coordinates, layout, endss) {
super();
this.endss_ = [];
this.flatInteriorPointRevision_ = -1;
this.flatInteriorPoints = null;
this.maxDelta_ = -1;
this.maxDeltaRevision_ = -1;
this.orientedRevision_ = -1;
this.orientedFlatCoordinates_ = null;
if (!endss && !Array.isArray(coordinates[0])) {
const polygons = coordinates;
const flatCoordinates = [];
const thisEndss = [];
for (let i = 0, ii = polygons.length; i < ii; ++i) {
const polygon = polygons[i];
const offset = flatCoordinates.length;
const ends = polygon.getEnds();
for (let j = 0, jj = ends.length; j < jj; ++j) {
ends[j] += offset;
}
extend(flatCoordinates, polygon.getFlatCoordinates());
thisEndss.push(ends);
}
layout =
polygons.length === 0 ? this.getLayout() : polygons[0].getLayout();
coordinates = flatCoordinates;
endss = thisEndss;
}
if (layout !== undefined && endss) {
this.setFlatCoordinates(layout, coordinates);
this.endss_ = endss;
} else {
this.setCoordinates(coordinates, layout);
}
}
appendPolygon(polygon) {
let ends;
if (!this.flatCoordinates) {
this.flatCoordinates = polygon.getFlatCoordinates().slice();
ends = polygon.getEnds().slice()