|
@@ -529,6 +529,24 @@ const flattenGeomWktList = (arr) => {
|
|
|
/** 地图回显:展开 MULTIPOLYGON 为多个 POLYGON WKT,并去掉无效项 */
|
|
/** 地图回显:展开 MULTIPOLYGON 为多个 POLYGON WKT,并去掉无效项 */
|
|
|
const flattenGeomWktListForMap = (arr) => flattenGeomWktList(arr).filter(isValidGeom);
|
|
const flattenGeomWktListForMap = (arr) => flattenGeomWktList(arr).filter(isValidGeom);
|
|
|
|
|
|
|
|
|
|
+const formatAreaTextFromGeomArr = (geomWktArr) => {
|
|
|
|
|
+ if (!Array.isArray(geomWktArr) || geomWktArr.length === 0) return "";
|
|
|
|
|
+ let totalArea = 0;
|
|
|
|
|
+ for (const wkt of geomWktArr) {
|
|
|
|
|
+ if (!isValidGeom(wkt)) continue;
|
|
|
|
|
+ try {
|
|
|
|
|
+ const geometry = wktGeomFormat.readGeometry(String(wkt).trim(), WGS84_WKT_OPTS);
|
|
|
|
|
+ geometry.transform(proj.get("EPSG:4326"), proj.get("EPSG:38572"));
|
|
|
|
|
+ let area = getArea(geometry);
|
|
|
|
|
+ area = (area + area / 2) / 1000;
|
|
|
|
|
+ totalArea += Number(area) || 0;
|
|
|
|
|
+ } catch (_) {
|
|
|
|
|
+ /* 单条解析失败则跳过 */
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return totalArea > 0 ? `${totalArea.toFixed(2)}亩` : "";
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
// 从 tab.geomItems[{geomWkt}] 中提取 WKT 数组(兼容单块/多块)
|
|
// 从 tab.geomItems[{geomWkt}] 中提取 WKT 数组(兼容单块/多块)
|
|
|
const getGeomArrFromGeomItems = (tab) => {
|
|
const getGeomArrFromGeomItems = (tab) => {
|
|
|
const items = tab?.geomItems;
|
|
const items = tab?.geomItems;
|
|
@@ -698,17 +716,22 @@ const handleVarietyClick = (tab, index) => {
|
|
|
pendingGeomRenderTimer.value = setTimeout(() => {
|
|
pendingGeomRenderTimer.value = setTimeout(() => {
|
|
|
// 再兜底清一次,避免异步回调在 destroy/init 后仍执行导致重复追加
|
|
// 再兜底清一次,避免异步回调在 destroy/init 后仍执行导致重复追加
|
|
|
drawRegionMap.kmap?.polygonLayer?.source?.clear?.();
|
|
drawRegionMap.kmap?.polygonLayer?.source?.clear?.();
|
|
|
- const viewOnlyVarietyLabel =
|
|
|
|
|
- route.query.type === "viewOnly" && activeRegionType.value === "variety"
|
|
|
|
|
|
|
+ const viewOnlySubCategoryLabel =
|
|
|
|
|
+ route.query.type === "viewOnly" && getCanonicalRegionTypeForStyles() !== "ABNORMAL"
|
|
|
? (tab.regionName || tab.problemZoneTypeName || "").toString().trim()
|
|
? (tab.regionName || tab.problemZoneTypeName || "").toString().trim()
|
|
|
: "";
|
|
: "";
|
|
|
|
|
+ const currentAreaText = formatAreaTextFromGeomArr(geomArr);
|
|
|
|
|
+ const viewOnlySubCategoryLabelWithArea =
|
|
|
|
|
+ viewOnlySubCategoryLabel && currentAreaText
|
|
|
|
|
+ ? `${viewOnlySubCategoryLabel}\n${currentAreaText}`
|
|
|
|
|
+ : viewOnlySubCategoryLabel;
|
|
|
drawRegionMap.setAreaGeometry(
|
|
drawRegionMap.setAreaGeometry(
|
|
|
geomArr,
|
|
geomArr,
|
|
|
false,
|
|
false,
|
|
|
undefined,
|
|
undefined,
|
|
|
undefined,
|
|
undefined,
|
|
|
getAbnormalGrowthOverlayMeta(),
|
|
getAbnormalGrowthOverlayMeta(),
|
|
|
- viewOnlyVarietyLabel || undefined
|
|
|
|
|
|
|
+ viewOnlySubCategoryLabelWithArea || undefined
|
|
|
);
|
|
);
|
|
|
// 有当前小类地块:仅 fit 当前可编辑层,避免被其它只读参考地块拉远
|
|
// 有当前小类地块:仅 fit 当前可编辑层,避免被其它只读参考地块拉远
|
|
|
drawRegionMap.fitView?.();
|
|
drawRegionMap.fitView?.();
|