223 lines
5.4 KiB
JavaScript
223 lines
5.4 KiB
JavaScript
import {
|
|
createEmpty,
|
|
extendFlatCoordinates,
|
|
forEachCorner,
|
|
intersects,
|
|
intersectsSegment
|
|
} from "./chunk-CKDBVGKM.js";
|
|
|
|
// node_modules/ol/geom/flat/segments.js
|
|
function forEach(flatCoordinates, offset, end, stride, callback) {
|
|
let ret;
|
|
offset += stride;
|
|
for (; offset < end; offset += stride) {
|
|
ret = callback(
|
|
flatCoordinates.slice(offset - stride, offset),
|
|
flatCoordinates.slice(offset, offset + stride)
|
|
);
|
|
if (ret) {
|
|
return ret;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// node_modules/ol/geom/flat/contains.js
|
|
function linearRingContainsExtent(flatCoordinates, offset, end, stride, extent) {
|
|
const outside = forEachCorner(
|
|
extent,
|
|
/**
|
|
* @param {import("../../coordinate.js").Coordinate} coordinate Coordinate.
|
|
* @return {boolean} Contains (x, y).
|
|
*/
|
|
function(coordinate) {
|
|
return !linearRingContainsXY(
|
|
flatCoordinates,
|
|
offset,
|
|
end,
|
|
stride,
|
|
coordinate[0],
|
|
coordinate[1]
|
|
);
|
|
}
|
|
);
|
|
return !outside;
|
|
}
|
|
function linearRingContainsXY(flatCoordinates, offset, end, stride, x, y) {
|
|
let wn = 0;
|
|
let x1 = flatCoordinates[end - stride];
|
|
let y1 = flatCoordinates[end - stride + 1];
|
|
for (; offset < end; offset += stride) {
|
|
const x2 = flatCoordinates[offset];
|
|
const y2 = flatCoordinates[offset + 1];
|
|
if (y1 <= y) {
|
|
if (y2 > y && (x2 - x1) * (y - y1) - (x - x1) * (y2 - y1) > 0) {
|
|
wn++;
|
|
}
|
|
} else if (y2 <= y && (x2 - x1) * (y - y1) - (x - x1) * (y2 - y1) < 0) {
|
|
wn--;
|
|
}
|
|
x1 = x2;
|
|
y1 = y2;
|
|
}
|
|
return wn !== 0;
|
|
}
|
|
function linearRingsContainsXY(flatCoordinates, offset, ends, stride, x, y) {
|
|
if (ends.length === 0) {
|
|
return false;
|
|
}
|
|
if (!linearRingContainsXY(flatCoordinates, offset, ends[0], stride, x, y)) {
|
|
return false;
|
|
}
|
|
for (let i = 1, ii = ends.length; i < ii; ++i) {
|
|
if (linearRingContainsXY(flatCoordinates, ends[i - 1], ends[i], stride, x, y)) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
function linearRingssContainsXY(flatCoordinates, offset, endss, stride, x, y) {
|
|
if (endss.length === 0) {
|
|
return false;
|
|
}
|
|
for (let i = 0, ii = endss.length; i < ii; ++i) {
|
|
const ends = endss[i];
|
|
if (linearRingsContainsXY(flatCoordinates, offset, ends, stride, x, y)) {
|
|
return true;
|
|
}
|
|
offset = ends[ends.length - 1];
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// node_modules/ol/geom/flat/intersectsextent.js
|
|
function intersectsLineString(flatCoordinates, offset, end, stride, extent, coordinatesExtent) {
|
|
coordinatesExtent = coordinatesExtent ?? extendFlatCoordinates(createEmpty(), flatCoordinates, offset, end, stride);
|
|
if (!intersects(extent, coordinatesExtent)) {
|
|
return false;
|
|
}
|
|
if (coordinatesExtent[0] >= extent[0] && coordinatesExtent[2] <= extent[2] || coordinatesExtent[1] >= extent[1] && coordinatesExtent[3] <= extent[3]) {
|
|
return true;
|
|
}
|
|
return forEach(
|
|
flatCoordinates,
|
|
offset,
|
|
end,
|
|
stride,
|
|
/**
|
|
* @param {import("../../coordinate.js").Coordinate} point1 Start point.
|
|
* @param {import("../../coordinate.js").Coordinate} point2 End point.
|
|
* @return {boolean} `true` if the segment and the extent intersect,
|
|
* `false` otherwise.
|
|
*/
|
|
function(point1, point2) {
|
|
return intersectsSegment(extent, point1, point2);
|
|
}
|
|
);
|
|
}
|
|
function intersectsLineStringArray(flatCoordinates, offset, ends, stride, extent) {
|
|
for (let i = 0, ii = ends.length; i < ii; ++i) {
|
|
if (intersectsLineString(flatCoordinates, offset, ends[i], stride, extent)) {
|
|
return true;
|
|
}
|
|
offset = ends[i];
|
|
}
|
|
return false;
|
|
}
|
|
function intersectsLinearRing(flatCoordinates, offset, end, stride, extent) {
|
|
if (intersectsLineString(flatCoordinates, offset, end, stride, extent)) {
|
|
return true;
|
|
}
|
|
if (linearRingContainsXY(
|
|
flatCoordinates,
|
|
offset,
|
|
end,
|
|
stride,
|
|
extent[0],
|
|
extent[1]
|
|
)) {
|
|
return true;
|
|
}
|
|
if (linearRingContainsXY(
|
|
flatCoordinates,
|
|
offset,
|
|
end,
|
|
stride,
|
|
extent[0],
|
|
extent[3]
|
|
)) {
|
|
return true;
|
|
}
|
|
if (linearRingContainsXY(
|
|
flatCoordinates,
|
|
offset,
|
|
end,
|
|
stride,
|
|
extent[2],
|
|
extent[1]
|
|
)) {
|
|
return true;
|
|
}
|
|
if (linearRingContainsXY(
|
|
flatCoordinates,
|
|
offset,
|
|
end,
|
|
stride,
|
|
extent[2],
|
|
extent[3]
|
|
)) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
function intersectsLinearRingArray(flatCoordinates, offset, ends, stride, extent) {
|
|
if (!intersectsLinearRing(flatCoordinates, offset, ends[0], stride, extent)) {
|
|
return false;
|
|
}
|
|
if (ends.length === 1) {
|
|
return true;
|
|
}
|
|
for (let i = 1, ii = ends.length; i < ii; ++i) {
|
|
if (linearRingContainsExtent(
|
|
flatCoordinates,
|
|
ends[i - 1],
|
|
ends[i],
|
|
stride,
|
|
extent
|
|
)) {
|
|
if (!intersectsLineString(
|
|
flatCoordinates,
|
|
ends[i - 1],
|
|
ends[i],
|
|
stride,
|
|
extent
|
|
)) {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
function intersectsLinearRingMultiArray(flatCoordinates, offset, endss, stride, extent) {
|
|
for (let i = 0, ii = endss.length; i < ii; ++i) {
|
|
const ends = endss[i];
|
|
if (intersectsLinearRingArray(flatCoordinates, offset, ends, stride, extent)) {
|
|
return true;
|
|
}
|
|
offset = ends[ends.length - 1];
|
|
}
|
|
return false;
|
|
}
|
|
|
|
export {
|
|
linearRingsContainsXY,
|
|
linearRingssContainsXY,
|
|
forEach,
|
|
intersectsLineString,
|
|
intersectsLineStringArray,
|
|
intersectsLinearRing,
|
|
intersectsLinearRingArray,
|
|
intersectsLinearRingMultiArray
|
|
};
|
|
//# sourceMappingURL=chunk-YUSNUQO6.js.map
|