reafactor(important): change to new map backround base goong.io

This commit is contained in:
taDuc
2026-05-18 22:48:21 +07:00
parent 97d505dcc7
commit 663347889b
18 changed files with 9353 additions and 234 deletions
+46 -9
View File
@@ -1,9 +1,50 @@
// Production BackEndGo API base URL.
// For local development, override with NEXT_PUBLIC_API_BASE_URL (e.g. http://localhost:3344).
const FALLBACK_API_BASE_URL = "https://history-api.kain.id.vn";
import { API_URL_ROOT } from "../../../api";
export const API_BASE_URL =
process.env.NEXT_PUBLIC_API_BASE_URL || FALLBACK_API_BASE_URL;
const GOONG_TILES_BASE_URL = "https://tiles.goong.io";
export const API_BASE_URL = normalizeApiBaseUrl(API_URL_ROOT);
const GOONG_PROXY_BASE_PATH = `${API_BASE_URL}/proxy`;
export const GOONG_SATELLITE_STYLE_UPSTREAM_URL = `${GOONG_TILES_BASE_URL}/assets/goong_satellite.json`;
export const GOONG_VECTOR_OVERLAY_STYLE_UPSTREAM_URL = `${GOONG_TILES_BASE_URL}/assets/goong_map_web.json`;
export const GOONG_GLYPHS_UPSTREAM_URL = `${GOONG_TILES_BASE_URL}/fonts/{fontstack}/{range}.pbf`;
export const USE_EXTERNAL_BACKGROUND_RASTER = API_BASE_URL.length > 0;
function normalizeApiBaseUrl(rawUrl: string): string {
return rawUrl.trim().replace(/\/+$/, "");
}
export function stripGoongApiKeyFromUrl(rawUrl: string): string {
const [basePart, hashPart = ""] = rawUrl.split("#", 2);
const [pathPart, queryString = ""] = basePart.split("?", 2);
const sanitizedQuery = queryString
.split("&")
.filter((segment) => segment && !segment.toLowerCase().startsWith("api_key="))
.join("&");
return `${pathPart}${sanitizedQuery ? `?${sanitizedQuery}` : ""}${hashPart ? `#${hashPart}` : ""}`;
}
export function buildGoongProxyUrl(rawUrl: string): string {
const sanitizedUrl = stripGoongApiKeyFromUrl(rawUrl);
const templateTokens: string[] = [];
const tokenizedUrl = sanitizedUrl.replace(/\{[^}]+\}/g, (match) => {
const tokenId = `__UHM_GOONG_URL_TOKEN_${templateTokens.length}__`;
templateTokens.push(match);
return tokenId;
});
let encodedUrl = encodeURIComponent(tokenizedUrl);
templateTokens.forEach((token, index) => {
const encodedTokenId = encodeURIComponent(`__UHM_GOONG_URL_TOKEN_${index}__`);
encodedUrl = encodedUrl.replace(encodedTokenId, token);
});
return `${GOONG_PROXY_BASE_PATH}/${encodedUrl}`;
}
export const GOONG_GLYPHS_PROXY_URL = buildGoongProxyUrl(GOONG_GLYPHS_UPSTREAM_URL);
export const API_ENDPOINTS = {
geometries: `${API_BASE_URL}/geometries`,
@@ -18,8 +59,4 @@ export const API_ENDPOINTS = {
currentUserProjects: `${API_BASE_URL}/users/current/project`,
projects: `${API_BASE_URL}/projects`,
submissions: `${API_BASE_URL}/submissions`,
vectorTiles: `${API_BASE_URL}/tiles/{z}/{x}/{y}`,
rasterTiles: `${API_BASE_URL}/raster-tiles/{z}/{x}/{y}`,
vectorTilesMetadata: `${API_BASE_URL}/tiles/metadata`,
rasterTilesMetadata: `${API_BASE_URL}/raster-tiles/metadata`,
} as const;