89 lines
2.2 KiB
TypeScript
89 lines
2.2 KiB
TypeScript
export const convertWKTPointToLatLng = (wktString: string) => {
|
|
if (
|
|
!wktString ||
|
|
typeof wktString !== "string" ||
|
|
!wktString.startsWith("POINT")
|
|
) {
|
|
return null;
|
|
}
|
|
|
|
const matched = wktString.match(/POINT\s*\(([-\d.]+)\s+([-\d.]+)\)/);
|
|
if (!matched) return null;
|
|
|
|
const lng = parseFloat(matched[1]);
|
|
const lat = parseFloat(matched[2]);
|
|
|
|
return [lng, lat]; // [longitude, latitude]
|
|
};
|
|
export const convertWKTLineStringToLatLngArray = (wktString: string) => {
|
|
if (
|
|
!wktString ||
|
|
typeof wktString !== "string" ||
|
|
!wktString.startsWith("LINESTRING")
|
|
) {
|
|
return [];
|
|
}
|
|
|
|
const matched = wktString.match(/LINESTRING\s*\((.*)\)/);
|
|
if (!matched) return [];
|
|
|
|
const coordinates = matched[1].split(",").map((coordStr) => {
|
|
const [x, y] = coordStr.trim().split(" ").map(Number);
|
|
return [y, x]; // [lat, lng]
|
|
});
|
|
|
|
return coordinates;
|
|
};
|
|
|
|
export const convertWKTtoLatLngString = (wktString: string) => {
|
|
if (!wktString || typeof wktString !== "string") return [];
|
|
|
|
const clean = wktString.trim();
|
|
|
|
// MULTIPOLYGON
|
|
if (clean.startsWith("MULTIPOLYGON")) {
|
|
const matched = clean.match(/MULTIPOLYGON\s*\(\(\((.*)\)\)\)/);
|
|
if (!matched) return [];
|
|
|
|
const polygons = matched[1].split(")),((").map((polygonStr) =>
|
|
polygonStr
|
|
.trim()
|
|
.split(",")
|
|
.map((coordStr) => {
|
|
const [lng, lat] = coordStr.trim().split(/\s+/).map(Number);
|
|
return [lat, lng]; // Đảo ngược: [latitude, longitude]
|
|
})
|
|
);
|
|
|
|
return polygons; // Mỗi phần tử là 1 polygon (mảng các [lat, lng])
|
|
}
|
|
|
|
// POLYGON
|
|
if (clean.startsWith("POLYGON")) {
|
|
const matched = clean.match(/POLYGON\s*\(\((.*)\)\)/);
|
|
if (!matched) return [];
|
|
|
|
const polygon = matched[1].split(",").map((coordStr) => {
|
|
const [lng, lat] = coordStr.trim().split(/\s+/).map(Number);
|
|
return [lat, lng];
|
|
});
|
|
|
|
return [polygon];
|
|
}
|
|
|
|
return [];
|
|
};
|
|
|
|
export const getBanzoneNameByType = (type: number) => {
|
|
switch (type) {
|
|
case 1:
|
|
return "Cấm đánh bắt";
|
|
case 2:
|
|
return "Cấm di chuyển";
|
|
case 3:
|
|
return "Vùng an toàn";
|
|
default:
|
|
return "Chưa có";
|
|
}
|
|
};
|