From 2bf8a0c7846f82cca61ec841c6367fde83d749df Mon Sep 17 00:00:00 2001 From: deyihu Date: Sat, 12 Apr 2025 09:22:11 +0800 Subject: [PATCH] markerPlacement support 'vertex-firstlast' --- .../src/renderer/geometry/PointRenderer.ts | 21 +++++++++++++++++-- packages/maptalks/src/symbol/index.ts | 2 +- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/packages/maptalks/src/renderer/geometry/PointRenderer.ts b/packages/maptalks/src/renderer/geometry/PointRenderer.ts index 41615fad27..1aec9c77ac 100644 --- a/packages/maptalks/src/renderer/geometry/PointRenderer.ts +++ b/packages/maptalks/src/renderer/geometry/PointRenderer.ts @@ -6,7 +6,7 @@ import Rectangle from '../../geometry/Rectangle'; import LineString from '../../geometry/LineString'; import Polygon from '../../geometry/Polygon'; import Point from '../../geo/Point'; -import {WithNull} from "../../types/typings"; +import { WithNull } from "../../types/typings"; // 有中心点的图形的共同方法 const CenterPointRenderer = { @@ -19,7 +19,7 @@ const CenterPointRenderer = { export type CenterPointRendererType = typeof CenterPointRenderer; declare module '../../geometry/Marker' { - interface Marker extends CenterPointRendererType {} + interface Marker extends CenterPointRendererType { } } /** @@ -131,6 +131,23 @@ const PolyRenderer = { points = l ? [curretPoint] : []; const previous = l > 1 ? l - 2 : l - 1; rotations = l ? [[coords[previous] ? map._prjToPointAtRes(coords[previous], glRes) : curretPoint, curretPoint]] : []; + } else if (placement === 'vertex-firstlast') { + points = []; + rotations = []; + const coords = this._getPrjCoordinates(); + const l = coords.length; + if (l) { + //first + const point0 = map._prjToPointAtRes(coords[0], glRes) + points = [point0]; + if (l > 1) { + rotations = [[point0, map._prjToPointAtRes(coords[1], glRes)]]; + const point1 = map._prjToPointAtRes(coords[l - 1], glRes); + points.push(point1); + const previous = l > 1 ? l - 2 : l - 1; + rotations.push([map._prjToPointAtRes(coords[previous], glRes), point1]); + } + } } else { const center = this.getCenter(); if (!center) { diff --git a/packages/maptalks/src/symbol/index.ts b/packages/maptalks/src/symbol/index.ts index a21f8fbe5a..5ea05c2447 100644 --- a/packages/maptalks/src/symbol/index.ts +++ b/packages/maptalks/src/symbol/index.ts @@ -61,7 +61,7 @@ export type MarkerCommonSymbol = { markerDy?: SymbolNumberType; markerHorizontalAlignment?: 'left' | 'middle' | 'right'; markerVerticalAlignment?: 'top' | 'middle' | 'bottom'; - markerPlacement?: 'point' | 'vertex' | 'line' | 'vertex-first' | 'vertex-last'; + markerPlacement?: 'center' | 'point' | 'vertex' | 'line' | 'vertex-first' | 'vertex-last' | 'vertex-firstlast'; markerRotation?: number; }