feat(map): 优化地图功能和界面

- 新增降雨量、河流、水库、地质灾害点、应急储备库、山洪灾害村、尾矿库等图层- 实现地图点位点击事件和弹窗功能
- 优化地图初始化和数据加载逻辑
- 调整地图界面样式和布局
master
LiuJiaNan 2025-06-12 15:09:40 +08:00
parent 1eae5c06af
commit 901c77bff3
49 changed files with 169905 additions and 618 deletions

31
package-lock.json generated
View File

@ -18,6 +18,7 @@
"dayjs": "^1.11.13",
"echarts": "^5.6.0",
"element-plus": "^2.10.1",
"gcoord": "^1.0.7",
"lodash-es": "^4.17.21",
"mitt": "^3.0.1",
"normalize.css": "^8.0.1",
@ -27,7 +28,8 @@
"v-viewer": "^3.0.21",
"vue": "^3.5.13",
"vue-router": "^4.5.1",
"vue3-puzzle-vcode": "^1.1.7"
"vue3-puzzle-vcode": "^1.1.7",
"vue3-seamless-scroll": "^2.0.1"
},
"devDependencies": {
"@types/node": "^18.19.68",
@ -3694,6 +3696,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/gcoord": {
"version": "1.0.7",
"resolved": "https://repo.huaweicloud.com/repository/npm/gcoord/-/gcoord-1.0.7.tgz",
"integrity": "sha512-UCN2iSm69jBOYz2ma2eg5I5imp65Cj70rcTTfMNSNMvZpR1U6oGjmVh080aCvC/6lN1ClkuOoBeaLuebw9AZJg==",
"license": "MIT",
"engines": {
"node": ">=16.11.0"
}
},
"node_modules/get-intrinsic": {
"version": "1.3.0",
"resolved": "https://repo.huaweicloud.com/repository/npm/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
@ -6722,6 +6733,24 @@
"resolved": "https://repo.huaweicloud.com/repository/npm/vue3-puzzle-vcode/-/vue3-puzzle-vcode-1.1.7.tgz",
"integrity": "sha512-mW780dz7HKjrElnE60CeYSeHGidKBKHoMjTDYfqF21330rTkFOsfDK1FQKZ22MktgMtTEoS/imfpEDlM1cxY/g=="
},
"node_modules/vue3-seamless-scroll": {
"version": "2.0.1",
"resolved": "https://repo.huaweicloud.com/repository/npm/vue3-seamless-scroll/-/vue3-seamless-scroll-2.0.1.tgz",
"integrity": "sha512-mI3BaDU3pjcPUhVSw3/xNKdfPBDABTi/OdZaZqKysx4cSdNfGRbVvGNDzzptBbJ5S7imv5T55l6x/SqgnxKreg==",
"license": "MIT",
"dependencies": {
"throttle-debounce": "5.0.0"
}
},
"node_modules/vue3-seamless-scroll/node_modules/throttle-debounce": {
"version": "5.0.0",
"resolved": "https://repo.huaweicloud.com/repository/npm/throttle-debounce/-/throttle-debounce-5.0.0.tgz",
"integrity": "sha512-2iQTSgkkc1Zyk0MeVrt/3BvuOXYPl/R8Z0U2xxo9rjwNciaHDG3R+Lm6dh4EeUci49DanvBnuqI6jshoQQRGEg==",
"license": "MIT",
"engines": {
"node": ">=12.22"
}
},
"node_modules/webpack-virtual-modules": {
"version": "0.6.2",
"resolved": "https://repo.huaweicloud.com/repository/npm/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz",

View File

@ -19,6 +19,7 @@
"dayjs": "^1.11.13",
"echarts": "^5.6.0",
"element-plus": "^2.10.1",
"gcoord": "^1.0.7",
"lodash-es": "^4.17.21",
"mitt": "^3.0.1",
"normalize.css": "^8.0.1",
@ -28,7 +29,8 @@
"v-viewer": "^3.0.21",
"vue": "^3.5.13",
"vue-router": "^4.5.1",
"vue3-puzzle-vcode": "^1.1.7"
"vue3-puzzle-vcode": "^1.1.7",
"vue3-seamless-scroll": "^2.0.1"
},
"devDependencies": {
"@types/node": "^18.19.68",

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

10
src/request/map.js Normal file
View File

@ -0,0 +1,10 @@
import { post } from "@/request/axios.js";
export const getReservoirStatistics = (params) =>
post("/map/reservoir", params);
export const getMountainFloodVillageStatistics = (params) =>
post("/map/mountainFloodVillage", params);
export const getTailingsPondStatistics = (params) =>
post("/map/tailingsReservoir", params);
export const getEmergencyReserveWarehouseStatistics = (params) =>
post("/map/emergencyStorage", params);

View File

@ -17,7 +17,8 @@ const routes = [
component: children,
children: [
{
path: "/map/:type?",
path: "/map/:name?/:type?",
name: "map",
meta: {
title: "地图",
breadcrumb: false,

View File

@ -2,10 +2,15 @@
<div class="bottom_utils">
<div class="items">
<div
v-for="(item, index) in list"
v-for="(item, index) in bottomUtilsList"
:key="index"
:class="['item', { active: current === item.name }]"
@click="router.push({ name: '/index', params: { type: item.name } })"
:class="['item', { active: currentActiveName === item.name }]"
@click="
router.push({
name: 'map',
params: { name: item.name, type: item.type },
})
"
>
{{ item.name }}
</div>
@ -14,32 +19,148 @@
</template>
<script setup>
import { ref } from "vue";
import { ref, onMounted, onBeforeUnmount, inject, nextTick } from "vue";
import { useRouter, onBeforeRouteUpdate, useRoute } from "vue-router";
import {
getEmergencyStoragePage,
getGeologicalDisasterPage,
getMountainFloodVillagePage,
getReservoirBasicPage,
setTailingsReservoirListPage,
} from "@/request/kangzai.js";
import dayjs from "dayjs";
import { useUserStore } from "@/pinia/user.js";
import { mapMethodsInjectionKey } from "../js/injectionKey.js";
import island from "../json/bridge/island.json";
import mitt from "@/assets/js/mitt.js";
import { changeCoverMaskVisibleMittKey } from "@/views/map/js/mittKey.js";
import { BD09ToWGS84 } from "@/views/map/js/utils.js";
const userStore = useUserStore();
const router = useRouter();
const route = useRoute();
const current = ref(route.params.type || "降雨量");
const list = [
{ name: "降雨量" },
{ name: "河流" },
{ name: "水库" },
{ name: "地质灾害点" },
{ name: "城市防涝" },
{ name: "山洪灾害村" },
{ name: "尾矿库" },
const currentActiveName = ref(route.params.name || "降雨量");
const currentActiveType = ref(route.params.type || "rainfall");
const mapMethods = inject(mapMethodsInjectionKey);
const bottomUtilsList = [
{ name: "降雨量", type: "rainfall" },
{ name: "河流", type: "river" },
{ name: "水库", type: "reservoir", dialogWidth: 300, dialogLeft: 200 },
{
name: "地质灾害点",
type: "geological_disaster",
dialogWidth: 400,
dialogLeft: 250,
},
{
name: "应急储备库",
type: "emergency_reserve_warehouse",
dialogWidth: 350,
dialogLeft: 200,
},
{
name: "山洪灾害村",
type: "torrential_flood_village",
dialogWidth: 400,
dialogLeft: 250,
},
{ name: "尾矿库", type: "tailings_pond", dialogWidth: 500, dialogLeft: 300 },
];
onBeforeRouteUpdate((to) => {
current.value = to.params.type;
fnMapRemoveElement();
currentActiveName.value = to.params.name;
currentActiveType.value = to.params.type;
fnMapAddElement();
});
onMounted(() => {
userStore.setToken("ba4cff95a300b9da9f1f8fa001c79082");
userStore.setTokenTime(dayjs().format("YYYY-MM-DD HH:mm:ss"));
nextTick(() => {
fnMapAddElement();
});
});
onBeforeUnmount(() => {
userStore.setToken("");
userStore.setTokenTime("");
});
const fnMapRemoveElement = () => {
if (currentActiveName.value !== "河流")
mapMethods.value.removePoint(currentActiveType.value);
else {
mapMethods.value.removeRiver();
mapMethods.value.removeBridge();
mapMethods.value.removeHalo();
}
};
const fnMapAddElement = () => {
if (currentActiveName.value === "河流") fnAddRiver();
if (currentActiveName.value === "尾矿库")
fnAddPoint(setTailingsReservoirListPage, "name");
if (currentActiveName.value === "水库")
fnAddPoint(getReservoirBasicPage, "reservoirName");
if (currentActiveName.value === "地质灾害点")
fnAddPoint(getGeologicalDisasterPage, "disasterName");
if (currentActiveName.value === "应急储备库")
fnAddPoint(getEmergencyStoragePage, "storageName");
if (currentActiveName.value === "山洪灾害村")
fnAddPoint(getMountainFloodVillagePage, "villageName");
};
const fnAddPoint = async (api, nameKey) => {
mitt.emit(changeCoverMaskVisibleMittKey, true);
const {
page: { list },
} = await api({ curPage: 1, limit: 1000 });
list.forEach((item) => {
item.name = item[nameKey];
item.dialogWidth = bottomUtilsList.find(
(item) => item.name === currentActiveName.value
).dialogWidth;
item.dialogLeft = bottomUtilsList.find(
(item) => item.name === currentActiveName.value
).dialogLeft;
const [longitude, latitude] = BD09ToWGS84(item.longitude, item.latitude);
item.longitude = longitude;
item.latitude = latitude;
});
await mapMethods.value.addPoint(currentActiveType.value, list);
mitt.emit(changeCoverMaskVisibleMittKey, false);
};
const fnAddRiver = async () => {
mitt.emit(changeCoverMaskVisibleMittKey, true);
const riverModules = import.meta.glob("../json/river/*.json");
const bridgeModules = import.meta.glob([
"../json/bridge/*.json",
"!../json/bridge/island.json",
]);
for (const path in riverModules) {
const { river } = await riverModules[path]();
for (let i = 0; i < river.length; i++) {
await mapMethods.value.addRiver(river[i].position);
}
}
for (const path in bridgeModules) {
const { bridge } = await bridgeModules[path]();
for (let i = 0; i < bridge.length; i++) {
await mapMethods.value.addBridge(bridge[i].position);
}
}
for (let i = 0; i < island.island.length; i++) {
await mapMethods.value.addBridge(island.island[i].position);
}
mitt.emit(changeCoverMaskVisibleMittKey, false);
};
</script>
<style scoped lang="scss">
.bottom_utils {
position: absolute;
bottom: 20px;
bottom: 0;
left: 500px;
right: 500px;
background-image: url("/src/assets/images/map/buttombg.png");
background-size: 100% 100%;
background-repeat: no-repeat;
padding: 10px 20px 5px 20px;
.items {
display: flex;
@ -53,6 +174,8 @@ onBeforeRouteUpdate((to) => {
text-align: center;
cursor: pointer;
background-image: url("/src/assets/images/map/listbg1.png");
background-size: 100% 100%;
background-repeat: no-repeat;
color: #fff;
font-weight: bold;
font-size: 16px;

View File

@ -84,30 +84,21 @@
</div>
</div>
<div class="tbody">
<div class="tr">
<div class="td">滦河</div>
<div class="td">500KM</div>
<div class="td">82.5KM</div>
<div class="td">181km²</div>
</div>
<div class="tr">
<div class="td">青龙河</div>
<div class="td">500KM</div>
<div class="td">82.5KM</div>
<div class="td">181km²</div>
</div>
<div class="tr">
<div class="td">汤河</div>
<div class="td">500KM</div>
<div class="td">82.5KM</div>
<div class="td">181km²</div>
</div>
<div class="tr">
<div class="td">洋河</div>
<div class="td">500KM</div>
<div class="td">82.5KM</div>
<div class="td">181km²</div>
</div>
<vue3-seamless-scroll
:list="riverList"
:limit-scroll-num="4"
hover
:step="0.6"
>
<div v-for="item in riverList" :key="item.riverId">
<div class="tr">
<div class="td">{{ item.riverName }}</div>
<div class="td">{{ item.totalLength }}KM</div>
<div class="td">{{ item.inCityRiverLength }}KM</div>
<div class="td">{{ item.inCityBasinArea }}km²</div>
</div>
</div>
</vue3-seamless-scroll>
</div>
</div>
</div>
@ -116,14 +107,25 @@
</template>
<script setup>
import { ref, onBeforeUnmount, onMounted } from "vue";
import AppTitle from "./title.vue";
import { onBeforeUnmount, onMounted } from "vue";
import * as echarts from "echarts";
import { Vue3SeamlessScroll } from "vue3-seamless-scroll";
import { getRiverPage } from "@/request/kangzai.js";
import { getReservoirStatistics } from "@/request/map.js";
const riverList = ref([]);
let myChart1 = null;
const fnGetRiverList = async () => {
const {
page: { list },
} = await getRiverPage({ curPage: 1, limit: 1000 });
riverList.value = list;
};
fnGetRiverList();
onMounted(() => {
window.addEventListener("resize", echartsResize);
fnInitEcharts1();
fnGetReservoirStatistics();
});
onBeforeUnmount(() => {
window.removeEventListener("resize", echartsResize);
@ -135,98 +137,32 @@ onBeforeUnmount(() => {
const echartsResize = () => {
myChart1 && myChart1.resize();
};
const fnInitEcharts1 = () => {
const fnGetReservoirStatistics = async () => {
const { data } = await getReservoirStatistics();
fnInitEcharts1(data);
};
const fnInitEcharts1 = (data) => {
myChart1 = echarts.init(document.getElementById("main1"));
const data = [
{
name: "大型水库",
data: [10, 20, 30, 40, 10, 20, 30],
rgb: "42, 130, 228",
},
{
name: "中型水库",
data: [5, 10, 20, 30, 15, 10, 20],
rgb: "255, 130, 46",
},
{
name: "小型水库",
data: [13, 30, 40, 20, 10, 20, 20],
rgb: "32, 230, 164",
},
];
const series = [];
const xAxisData = [];
const seriesData = [];
for (let i = 0; i < data.length; i++) {
series.push({
name: data[i].name,
type: "line",
data: data[i].data,
color: `rgb(${data[i].rgb})`,
smooth: true,
lineStyle: { width: 2 },
showSymbol: false,
areaStyle: {
color: new echarts.graphic.LinearGradient(
0,
0,
0,
1,
[
{
offset: 0,
color: `rgba(${data[i].rgb}, 0.6)`,
},
{
offset: 1,
color: `rgba(${data[i].rgb}, 0)`,
},
],
false
),
shadowColor: "rgba(0, 0, 0, 0.1)",
shadowBlur: 10,
},
symbol: "circle",
symbolSize: 6,
});
xAxisData.push(data[i].reservoirLevel);
seriesData.push(data[i].count);
}
const option = {
tooltip: { trigger: "axis" },
legend: {
textStyle: { color: "#fff", fontSize: "14px" },
top: 8,
right: 10,
itemGap: 34,
},
tooltip: { trigger: "item" },
grid: {
left: "4%",
right: "10%",
bottom: "5%",
top: "16%",
top: "5%",
containLabel: true,
},
xAxis: {
data: [
"海港区",
"山海关区",
"北戴河区",
"抚宁区",
"昌黎县",
"卢龙县",
"青龙满族自治县",
],
data: xAxisData,
type: "category",
boundaryGap: false,
axisLine: {
symbol: "none",
lineStyle: { color: "#E0E0E0" },
},
axisTick: { show: false },
axisLabel: {
interval: 0,
color: "#fff",
fontSize: 12,
padding: [10, 0, 0, 0],
},
axisLabel: { color: "#fff" },
},
yAxis: {
type: "value",
@ -235,7 +171,15 @@ const fnInitEcharts1 = () => {
lineStyle: { color: "#F0F0F0", type: "dashed" },
},
},
series,
series: [
{
type: "bar",
name: "",
barWidth: 27,
itemStyle: { color: "rgba(42, 130, 228)" },
data: seriesData,
},
],
};
myChart1.setOption(option);
};
@ -305,6 +249,7 @@ const fnInitEcharts1 = () => {
background-color: rgba(19, 62, 126, 0.45);
display: grid;
grid-template-columns: repeat(4, 1fr);
text-align: center;
}
}
@ -316,6 +261,7 @@ const fnInitEcharts1 = () => {
background-color: rgba(19, 62, 126, 0.35);
display: grid;
grid-template-columns: repeat(4, 1fr);
text-align: center;
}
}
}
@ -373,10 +319,14 @@ const fnInitEcharts1 = () => {
background-repeat: no-repeat;
display: grid;
grid-template-columns: repeat(4, 1fr);
text-align: center;
}
}
.tbody {
height: 150px;
overflow: hidden;
.tr {
height: 32px;
line-height: 32px;
@ -385,6 +335,7 @@ const fnInitEcharts1 = () => {
background-repeat: no-repeat;
display: grid;
grid-template-columns: repeat(4, 1fr);
text-align: center;
}
}
}

View File

@ -7,57 +7,31 @@
</div>
</div>
<div class="block2">
<app-title title="山洪灾害行政村" />
<app-title title="尾矿库" />
<div class="content">
<div id="main3" />
</div>
</div>
<div class="block3">
<app-title title="应急备库" />
<app-title title="应急备库" />
<div class="content">
<div class="table">
<div class="thead">
<div class="tr">
<div class="th">序号</div>
<div class="th">属地</div>
<div class="th">级别</div>
<div class="th">数量</div>
</div>
</div>
<div class="tbody">
<div class="tr">
<div class="td">1</div>
<div class="td">海港区</div>
<div class="td">省级储备库</div>
</div>
<div class="tr">
<div class="td">2</div>
<div class="td">山海关区</div>
<div class="td">省级储备库</div>
</div>
<div class="tr">
<div class="td">3</div>
<div class="td">北戴河区</div>
<div class="td">省级储备库</div>
</div>
<div class="tr">
<div class="td">4</div>
<div class="td">抚宁区</div>
<div class="td">省级储备库</div>
</div>
<div class="tr">
<div class="td">5</div>
<div class="td">昌黎县</div>
<div class="td">省级储备库</div>
</div>
<div class="tr">
<div class="td">6</div>
<div class="td">卢龙县</div>
<div class="td">省级储备库</div>
</div>
<div class="tr">
<div class="td">7</div>
<div class="td">青龙满族自治县</div>
<div class="td">省级储备库</div>
<div
v-for="(item, index) in emergencyReserveWarehouseList"
:key="index"
class="tr"
>
<div class="td">{{ index + 1 }}</div>
<div class="td">{{ item.county }}</div>
<div class="td">{{ item.count }}</div>
</div>
</div>
</div>
@ -68,15 +42,19 @@
<script setup>
import AppTitle from "./title.vue";
import { onBeforeUnmount, onMounted } from "vue";
import { onBeforeUnmount, onMounted, ref } from "vue";
import * as echarts from "echarts";
import {
getEmergencyReserveWarehouseStatistics,
getMountainFloodVillageStatistics,
getTailingsPondStatistics,
} from "@/request/map.js";
const emergencyReserveWarehouseList = ref([]);
let myChart2 = null;
let myChart3 = null;
onMounted(() => {
window.addEventListener("resize", echartsResize);
fnInitEcharts1();
fnInitEcharts2();
});
onBeforeUnmount(() => {
window.removeEventListener("resize", echartsResize);
@ -93,25 +71,32 @@ const echartsResize = () => {
myChart2 && myChart2.resize();
myChart3 && myChart3.resize();
};
const fnInitEcharts1 = () => {
const fnGetMountainFloodVillageStatistics = async () => {
const { data } = await getMountainFloodVillageStatistics();
fnInitEcharts1(data);
};
fnGetMountainFloodVillageStatistics();
const fnGetTailingsPondStatisticsStatistics = async () => {
const { data } = await getTailingsPondStatistics();
fnInitEcharts2(data);
};
fnGetTailingsPondStatisticsStatistics();
const fnGetEmergencyReserveWarehouseStatistics = async () => {
const { data } = await getEmergencyReserveWarehouseStatistics();
emergencyReserveWarehouseList.value = data;
};
fnGetEmergencyReserveWarehouseStatistics();
const fnInitEcharts1 = (data) => {
myChart2 = echarts.init(document.getElementById("main2"));
const option = {
color: [
"#0e6de9",
"#0e6de9",
"#fd5f00",
"#e6af08",
"#ac4ed3",
"#3ea1ff",
"#00e7ff",
],
color: ["#0e6de9", "#fd5f00", "#e6af08", "#ac4ed3", "#3ea1ff", "#00e7ff"],
legend: {
orient: "vertical",
top: "center",
right: 15,
textStyle: { color: "#fff", fontSize: 14 },
},
tooltip: { trigger: "item", formatter: "{b} : {c} ({d}%)" },
tooltip: { trigger: "item" },
series: [
{
name: "",
@ -121,21 +106,24 @@ const fnInitEcharts1 = () => {
roseType: "radius",
label: { show: false },
labelLine: { show: false },
data: [
{ value: 1, name: "海港区" },
{ value: 2, name: "山海关区" },
{ value: 3, name: "北戴河区" },
{ value: 4, name: "抚宁区" },
{ value: 5, name: "昌黎县" },
{ value: 6, name: "卢龙县" },
{ value: 7, name: "青龙满族自治县" },
],
data: data.map((item) => ({
value: item.count,
name: item.county,
})),
},
],
};
myChart2.setOption(option);
};
const fnInitEcharts2 = () => {
const fnInitEcharts2 = (data) => {
const xAxisData = [];
const seriesData1 = [];
const seriesData2 = [];
for (let i = 0; i < data.length; i++) {
xAxisData.push(data[i].designGrade);
seriesData1.push(data[i].count["停用"] || 0);
seriesData2.push(data[i].count["运行"] || 0);
}
myChart3 = echarts.init(document.getElementById("main3"));
const option = {
legend: {
@ -146,7 +134,7 @@ const fnInitEcharts2 = () => {
grid: { left: 0, top: 50, bottom: 0, right: 20, containLabel: true },
xAxis: {
type: "category",
data: ["一等库", "二等库", "三等库", "四等库", "五等库"],
data: xAxisData,
axisLine: { lineStyle: { color: "#ccc" } },
axisTick: { length: 3 },
axisLabel: { color: "#fff" },
@ -171,7 +159,7 @@ const fnInitEcharts2 = () => {
stack: "total",
barWidth: 24,
color: "#FFC53D",
data: [5, 2, 3, 1, 1],
data: seriesData1,
},
{
name: "正常",
@ -179,7 +167,7 @@ const fnInitEcharts2 = () => {
stack: "total",
barWidth: 24,
color: "#52A8FF",
data: [16, 2, 3, 3, 8, 2, 1],
data: seriesData2,
},
],
};
@ -196,9 +184,10 @@ const fnInitEcharts2 = () => {
.block1 {
background-color: rgba(2, 25, 88, 0.25);
border: 1px solid rgba(118, 153, 191, 0.2);
#main2 {
width: 450px;
height: 245px;
height: 228px;
}
}
@ -206,9 +195,10 @@ const fnInitEcharts2 = () => {
background-color: rgba(2, 25, 88, 0.25);
border: 1px solid rgba(118, 153, 191, 0.2);
margin-top: 15px;
#main3 {
width: 450px;
height: 245px;
height: 228px;
}
}
@ -216,6 +206,7 @@ const fnInitEcharts2 = () => {
background-color: rgba(2, 25, 88, 0.25);
border: 1px solid rgba(118, 153, 191, 0.2);
margin-top: 15px;
.table {
width: 100%;
background-image: url("/src/assets/images/map/bg1.png");
@ -234,7 +225,8 @@ const fnInitEcharts2 = () => {
background-size: 100% 100%;
background-repeat: no-repeat;
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-columns: 100px 1fr 100px;
text-align: center;
}
}
@ -247,7 +239,8 @@ const fnInitEcharts2 = () => {
background-size: 100% 100%;
background-repeat: no-repeat;
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-columns: 100px 1fr 100px;
text-align: center;
}
}
}

View File

@ -7,32 +7,42 @@
<content />
</div>
</div>
<div
v-show="coverMaskVisible"
class="coverMaskContainer"
@click="ElMessage.warning('正在标注,请等待标注完成在进行操作')"
/>
</template>
<script setup>
import autoFit from "autofit.js";
import { onMounted } from "vue";
import { onMounted, ref, provide, onBeforeUnmount } from "vue";
import InitMap from "./js/initMap.js";
import river from "./json/river.json";
import TopHeader from "./components/header.vue";
import BottomUtils from "./components/bottom_utils.vue";
import Content from "./components/content.vue";
import { mapMethodsInjectionKey } from "@/views/map/js/injectionKey.js";
import { ElMessage } from "element-plus";
import mitt from "@/assets/js/mitt.js";
import { changeCoverMaskVisibleMittKey } from "@/views/map/js/mittKey.js";
const villagePoint = [
{
name: "长不老口村",
longitude: 119.03337180938561,
latitude: 40.19664822790694,
},
];
const mapMethods = ref(null); // cesium
const coverMaskVisible = ref(false); //
onMounted(async () => {
autoFit.init({ dw: 1920, dh: 1080, el: "#contentContainer", resize: true });
const initMap = new InitMap();
const { mapMethods } = initMap.initMap();
mapMethods.mapFlyTo();
await mapMethods.addRiver(river.river[0].position);
await mapMethods.addPoint("village", villagePoint);
const { mapMethods: mapMethodsInstance } = initMap.initMap();
mapMethods.value = mapMethodsInstance;
mapMethodsInstance.mapFlyTo();
mitt.on(changeCoverMaskVisibleMittKey, (data) => {
coverMaskVisible.value = data;
if (!data) ElMessage.success("标注完成");
});
});
onBeforeUnmount(() => {
mitt.off(changeCoverMaskVisibleMittKey);
});
provide(mapMethodsInjectionKey, mapMethods);
</script>
<style scoped lang="scss">
@ -56,4 +66,12 @@ onMounted(async () => {
pointer-events: auto;
}
}
.coverMaskContainer {
width: 1920px;
height: 1080px;
position: absolute;
inset: 0;
z-index: 1;
}
</style>

View File

@ -1,8 +1,10 @@
import MapMethods from "./mapMethods.js";
import PointClickEvent from "./pointClickEvent.js";
const Cesium = window.Cesium;
export default class InitMap {
#pointClickEvent;
#viewer;
#mapMethods;
initMap = () => {
@ -48,7 +50,29 @@ export default class InitMap {
})
);
this.#viewer._cesiumWidget._creditContainer.style.display = "none";
this.#registerClickEvent();
this.#mapMethods = new MapMethods(this.#viewer);
this.#pointClickEvent = new PointClickEvent(this.#viewer, this.#mapMethods);
return { mapMethods: this.#mapMethods, viewer: this.#viewer };
};
#registerClickEvent = () => {
this.#viewer.cesiumWidget.screenSpaceEventHandler.removeInputAction(
Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK
);
this.#viewer.cesiumWidget.screenSpaceEventHandler.removeInputAction(
Cesium.ScreenSpaceEventType.LEFT_CLICK
);
const screenSpaceEventHandler = new Cesium.ScreenSpaceEventHandler(
this.#viewer.scene.canvas
);
screenSpaceEventHandler.setInputAction((movement) => {
const pick = this.#viewer.scene.pick(movement.position);
if (Cesium.defined(pick) && pick.id?.id) {
this.#pointClickEvent.pointClickEvent(pick.id);
} else {
this.#pointClickEvent.closePopup();
}
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
};
}

View File

@ -0,0 +1 @@
export const mapMethodsInjectionKey = Symbol("mapMethods");

View File

@ -6,23 +6,42 @@ import {
getPosition,
removeEntityCollection,
} from "./mapUtils.js";
import { chunkedLoad } from "./utils.js";
import { chunkedLoad, filterNull } from "./utils.js";
const Cesium = window.Cesium;
export default class MapMethods {
#viewer;
#riverPrimitive = [];
#bridgePrimitive = [];
#haloPrimitive = [];
#defineCenterPoint = {
longitude: 119.03337180938561,
latitude: 40.19664822790694,
longitude: 119.44598691730745,
latitude: 39.80006407560716,
height: 35000,
}; // 默认中心点
#billboardImageEnum = {
village: new URL(
"/src/assets/images/map/point/dianwei.png",
rainfall: new URL("/src/assets/images/map/point/06.png", import.meta.url)
.href, // 降雨量
reservoir: new URL("/src/assets/images/map/point/03.png", import.meta.url)
.href, // 水库
geological_disaster: new URL(
"/src/assets/images/map/point/05.png",
import.meta.url
).href,
).href, // 地质灾害
emergency_reserve_warehouse: new URL(
"/src/assets/images/map/point/02.png",
import.meta.url
).href, // 应急储备库
torrential_flood_village: new URL(
"/src/assets/images/map/point/01.png",
import.meta.url
).href, // 山洪村
tailings_pond: new URL(
"/src/assets/images/map/point/04.png",
import.meta.url
).href, // 尾矿库
};
constructor(viewer) {
@ -36,14 +55,14 @@ export default class MapMethods {
});
};
addRiver = (riverPositions) => {
addRiver = (positions) => {
return new Promise((resolve) => {
this.#viewer.scene.primitives.add(
const riverPrimitive = this.#viewer.scene.primitives.add(
new Cesium.Primitive({
geometryInstances: new Cesium.GeometryInstance({
geometry: new Cesium.PolygonGeometry({
polygonHierarchy: new Cesium.PolygonHierarchy(
Cesium.Cartesian3.fromDegreesArray(riverPositions)
Cesium.Cartesian3.fromDegreesArray(positions)
),
height: 0,
vertexFormat: Cesium.EllipsoidSurfaceAppearance.VERTEX_FORMAT,
@ -55,9 +74,9 @@ export default class MapMethods {
type: "Water",
uniforms: {
baseWaterColor: new Cesium.Color(
64 / 255.0,
157 / 255.0,
253 / 255.0,
30 / 255.0,
100 / 255.0,
200 / 255.0,
0.5
),
normalMap: "/src/assets/images/map/waterNormals.png",
@ -71,20 +90,115 @@ export default class MapMethods {
}),
})
);
this.#riverPrimitive.push(riverPrimitive);
let isRendered = false;
this.#viewer.scene.postRender.addEventListener(() => {
this.#viewer.scene.postRender.addEventListener(async () => {
if (!isRendered) {
isRendered = true;
resolve();
await this.#addHalo(positions);
resolve(riverPrimitive);
}
});
});
};
addBridge = (positions) => {
return new Promise((resolve) => {
const bridgePrimitive = this.#viewer.scene.primitives.add(
new Cesium.Primitive({
geometryInstances: new Cesium.GeometryInstance({
geometry: new Cesium.PolygonGeometry({
polygonHierarchy: new Cesium.PolygonHierarchy(
Cesium.Cartesian3.fromDegreesArray(positions)
),
height: 1,
vertexFormat: Cesium.EllipsoidSurfaceAppearance.VERTEX_FORMAT,
}),
}),
appearance: new Cesium.EllipsoidSurfaceAppearance({
material: new Cesium.Material({
fabric: {
type: "Color",
uniforms: {
color: new Cesium.Color(0.2902, 0.2902, 0.2902, 1),
},
},
}),
}),
})
);
this.#bridgePrimitive.push(bridgePrimitive);
let isRendered = false;
this.#viewer.scene.postRender.addEventListener(() => {
if (!isRendered) {
isRendered = true;
resolve(bridgePrimitive);
}
});
});
};
#addHalo = async (positions) => {
return new Promise((resolve) => {
const haloPrimitive = this.#viewer.scene.primitives.add(
new Cesium.Primitive({
geometryInstances: new Cesium.GeometryInstance({
geometry: new Cesium.PolylineGeometry({
positions: Cesium.Cartesian3.fromDegreesArray(positions),
width: 10,
}),
}),
appearance: new Cesium.PolylineMaterialAppearance({
material: new Cesium.Material({
fabric: {
type: "PolylineGlow",
uniforms: {
color: new Cesium.Color(0, 1, 1, 0.5),
},
},
}),
}),
})
);
this.#haloPrimitive.push(haloPrimitive);
let isRendered = false;
this.#viewer.scene.postRender.addEventListener(async () => {
if (!isRendered) {
isRendered = true;
resolve(haloPrimitive);
}
});
});
};
removeRiver = () => {
for (let i = 0; i < this.#riverPrimitive.length; i++) {
const riverPrimitive = this.#riverPrimitive[i];
this.#viewer.scene.primitives.remove(riverPrimitive);
}
this.#riverPrimitive = [];
};
removeBridge = () => {
for (let i = 0; i < this.#bridgePrimitive.length; i++) {
const bridgePrimitive = this.#bridgePrimitive[i];
this.#viewer.scene.primitives.remove(bridgePrimitive);
}
this.#bridgePrimitive = [];
};
removeHalo = () => {
for (let i = 0; i < this.#haloPrimitive.length; i++) {
const haloPrimitive = this.#haloPrimitive[i];
this.#viewer.scene.primitives.remove(haloPrimitive);
}
this.#haloPrimitive = [];
};
addPoint = async (type, point) => {
const billboardImage = this.#billboardImageEnum[type];
if (!billboardImage) throw new Error(`${type}点位枚举不存在`);
await chunkedLoad(point, 10, async (item) => {
await chunkedLoad(filterNull(point), 10, async (item) => {
const entityCollection = createEntityCollection(
`${type}EntityCollection`
);
@ -97,7 +211,7 @@ export default class MapMethods {
image: billboardImage,
name: item.name,
}),
monitorItems: { data: { ...item } },
monitorItems: { data: { ...item, pointType: type } },
})
);
this.#viewer.dataSources.add(entityCollection);

View File

@ -0,0 +1 @@
export const changeCoverMaskVisibleMittKey = Symbol("changeCoverMaskVisible");

View File

@ -0,0 +1,39 @@
import { PopupVue } from "../popup/js/PopupVue";
import Popup from "../popup/components/popup.vue";
import { getPosition } from "@/views/map/js/mapUtils.js";
export default class PointClickEvent {
#viewer;
#popup;
#mapMethods;
constructor(viewer, mapMethods) {
this.#viewer = viewer;
this.#mapMethods = mapMethods;
}
closePopup = () => {
if (this.#popup) {
this.#popup.remove();
this.#popup = null;
}
};
pointClickEvent = (pick) => {
const data = pick.monitorItems.data;
this.closePopup();
this.#clickPortPoint(data);
};
#clickPortPoint = (data) => {
const position = getPosition(data.longitude, data.latitude);
this.#popup = new PopupVue(this.#viewer, {
component: Popup,
position,
props: {
info: data,
close: this.closePopup,
enter: () => {},
},
});
};
}

View File

@ -1,11 +1,17 @@
import gcoord from "gcoord";
export const filterNull = (
arr = [],
longitudeKey = "LONGITUDE",
latitudeKey = "LATITUDE"
longitudeKey = "longitude",
latitudeKey = "latitude"
) => {
return arr.filter((item) => item[longitudeKey] && item[latitudeKey]);
};
export const BD09ToWGS84 = (longitude, latitude) => {
if (!longitude || !latitude) return [];
return gcoord.transform([longitude, latitude], gcoord.BD09, gcoord.WGS84);
};
const createImgCanvas = (imageUrl) => {
return new Promise((resolve, reject) => {
// 创建Image对象

View File

@ -0,0 +1,410 @@
{
"bridge": [
{
"position": [
119.43116436479748,
39.80329578586993,
119.43086279470751,
39.803394188841985,
119.43154130606064,
39.80460192389279,
119.43185447846038,
39.80449904591946,
119.43117016369129,
39.80332262438482,
119.43115699684415,
39.803298066486114
]
},
{
"position": [
119.42815301072092,
39.80517496209555,
119.42841663121659,
39.805146368684966,
119.4284948835708,
39.803897820827714,
119.42824362433693,
39.803846990394845,
119.42816124882974,
39.80517178511615
]
},
{
"position": [
119.40366651840664,
39.821257211706474,
119.40366916354131,
39.82124309542962,
119.40317400583898,
39.820778831130525,
119.40359602035832,
39.82067036276889,
119.40398426977082,
39.82101313629277,
119.40366916340773,
39.82125177315548
]
},
{
"position": [
119.40864805533646,
39.83519754815875,
119.40909929813382,
39.834953002629476,
119.40946564943197,
39.83507700087215,
119.40895632672311,
39.835352546530224,
119.40864971502613,
39.83519883028273
]
},
{
"position": [
119.42033216214381,
39.842332106372865,
119.42127154721622,
39.8423733062612,
119.42127153259727,
39.841837565243885,
119.42037797857888,
39.84183168928458,
119.42033216228273,
39.84234388085489
]
},
{
"position": [
119.41867105690052,
39.84930711799377,
119.41934921625807,
39.84934146920573,
119.41936085134627,
39.848861627095154,
119.4187964978582,
39.84882126592658,
119.41866267773743,
39.84931456107787
]
},
{
"position": [
119.41866865216953,
39.85034419829825,
119.41926875083436,
39.85036216677407,
119.41930953605485,
39.850173559426395,
119.41876770101577,
39.8501555917492,
119.41867447854091,
39.85033521706093,
119.41867140713681,
39.85034815149185
]
},
{
"position": [
119.41870428943783,
39.85318249151014,
119.41933276825021,
39.85350541997451,
119.41937765881548,
39.85327475709025,
119.41887387924679,
39.85302487233214,
119.41869930151933,
39.85318633588483
]
},
{
"position": [
119.41874618148314,
39.853886283756346,
119.41915635460475,
39.854104415768816,
119.41918916827325,
39.85391473615996,
119.41891845440655,
39.853766153732735,
119.41875164247044,
39.85389576796033
]
},
{
"position": [
119.41753565724478,
39.85905643367965,
119.4175513323216,
39.8590501965312,
119.41761219111213,
39.85909536185852,
119.41763698541156,
39.85913184148413,
119.41767079598449,
39.85913357866786,
119.41771587675395,
39.859130104505574,
119.41770010042511,
39.859201997137156,
119.4176910833,
39.85924195458503,
119.41776547365451,
39.85918462441509,
119.41782182987207,
39.8591464042832,
119.41799766141598,
39.85914119239553,
119.41802245817189,
39.859137717774885,
119.4177474388051,
39.859537293451105,
119.41770235359806,
39.85951123411399,
119.4176707940205,
39.85947648832668,
119.41761894614021,
39.85943479337152,
119.41758242718402,
39.859394142938946,
119.41755086718106,
39.859387193637886,
119.4175238156624,
39.85939414279886,
119.41750352705255,
39.859394142744,
119.41748549286552,
39.85937155769233,
119.41747196728161,
39.859347235324876,
119.41742913578331,
39.85934723518461,
119.41734347275542,
39.859350709463484,
119.41729613279237,
39.85933681080012,
119.41726006429566,
39.85931943753247,
119.41753868887206,
39.85905536798122
]
},
{
"position": [
119.38121140802252,
39.876927673882804,
119.38117208282391,
39.87703154713869,
119.38261015237553,
39.8775249631564,
119.38266632788273,
39.877447058128745,
119.38121140445077,
39.87693633725772
]
},
{
"position": [
119.3793780450672,
39.88143634260792,
119.38067377688442,
39.88192555236399,
119.38033053762803,
39.88239493112969,
119.37912918948979,
39.88195860546132,
119.37939520682204,
39.88146278645046
]
},
{
"position": [
119.37739057148396,
39.8846323620926,
119.37751897494317,
39.88455592855601,
119.37838858667523,
39.884938120415875,
119.37841193017505,
39.88503254141267,
119.377390571134,
39.88464135454449
]
},
{
"position": [
119.38288902608295,
39.88462388983328,
119.38318374543351,
39.884061571629374,
119.38328272182612,
39.884098284940535,
119.3830151151808,
39.88464898124514,
119.38289047721157,
39.88462356396076
]
},
{
"position": [
119.37247504350469,
39.88810694773697,
119.37254470934465,
39.887505357083015,
119.37288201361594,
39.88746864139827,
119.37282701648323,
39.88805328595047,
119.3724713771327,
39.888104123336795
]
},
{
"position": [
119.3690553618853,
39.88908380147242,
119.36886541715037,
39.88893363056164,
119.36922031270157,
39.88883736644634,
119.36949523355601,
39.88903759333827,
119.36904036622545,
39.88908380147697
]
},
{
"position": [
119.35749344172382,
39.89738584642135,
119.35785401449294,
39.89754085787489,
119.35805526492908,
39.89737938884182,
119.35778693198843,
39.8972243782233,
119.35749344173125,
39.89738907582331
]
},
{
"position": [
119.35308016593318,
39.900042582966144,
119.3529912735992,
39.899872454867136,
119.35317175308242,
39.89979776488351,
119.35325795205847,
39.90000108847963,
119.35307477846541,
39.90004050821896
]
},
{
"position": [
119.3605399207335,
39.907051027572656,
119.3607370916395,
39.907163262945794,
119.36077995479812,
39.907252390677414,
119.3609256904303,
39.90748016141365,
119.36109285807551,
39.907377829531946,
119.36101998972579,
39.90704772723364,
119.3605399207335,
39.907051027572656
]
},
{
"position": [
119.36292757388566,
39.93051872017271,
119.36306932742467,
39.930518721419496,
119.36310369653826,
39.9302144792633,
119.3630006036093,
39.9302144783662,
119.36293186931172,
39.930525334154524
]
},
{
"position": [
119.36283578022211,
39.93326415407617,
119.36295631767196,
39.93327741126209,
119.36276690574967,
39.93301891353878,
119.36269802718182,
39.933022226910595,
119.36284008501809,
39.933270782244556
]
},
{
"position": [
119.39273665380753,
39.892000431627984,
119.39268113048028,
39.89191818444412,
119.39308686723079,
39.89171749651542,
119.39319083590716,
39.8917910100218,
119.39273519220235,
39.892000592803356
]
},
{
"position": [
119.39354840455387,
39.8938200622053,
119.39387524454212,
39.89388300294095,
119.39388153146606,
39.89356830576011,
119.39359554776703,
39.89351988967073,
119.39355154716901,
39.89382732446629
]
},
{
"position": [
119.39493193361562,
39.89643280484023,
119.39520766839031,
39.89640448685578,
119.39519847715745,
39.89635316061973,
119.39491814696139,
39.89638501832398,
119.39493193360931,
39.89643457471986
]
},
{
"position": [
119.39753826633162,
39.898871003220506,
119.39779614465768,
39.89862112434764,
119.3978751712163,
39.898640346133355,
119.39758401850997,
39.89890624293078,
119.39753410695221,
39.89887420675475,
119.39753764795299,
39.89887108085858
]
}
]
}

View File

@ -0,0 +1,698 @@
{
"island": [
{
"name": "洋河岛",
"position":[
119.39696808248908,
39.78631264320843,
119.39696808248908,
39.78631264320843,
119.39752817782471,
39.786150612897735,
119.3968646149951,
39.78635375409338,
119.3968646149951,
39.78635375409338,
119.39670708862785,
39.78632674361504,
119.39670708862785,
39.78632674361504,
119.39660206958585,
39.78634024479628,
119.39660206958585,
39.78634024479628,
119.39649704496185,
39.78646177361981,
119.39649704496185,
39.78646177361981,
119.3964445274358,
39.7866238145216,
119.3964445274358,
39.7866238145216,
119.39628699473674,
39.786704831756566,
119.39628699473674,
39.786704831756566,
119.39612946214726,
39.786772345356745,
119.39612946214726,
39.786772345356745,
119.39577939365174,
39.786826349698536,
119.39577939365174,
39.786826349698536,
119.3952542936567,
39.786839837095215,
119.3952542936567,
39.786839837095215,
119.3951842762989,
39.78689384890286,
119.3951842762989,
39.78689384890286,
119.39432662987232,
39.78665075311713,
119.39432662987232,
39.78665075311713,
119.39357399741829,
39.78648867731164,
119.39357399741829,
39.78648867731164,
119.39289138402624,
39.786272585895254,
119.39289138402624,
39.786272585895254,
119.39254132974784,
39.78612402715806,
119.39254132974784,
39.78612402715806,
119.39233130438168,
39.78597547545919,
119.39233130438168,
39.78597547545919,
119.39213878721368,
39.78578641335772,
119.39213878721368,
39.78578641335772,
119.3919987684235,
39.78570538305799,
119.3919987684235,
39.78570538305799,
119.39150868437812,
39.78558381908598,
119.39150868437812,
39.78558381908598,
119.39122864570646,
39.78539474916654,
119.39122864570646,
39.78539474916654,
119.39091360531334,
39.78519217068751,
119.39091360531334,
39.78519217068751,
119.39072112090268,
39.78476003638768,
119.39072112090268,
39.78476003638768,
119.39072115727167,
39.78447645754428,
119.39072115727167,
39.78447645754428,
119.39084372707292,
39.78411186558406,
119.39084372707292,
39.78411186558406,
119.39108878760653,
39.78400385446333,
119.39108878760653,
39.78400385446333,
119.39136885304069,
39.783895845491415,
119.39136885304069,
39.783895845491415,
119.39170142452312,
39.78380134347975,
119.39170142452312,
39.78380134347975,
119.39205148728085,
39.78380136785844,
119.39205148728085,
39.78380136785844,
119.39229653047288,
39.783801384274796,
119.39229653047288,
39.783801384274796,
119.39262909208621,
39.78376089477189,
119.39262909208621,
39.78376089477189,
119.39296165460541,
39.78369339683763,
119.39296165460541,
39.78369339683763,
119.39318920200596,
39.783571877533056,
119.39318920200596,
39.783571877533056,
119.39343425461855,
39.78342335114841,
119.39343425461855,
39.78342335114841,
119.39383682623989,
39.783328847504535,
119.39383682623989,
39.783328847504535,
119.39420438791247,
39.783261348026066,
119.39420438791247,
39.783261348026066,
119.39474696797922,
39.78328838090418,
119.39474696797922,
39.78328838090418,
119.39488698022419,
39.783423423473,
119.39488698022419,
39.783423423473,
119.395254528632,
39.78353146753071,
119.395254528632,
39.78353146753071,
119.3959721238921,
39.78374755127686,
119.3959721238921,
39.78374755127686,
119.39619964226723,
39.78407164443849,
119.39619964226723,
39.78407164443849,
119.39639216289736,
39.78426070003659,
119.39639216289736,
39.78426070003659,
119.39656718265029,
39.78442274752384,
119.39656718265029,
39.78442274752384,
119.39684722586632,
39.784409250868336,
119.39684722586632,
39.784409250868336,
119.39706800263377,
39.78445500067325,
119.39706800263377,
39.78445500067325,
119.39726053190411,
39.78450901918835,
119.39726053190411,
39.78450901918835,
119.39727803271649,
39.78457653804219,
119.39727803271649,
39.78457653804219,
119.39736553697703,
39.78490062758605,
119.39736553697703,
39.78490062758605,
119.39736553444396,
39.78498164953092,
119.39736553444396,
39.78498164953092,
119.39720800141502,
39.78517069815025,
119.39720800141502,
39.78517069815025,
119.39724300502435,
39.785238217064546,
119.39724300502435,
39.785238217064546,
119.39747054380416,
39.78525172470251,
119.39747054380416,
39.78525172470251,
119.39767322620986,
39.78532492769678,
119.39767322620986,
39.78532492769678,
119.39770822774481,
39.78551398090305,
119.39770822774481,
39.78551398090305,
119.39770822526067,
39.78560850716716,
119.39770822526067,
39.78560850716716,
119.39783074263491,
39.78582456909482,
119.39783074263491,
39.78582456909482,
119.39790075251322,
39.78595960760806,
119.39790075251322,
39.78595960760806,
119.39784823961571,
39.78608114089235,
119.39784823961571,
39.78608114089235,
119.39748066772816,
39.786135150775415,
119.39748066772816,
39.786135150775415
]
},
{
"name": "洋河岛",
"position":[
119.38815164477319,
39.785243632135895,
119.38815164477319,
39.785243632135895,
119.38815164477319,
39.785243632135895,
119.38809912799958,
39.78536516540203,
119.38809912799958,
39.78536516540203,
119.38809912799958,
39.78536516540203,
119.38801160657384,
39.78544618595728,
119.38801160657384,
39.78544618595728,
119.38801160657384,
39.78544618595728,
119.38781906540382,
39.78550019514082,
119.38781906540382,
39.78550019514082,
119.38781906540382,
39.78550019514082,
119.38762652327402,
39.78556770811985,
119.38762652327402,
39.78556770811985,
119.38762652327402,
39.78556770811985,
119.38738147332535,
39.785581203208245,
119.38738147332535,
39.785581203208245,
119.38738147332535,
39.785581203208245,
119.38708390947396,
39.785635207555984,
119.38708390947396,
39.785635207555984,
119.38708390947396,
39.785635207555984,
119.38690886777502,
39.785716224059634,
119.38690886777502,
39.785716224059634,
119.38690886777502,
39.785716224059634,
119.38640124776617,
39.785891753626764,
119.38640124776617,
39.785891753626764,
119.38640124776617,
39.785891753626764,
119.38613867902355,
39.78604028525338,
119.38613867902355,
39.78604028525338,
119.38613867902355,
39.78604028525338,
119.38584110722161,
39.78613479880092,
119.38584110722161,
39.78613479880092,
119.38584110722161,
39.78613479880092,
119.38557853653815,
39.78626982541681,
119.38557853653815,
39.78626982541681,
119.38557853653815,
39.78626982541681,
119.38517593909754,
39.78633732469861,
119.38517593909754,
39.78633732469861,
119.38517593909754,
39.78633732469861,
119.38472083462919,
39.78633729995276,
119.38472083462919,
39.78633729995276,
119.38472083462919,
39.78633729995276,
119.38410819242611,
39.786323760161444,
119.38410819242611,
39.786323760161444,
119.38410819242611,
39.786323760161444,
119.3836180816428,
39.78626971314256,
119.3836180816428,
39.78626971314256,
119.3836180816428,
39.78626971314256,
119.38330299388643,
39.78635071651272,
119.38330299388643,
39.78635071651272,
119.38330299388643,
39.78635071651272,
119.38297041477593,
39.78632368566076,
119.38297041477593,
39.78632368566076,
119.38297041477593,
39.78632368566076,
119.38288289858535,
39.78628316727357,
119.38288289858535,
39.78628316727357,
119.38288289858535,
39.78628316727357,
119.38304049842424,
39.78578352512697,
119.38304049842424,
39.78578352512697,
119.38304049842424,
39.78578352512697,
119.38304054103756,
39.78545942486146,
119.38304054103756,
39.78545942486146,
119.38304054103756,
39.78545942486146,
119.38318060648324,
39.7852163601354,
119.38318060648324,
39.7852163601354,
119.38318060648324,
39.7852163601354,
119.38323315937835,
39.784892263981575,
119.38323315937835,
39.784892263981575,
119.38323315937835,
39.784892263981575,
119.38335570609745,
39.784716718931,
119.38335570609745,
39.784716718931,
119.38335570609745,
39.784716718931,
119.38361876919245,
39.78446040009281,
119.38361876919245,
39.78446040009281,
119.38361876919245,
39.78446040009281,
119.3835487785496,
39.78437939098485,
119.3835487785496,
39.78437939098485,
119.3835487785496,
39.78437939098485,
119.3834787890139,
39.784284880928546,
119.3834787890139,
39.784284880928546,
119.3834787890139,
39.784284880928546,
119.38349629750256,
39.784190375311,
119.38349629750256,
39.784190375311,
119.38349629750256,
39.784190375311,
119.38367129434168,
39.784163381994034,
119.38367129434168,
39.784163381994034,
119.38367129434168,
39.784163381994034,
119.38374130035241,
39.78406887882491,
119.38374130035241,
39.78406887882491,
119.38374130035241,
39.78406887882491,
119.38377630943374,
39.78394737207953,
119.38377630943374,
39.78394737207953,
119.38377630943374,
39.78394737207953,
119.38381131290403,
39.78385286745824,
119.38381131290403,
39.78385286745824,
119.38381131290403,
39.78385286745824,
119.38389883012441,
39.7835828516468,
119.38389883012441,
39.7835828516468,
119.38389883012441,
39.7835828516468,
119.38407383493744,
39.783434348569436,
119.38407383493744,
39.783434348569436,
119.38407383493744,
39.783434348569436,
119.38426633176033,
39.78336685199763,
119.38426633176033,
39.78336685199763,
119.38426633176033,
39.78336685199763,
119.3845988365943,
39.78305633983122,
119.3845988365943,
39.78305633983122,
119.3845988365943,
39.78305633983122,
119.38469530394629,
39.78296148730448,
119.38469530394629,
39.78296148730448,
119.38469530394629,
39.78296148730448,
119.3848703126713,
39.78279947492238,
119.3848703126713,
39.78279947492238,
119.3848703126713,
39.78279947492238,
119.38495781421969,
39.782758973553264,
119.38495781421969,
39.782758973553264,
119.38495781421969,
39.782758973553264,
119.38511531506597,
39.78271847475968,
119.38511531506597,
39.78271847475968,
119.38511531506597,
39.78271847475968,
119.38527281078026,
39.782758985357745,
119.38527281078026,
39.782758985357745,
119.38527281078026,
39.782758985357745,
119.38543030690678,
39.78279949575755,
119.38543030690678,
39.78279949575755,
119.38543030690678,
39.78279949575755,
119.38551779602375,
39.78298852114312,
119.38551779602375,
39.78298852114312,
119.38551779602375,
39.78298852114312,
119.3855527905144,
39.78308303340175,
119.3855527905144,
39.78308303340175,
119.3855527905144,
39.78308303340175,
119.38577477940443,
39.78312354459576,
119.38577477940443,
39.78312354459576,
119.38577477940443,
39.78312354459576,
119.38594977961185,
39.78308304467115,
119.38594977961185,
39.78308304467115,
119.38594977961185,
39.78308304467115,
119.3862122779853,
39.78305604834805,
119.3862122779853,
39.78305604834805,
119.3862122779853,
39.78305604834805,
119.38635227631177,
39.783056051703376,
119.38635227631177,
39.783056051703376,
119.38635227631177,
39.783056051703376,
119.38666727241352,
39.78305605861904,
119.38666727241352,
39.78305605861904,
119.38666727241352,
39.78305605861904,
119.38678434368673,
39.783114257604275,
119.38678434368673,
39.783114257604275,
119.38678434368673,
39.783114257604275,
119.38723934054809,
39.78311426528108,
119.38723934054809,
39.78311426528108,
119.38723934054809,
39.78311426528108,
119.38757183797055,
39.78311426963499,
119.38757183797055,
39.78311426963499,
119.38757183797055,
39.78311426963499,
119.3879393348878,
39.78311427337033,
119.3879393348878,
39.78311427337033,
119.3879393348878,
39.78311427337033,
119.38804433253516,
39.78324929096097,
119.38804433253516,
39.78324929096097,
119.38804433253516,
39.78324929096097,
119.3880968312973,
39.78333030120403,
119.3880968312973,
39.78333030120403,
119.3880968312973,
39.78333030120403,
119.38816682987361,
39.783424813298254,
119.38816682987361,
39.783424813298254,
119.38816682987361,
39.783424813298254,
119.38823682924597,
39.78346531874512,
119.38823682924597,
39.78346531874512,
119.38823682924597,
39.78346531874512,
119.3884818287739,
39.7833573065928,
119.3884818287739,
39.7833573065928,
119.3884818287739,
39.7833573065928,
119.38886682629764,
39.78335730718406,
119.38886682629764,
39.78335730718406,
119.38886682629764,
39.78335730718406,
119.38909432539332,
39.78347882190423,
119.38909432539332,
39.78347882190423,
119.38909432539332,
39.78347882190423,
119.38940932427931,
39.78351932580003,
119.38940932427931,
39.78351932580003,
119.38940932427931,
39.78351932580003,
119.3896368239241,
39.783546327730285,
119.3896368239241,
39.783546327730285,
119.3896368239241,
39.783546327730285,
119.38982932377525,
39.78357332970542,
119.38982932377525,
39.78357332970542,
119.38982932377525,
39.78357332970542,
119.38995182525423,
39.78368134188184,
119.38995182525423,
39.78368134188184,
119.38995182525423,
39.78368134188184,
119.39000432708602,
39.783789354733756,
119.39000432708602,
39.783789354733756,
119.39000432708602,
39.783789354733756,
119.39000432984751,
39.783951374696194,
119.39000432984751,
39.783951374696194,
119.39000432984751,
39.783951374696194,
119.38984683084531,
39.78404588745658,
119.38984683084531,
39.78404588745658,
119.38984683084531,
39.78404588745658,
119.38965433391373,
39.78435642642226,
119.38965433391373,
39.78435642642226,
119.38965433391373,
39.78435642642226,
119.38949683354144,
39.78443743713267,
119.38949683354144,
39.78443743713267,
119.38949683354144,
39.78443743713267,
119.38912933143511,
39.78463996318759,
119.38912933143511,
39.78463996318759,
119.38912933143511,
39.78463996318759,
119.38900683010479,
39.78469396989897,
119.38900683010479,
39.78469396989897,
119.38900683010479,
39.78469396989897,
119.38865682527846,
39.78497750449992,
119.38865682527846,
39.78497750449992,
119.38865682527846,
39.78497750449992,
119.38846432121133,
39.78509901880217,
119.38846432121133,
39.78509901880217,
119.38846432121133,
39.78509901880217,
119.3882018153814,
39.785207031035746,
119.3882018153814,
39.785207031035746,
119.3882018153814,
39.785207031035746,
119.38806181152101,
39.78528804020086,
119.38806181152101,
39.78528804020086,
119.38806181152101,
39.78528804020086
]
}
]
}

View File

@ -0,0 +1,624 @@
{
"bridge": [
{
"position": [
119.13642068678853,
39.46370944636424,
119.136016340927,
39.46372550631208,
119.13617201875128,
39.46138695870188,
119.13665928666722,
39.461403049564304,
119.13637921510323,
39.46371748143809
]
},
{
"position": [
119.05314737895611,
39.46553526890157,
119.05357452902689,
39.46526261287909,
119.05361064772703,
39.46528574022377,
119.05319134975021,
39.46555961369316,
119.05316151250449,
39.465537703432126,
119.05314897009201,
39.46553438886274
]
},
{
"position": [
119.02693247588556,
39.460743688693604,
119.02677921937935,
39.460430482107796,
119.02708109726376,
39.460297281949984,
119.02724364310275,
39.4606428885714,
119.02692783160815,
39.46074368867111
]
},
{
"position": [
118.82593195461266,
39.85694355959051,
118.82593195461266,
39.85694355959051,
118.82595884634217,
39.85693526960145,
118.82595884634217,
39.85693526960145,
118.82595884634217,
39.85693526960145,
118.82595884634217,
39.85693526960145,
118.82595615804273,
39.85683993335687,
118.82595615804273,
39.85683993335687,
118.82595615804273,
39.85683993335687,
118.82595615804273,
39.85683993335687,
118.82598036061009,
39.85682542578453,
118.82598036061009,
39.85682542578453,
118.82598036061009,
39.85682542578453,
118.82598036061009,
39.85682542578453,
118.82616860171973,
39.85683371656041,
118.82616860171973,
39.85683371656041,
118.82616860171973,
39.85683371656041,
118.82616860171973,
39.85683371656041,
118.82659348867467,
39.856852369638645,
118.82659348867467,
39.856852369638645,
118.82659348867467,
39.856852369638645,
118.82659348867467,
39.856852369638645,
118.82675752734487,
39.856848224318774,
118.82675752734487,
39.856848224318774,
118.82675752734487,
39.856848224318774,
118.82675752734487,
39.856848224318774,
118.8267467711685,
39.85695185066716,
118.8267467711685,
39.85695185066716,
118.8267467711685,
39.85695185066716,
118.8267467711685,
39.85695185066716,
118.82673601455232,
39.85696428583695,
118.82673601455232,
39.85696428583695,
118.82673601455232,
39.85696428583695,
118.82673601455232,
39.85696428583695,
118.82593535500956,
39.856944811194744,
118.82593535500956,
39.856944811194744,
118.82593535500956,
39.856944811194744,
118.82593535500956,
39.856944811194744,
118.82593206876082,
39.85694359107381,
118.82593206876082,
39.85694359107381,
118.82593206876082,
39.85694359107381,
118.82593206876082,
39.85694359107381,
118.82593218689996,
39.856943488665465,
118.82593218689996,
39.856943488665465,
118.82593218689996,
39.856943488665465,
118.82593218689996,
39.856943488665465
]
},
{
"position": [
119.13642068678853,
39.46370944636424,
119.136016340927,
39.46372550631208,
119.13617201875128,
39.46138695870188,
119.13665928666722,
39.461403049564304,
119.13637921510323,
39.46371748143809
]
},
{
"position": [
119.05314737895611,
39.46553526890157,
119.05357452902689,
39.46526261287909,
119.05361064772703,
39.46528574022377,
119.05319134975021,
39.46555961369316,
119.05316151250449,
39.465537703432126,
119.05314897009201,
39.46553438886274
]
},
{
"position": [
119.02693247588556,
39.460743688693604,
119.02677921937935,
39.460430482107796,
119.02708109726376,
39.460297281949984,
119.02724364310275,
39.4606428885714,
119.02692783160815,
39.46074368867111
]
},
{
"position": [
118.97344363156242,
39.53202369113372,
118.97400663424425,
39.53214800949262,
118.97400443470892,
39.532096919613736,
118.97346122555331,
39.531969195327335,
118.97344363157677,
39.53202198813986
]
},
{
"position": [
118.93086830195597,
39.54494590073213,
118.93096286396971,
39.54471896080386,
118.9310243249356,
39.54474092363763,
118.93093921943138,
39.54494224133227,
118.93092030785398,
39.5449532220996,
118.93086357434743,
39.544945900688894
]
},
{
"position": [
118.87660059628764,
39.57710076653807,
118.87666206801661,
39.576836515301615,
118.87985143521695,
39.576847088416265,
118.879830951597,
39.57709548565536,
118.87664840323175,
39.57709019718551,
118.87662108477927,
39.577106051915464
]
},
{
"position":[
118.85527619939751,
39.5944776439651,
118.8521816470419,
39.592995475405864,
118.85252173672278,
39.59256137604701,
118.85551992261388,
39.59422770707546,
118.85528187324121,
39.59447764735888
]
},
{
"position":[
118.8475768048476,
39.597635650480434,
118.84981500324533,
39.59906457572974,
118.84993685713354,
39.599005040095534,
118.84994647340707,
39.59898043964409,
118.84979337320884,
39.598834825025854,
118.84976480980207,
39.59875969185875,
118.84974767136143,
39.598737593819195,
118.84966769070306,
39.598711075485454,
118.84962198727042,
39.59870665534026,
118.84936422169211,
39.59861715275061,
118.8492214197301,
39.59848458120169,
118.84894724132283,
39.59822385660547,
118.84884442352586,
39.59817524597223,
118.84874731687881,
39.59817082543995,
118.84865021137284,
39.59812221473938,
118.84845600098687,
39.59800289788191,
118.84771343586054,
39.597472597295464,
118.84758204973217,
39.59764051679268
]
},
{
"position":[
118.84606549482838,
39.60293454895894,
118.84606549482838,
39.60293454895894,
118.8456860727328,
39.60246039728508,
118.8456860727328,
39.60246039728508,
118.84541610152995,
39.602099137750585,
118.84541610152995,
39.602099137750585,
118.84494909810789,
39.601824959229624,
118.84494909810789,
39.601824959229624,
118.84462074047657,
39.60158786832749,
118.84462074047657,
39.60158786832749,
118.84402969374044,
39.601243513865235,
118.84402969374044,
39.601243513865235,
118.84373781514788,
39.60114189475537,
118.84373781514788,
39.60114189475537,
118.84380349788297,
39.60096126328748,
118.84380349788297,
39.60096126328748,
118.84408807915472,
39.601068527142274,
118.84408807915472,
39.601068527142274,
118.84436535995276,
39.601204012902855,
118.84436535995276,
39.601204012902855,
118.8445769660507,
39.60137336372046,
118.8445769660507,
39.60137336372046,
118.84520449727631,
39.60164433157646,
118.84520449727631,
39.60164433157646,
118.84552555647481,
39.60188141883743,
118.84552555647481,
39.60188141883743,
118.84577365150552,
39.60196045069731,
118.84577365150552,
39.60196045069731,
118.84608740861005,
39.60243461338788,
118.84608740861005,
39.60243461338788,
118.84629171522808,
39.602812812645894,
118.84629171522808,
39.602812812645894,
118.84629171357882,
39.60287490446077,
118.84629171357882,
39.60287490446077,
118.8460655025411,
39.60295392695168,
118.8460655025411,
39.60295392695168
]
},
{
"position":[
118.80833894951213,
39.650471585904526,
118.80875891147213,
39.650619553218455,
118.80883033376313,
39.650517964375986,
118.80837894705523,
39.65032361979072,
118.80832466507391,
39.650471585854156,
118.80834062476252,
39.65047150804127
]
},
{
"position":[
118.77039713731844,
39.687360103832205,
118.77045871134108,
39.68720851683219,
118.77070387694144,
39.687218372051774,
118.77072088134696,
39.68740560031904,
118.77042611498646,
39.68738151128691,
118.77039260289499,
39.687374944637156,
118.77039734904731,
39.687358240136945
]
},
{
"position":[
118.76720649495014,
39.700037027847465,
118.76717517702498,
39.69952883103285,
118.77277239778837,
39.69954489474803,
118.77274109744951,
39.70009342819266,
118.76721693761941,
39.700028961302735
]
},
{
"position":[
118.76320027637186,
39.710059259443,
118.76360862113181,
39.709577105569615,
118.77155705178967,
39.709058591791646,
118.7717010748941,
39.70963352577777,
118.76324830204538,
39.71007781254912
]
},
{
"position":[
118.77818615704713,
39.723903096705854,
118.77819542189557,
39.723488390585125,
118.77907042449405,
39.72335969068888,
118.7794685765246,
39.72369216892631,
118.77818152725513,
39.72391024682886
]
},
{
"position":[
118.77615805028886,
39.71994689862374,
118.77608476481755,
39.71936023198795,
118.77637797756739,
39.719339653621475,
118.77653123241863,
39.71993146732195,
118.77616471429323,
39.71994689880336
]
},
{
"position":[
118.77489940031403,
39.719158836238805,
118.77480150103769,
39.71890120925464,
118.77551221995472,
39.718800406002885,
118.77556660891014,
39.719004826411464,
118.77490302635472,
39.71916163653512,
118.77489728207868,
39.7191541449911
]
},
{
"position":[
118.7627081570239,
39.71020171587562,
118.76276992676516,
39.70967771577184,
118.77171320481983,
39.70903549907707,
118.77192903892761,
39.709535692296846,
118.76270814078622,
39.710296990366686,
118.7627220488853,
39.71013877638971
]
},
{
"position":[
118.76536830838765,
39.749683434929516,
118.76520150003563,
39.74880022751776,
118.76864988617484,
39.74840775238582,
118.76867371844493,
39.74939521415488,
118.76535241573153,
39.74970183466064,
118.76536220940538,
39.749661740195066
]
},
{
"position":[
118.76796553371712,
39.75637799439354,
118.76795824931871,
39.75594884744845,
118.77081876932131,
39.75608444296233,
118.77080412649475,
39.75645711904693,
118.76796553371712,
39.75637799439354
]
},
{
"position":[
118.76349419812995,
39.72584493487554,
118.76348776452419,
39.72583996712703,
118.7634748946205,
39.7257157719798,
118.7634748946205,
39.7257157719798,
118.76343629188382,
39.72563131968236,
118.76343629188382,
39.72563131968236,
118.76334622160526,
39.72555183564637,
118.76334622160526,
39.72555183564637,
118.76131970304863,
39.72422544041001,
118.76131970304863,
39.72422544041001,
118.76119747166803,
39.724106212762315,
118.76119747166803,
39.724106212762315,
118.76128110548652,
39.724041632377535,
118.76128110548652,
39.724041632377535,
118.76133900572644,
39.72399195506755,
118.76133900572644,
39.72399195506755,
118.76149340421,
39.724051569464855,
118.76149340421,
39.724051569464855,
118.76174430235388,
39.724116151843475,
118.76174430235388,
39.724116151843475,
118.76369362788141,
39.725517057496596,
118.76369362788141,
39.725517057496596,
118.76382230074724,
39.725636283316355,
118.76382230074724,
39.725636283316355,
118.76349202076781,
39.725844317252076,
118.76349202076781,
39.725844317252076
]
},
{
"position":[
118.82067838751392,
39.63386852767958,
118.82339007461923,
39.63612943205769,
118.82437443225793,
39.63727851198698,
118.82491687453991,
39.63838017944685,
118.82562782568444,
39.63790895790334,
118.82621188440686,
39.63814452501919,
118.82611035158538,
39.63859608650058,
118.82763400441125,
39.639067197914976,
118.82707540676104,
39.639636585074996,
118.8253739908417,
39.639126204845276,
118.8248915184331,
39.639106590254215,
118.82435823946314,
39.63879248248064,
118.82445986030726,
39.63953852819242,
118.82395199849384,
39.639636707545804,
118.82372342464573,
39.6390084617475,
118.82377419034891,
39.63859617143026,
118.82367259737963,
39.638183884744045,
118.82329168027803,
39.637594911315304,
118.82303773576231,
39.63710409831687,
118.82255526267696,
39.636475860407245,
118.82118407874853,
39.63516048485617,
118.82047311664577,
39.634591135058386,
118.82026998533583,
39.63441444087074,
118.8208539831821,
39.633982518668
]
}
]
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,876 @@
{
"bridge": [
{
"position": [
119.5703107210851,
39.91742939344317,
119.57031072179129,
39.91747885139074,
119.56523656921124,
39.9170336560736,
119.56523656921124,
39.9170336560736,
119.564883271566,
39.917478765250486,
119.564883271566,
39.917478765250486,
119.56600728900072,
39.91775082139402,
119.56600728900072,
39.91775082139402,
119.5667459396413,
39.91777556916543,
119.5667459396413,
39.91777556916543,
119.56803054669896,
39.91784977862559,
119.56803054669896,
39.91784977862559,
119.56896188706536,
39.91789924420383,
119.56896188706536,
39.91789924420383,
119.57031072645583,
39.91789924355994,
119.57031072645583,
39.91789924355994,
119.57034283737292,
39.91752830910902,
119.57034283737292,
39.91752830910902
]
},
{
"position": [
119.5680047636639,
39.92203654410322,
119.56806436259446,
39.92200900893467,
119.56656243364874,
39.92123809894732,
119.56616908615045,
39.92166028527502,
119.56759950206241,
39.92256886915356,
119.56806694181653,
39.92202799661241,
119.56760206770879,
39.92260624076096
]
},
{
"position": [
119.55946681098055,
39.92567194221141,
119.55946681098055,
39.92567194221141,
119.55946681098055,
39.92567194221141,
119.55948247993658,
39.92565987747469,
119.55948247993658,
39.92565987747469,
119.5592944275442,
39.925285890789745,
119.5592944275442,
39.925285890789745,
119.55882434001356,
39.92522558097352,
119.55882434001356,
39.92522558097352,
119.55894970756839,
39.92551511983476,
119.55894970756839,
39.92551511983476,
119.55904373457149,
39.92574433820261,
119.55904373457149,
39.92574433820261,
119.55910641776899,
39.92585291497422,
119.55910641776899,
39.92585291497422,
119.55946681153885,
39.925684006427915,
119.55946681153885,
39.925684006427915
]
},
{
"position": [
119.55295225083692,
39.93162072823066,
119.55288663095999,
39.931600518891955,
119.55123896834186,
39.93148014084169,
119.55114705750033,
39.9319853116723,
119.5529056954691,
39.93206620512171,
119.55293196839675,
39.93162165413096
]
},
{
"position": [
119.55576006515778,
39.94479574132592,
119.5557573635127,
39.944804522967395,
119.55418122727899,
39.944239596901646,
119.55397066054444,
39.94458224271729,
119.55555282029906,
39.94517495363022,
119.55576337921205,
39.94481378373758
]
},
{
"position": [
119.55111519015708,
39.95388568754194,
119.55110406558089,
39.953888541314406,
119.5502326405936,
39.953902804206756,
119.55046254198074,
39.954382246650276,
119.55114114549241,
39.9543736887149,
119.55111148191921,
39.95389424894254
]
},
{
"position": [
119.55189862365066,
39.959667404877116,
119.551880598218,
39.95966022547639,
119.55150525497018,
39.959466638311625,
119.55130959161656,
39.95971553096986,
119.55174083866133,
39.95992141014051,
119.55190056328613,
39.959672516663616
]
},
{
"position": [
119.55122616558943,
39.96102894882103,
119.55124069477156,
39.96105131078829,
119.55071762912125,
39.96079414099822,
119.55062317914104,
39.96095626233619,
119.55118983533329,
39.96121902361526,
119.55124069446757,
39.96106249169045
]
},
{
"position": [
119.55055935257255,
39.96110125799456,
119.55056824129265,
39.96108985830163,
119.55166449382264,
39.961427295401826,
119.55165264257882,
39.96151165362219,
119.55052676014485,
39.961176496199855,
119.5505623154821,
39.9610966980965
]
},
{
"position": [
119.55091547863182,
39.96147226349223,
119.55091548197151,
39.9613712682378,
119.55047449790094,
39.961237946314554,
119.55046399536069,
39.9613106627687,
119.55089972924665,
39.96146418358316
]
},
{
"position": [
119.54933033157215,
39.963967266533686,
119.54917349918074,
39.96388069167256,
119.54900302911703,
39.963912173122836,
119.54929964699117,
39.9640853230524,
119.54933374097594,
39.96396726651773
]
},
{
"position": [
119.54925756758261,
39.964173949518475,
119.54925756758261,
39.964173949518475,
119.54926011279164,
39.96417590802672,
119.54898777415193,
39.96401726685115,
119.54888850866705,
39.96409560639016,
119.54918120929727,
39.96427383301153,
119.54926265797954,
39.96418178358284
]
},
{
"position": [
119.52950206211986,
39.97835533231671,
119.52949318034686,
39.97835191584037,
119.5292933407765,
39.97828187769868,
119.52914456912646,
39.97850053062229,
119.52915567077484,
39.97856885996983,
119.52923116589614,
39.97860814964788,
119.52924448836818,
39.978640606099624,
119.52934662904538,
39.97867818757106,
119.5293688335648,
39.9786850205591,
119.52942212485662,
39.97861669145796,
119.52949762118229,
39.97836387345647
]
},
{
"position": [
119.52788255281146,
39.98650897543444,
119.52789580091168,
39.986519166239646,
119.52789580091168,
39.986519166239646,
119.52749173320525,
39.98651916546381,
119.52749173320525,
39.98651916546381,
119.52722235450186,
39.986503877913606,
119.52722235450186,
39.986503877913606,
119.52724222574781,
39.98660069081944,
119.52724222574781,
39.98660069081944,
119.52742328400696,
39.98658880243902,
119.52742328400696,
39.98658880243902,
119.52762421412086,
39.98659899391342,
119.52762421412086,
39.98659899391342,
119.5278229361613,
39.986598994228636,
119.5278229361613,
39.986598994228636,
119.5278825527707,
39.98659729579942,
119.5278825527707,
39.98659729579942,
119.52801282612722,
39.98661767738227,
119.52801282612722,
39.98661767738227,
119.52797970565976,
39.98652596009852,
119.52797970565976,
39.98652596009852,
119.52789138487324,
39.98652596012656,
119.52789138487324,
39.98652596012656
]
},
{
"position": [
119.5187994882113,
39.99681264850423,
119.51810754396656,
39.99668052013628,
119.51794529500513,
39.99667684917209,
119.51765896853533,
39.997040199263274,
119.51793814190519,
39.99709889689784,
119.51821014006406,
39.99717230005874,
119.51863772104709,
39.99725893090613,
119.51883336781164,
39.997277280932124,
119.51900992748376,
39.9973176511395,
119.51911490899744,
39.99733967110482,
119.5193105505872,
39.99689926142646,
119.51878564713266,
39.99680751215549
]
},
{
"position": [
119.51310390286177,
40.00251970532798,
119.51309099352936,
40.00252169087709,
119.51305226543673,
40.00251970521276,
119.51287153537147,
40.00239461327086,
119.51283415292693,
40.00246402308589,
119.51289353377902,
40.002507704694764,
119.51298131447882,
40.0025593284834,
119.51305775258692,
40.00260655261068,
119.51308615134803,
40.00262839271795,
119.51312229527514,
40.00265817466788,
119.5131584396556,
40.0025866982578,
119.5131274591307,
40.00256485816005,
119.5130990604237,
40.00254103263173,
119.5131016422444,
40.00252117805318
]
},
{
"position": [
119.5122288988732,
40.005035029329974,
119.51223724568791,
40.00504305282381,
119.51178651885068,
40.00523240857119,
119.51144847180895,
40.00538004087072,
119.51140256388237,
40.005418553698554,
119.51127736054873,
40.00547311329899,
119.51113963641005,
40.005537301043496,
119.51111042215625,
40.00555013858485,
119.51114798208107,
40.005627164897895,
119.51123353829072,
40.00557902394884,
119.51131283400439,
40.005542115939726,
119.51142969053656,
40.005493975062926,
119.51149437890261,
40.005460276379175,
119.51162584200064,
40.00540411192011,
119.51175104466986,
40.00534473794716,
119.51188042047208,
40.00529499211095,
119.5120473566952,
40.005222780252524,
119.51213499803632,
40.00517624364136,
119.51224767966754,
40.00512970686526,
119.5123436676573,
40.00508637948754,
119.51223307227242,
40.00503823871866
]
},
{
"position": [
119.51238501007319,
40.00867692780367,
119.51239177063584,
40.00867692776589,
119.51087064114219,
40.00867345738887,
119.51085486408579,
40.00881555559819,
119.51237374338605,
40.00882595755873,
119.51239177161601,
40.008825957489535,
119.51240078477362,
40.008680393555,
119.5121641648682,
40.008683860078264
]
},
{
"position": [
119.51239746301847,
40.00932182793095,
119.51238801381,
40.009324250013016,
119.51085723753532,
40.00931697491219,
119.5106525021206,
40.00934361475003,
119.51069659451885,
40.00952769167564,
119.51089817993042,
40.00953496035573,
119.51238171469336,
40.00953496821929,
119.51255810059784,
40.009520435644596,
119.51259589660178,
40.00932667161744,
119.51238486408329,
40.00932667206118
]
},
{
"position": [
119.51226747635658,
40.02469482835826,
119.51077331955808,
40.02425558501,
119.5107482004644,
40.02443899157553,
119.51223608208109,
40.02490719300116,
119.51228003278106,
40.024685175571165
]
},
{
"position": [
119.51500586486672,
40.04936641904608,
119.51504713437225,
40.04914222496957,
119.51504428833931,
40.04913019504575,
119.51519939973785,
40.04914988065837,
119.51520793777276,
40.0492504945804,
119.51517805376761,
40.049288771595265,
119.51517093839705,
40.04933798495512,
119.51516382302728,
40.049382823809665,
119.51515813078429,
40.049402509160196,
119.51499448034508,
40.04938938527221,
119.51500444181195,
40.049367512675055
]
},
{
"position": [
119.521433662239,
40.055562480984655,
119.52142289698637,
40.05556248099343,
119.52143725066361,
40.05561349461562,
119.52107123247517,
40.05549630056564,
119.52092770859524,
40.05545631609152,
119.52074290534871,
40.055380483599194,
119.52060716871082,
40.05531891769179,
119.52032194426411,
40.055183087720096,
119.52033450446812,
40.05513896782207,
119.5207417880471,
40.055320967162714,
119.5208584112548,
40.05535405799072,
119.52101271257527,
40.055411966287146,
119.5211508661331,
40.05546573801703,
119.52123519371737,
40.055493313229434,
119.52141282001959,
40.05554984217052,
119.52146485203095,
40.05557052341742,
119.5214379388423,
40.05561877951557
]
},
{
"position": [
119.52147637518677,
40.055694883745694,
119.52147637519775,
40.05569570335048,
119.52113187091942,
40.05559325440592,
119.52101454798127,
40.055549815842056,
119.52087269416026,
40.055500640006834,
119.52073084055351,
40.055453922790015,
119.52060925191931,
40.0553998290562,
119.5204823304968,
40.05535475073887,
119.52042366944518,
40.0553178685392,
119.52040980314239,
40.05544326711393,
119.52043753402718,
40.05543834963537,
119.52049939492241,
40.05546539661637,
119.52054845703937,
40.05548916514389,
119.5206337825321,
40.05551457291045,
119.52070630919661,
40.05554817658721,
119.52078950162876,
40.055579321428844,
119.52087376070615,
40.05561456421393,
119.52101774796425,
40.05566619890547,
119.52112653855724,
40.05570308075526,
119.52124599510306,
40.05573504492082,
119.52134305373193,
40.05576045228684,
119.52141771447484,
40.05579159690716,
119.52146997696363,
40.05580143195187,
119.52149770811828,
40.05580880826889,
119.52155636877136,
40.055714553827976,
119.52147424203937,
40.05569570335829
]
},
{
"position": [
119.52153640720118,
40.05589069294145,
119.52153640720118,
40.05589069294145,
119.52152872748647,
40.05589364368432,
119.52152872748647,
40.05589364368432,
119.5213194543816,
40.05583905601388,
119.5213194543816,
40.05583905601388,
119.5211313010936,
40.05578594341963,
119.5211313010936,
40.05578594341963,
119.52096473417237,
40.055722325592,
119.52096473417237,
40.055722325592,
119.52086297966224,
40.055685442142014,
119.52086297966224,
40.055685442142014,
119.52073242678294,
40.055642657203805,
119.52073242678294,
40.055642657203805,
119.52054108999232,
40.05554971056466,
119.52054108999232,
40.05554971056466,
119.52041388005615,
40.055512281094614,
119.52041388005615,
40.055512281094614,
119.52036204385227,
40.055488675799346,
119.52036204385227,
40.055488675799346,
119.52034860424924,
40.05552408311525,
119.52034860424924,
40.05552408311525,
119.52040811990028,
40.05555506503253,
119.52040811990028,
40.05555506503253,
119.52050027341895,
40.05558309646943,
119.52050027341895,
40.05558309646943,
119.52056938845881,
40.05561407832897,
119.52056938845881,
40.05561407832897,
119.52073449638382,
40.055690794956384,
119.52073449638382,
40.055690794956384,
119.52081321077216,
40.05572030132688,
119.52081321077216,
40.05572030132688,
119.52093581119615,
40.055763494834814,
119.52093581119615,
40.055763494834814,
119.52102220244996,
40.05578857439718,
119.52102220244996,
40.05578857439718,
119.52113355122577,
40.055819554952116,
119.52113355122577,
40.055819554952116,
119.52127767318437,
40.055878670541844,
119.52127767318437,
40.055878670541844,
119.52142933723985,
40.055915551623926,
119.52142933723985,
40.055915551623926,
119.52149845004723,
40.055927353506675,
119.52149845004723,
40.055927353506675,
119.52156372337528,
40.055949482134366,
119.52156372337528,
40.055949482134366,
119.5215848408411,
40.05590669979679,
119.5215848408411,
40.05590669979679,
119.521514404318,
40.055893422602,
119.521514404318,
40.055893422602
]
},
{
"position": [
119.54523087856172,
39.96657758017046,
119.54524135418329,
39.96657959527491,
119.544751620562,
39.966200753281946,
119.54443997364805,
39.96618866191065,
119.54530420995928,
39.96682342530993,
119.54531992366502,
39.96684559167285,
119.54540110839814,
39.966696471935194,
119.5452439731398,
39.966587655759106
]
},
{
"position": [
119.54572094454255,
39.9664530998192,
119.54571833129009,
39.96644505698076,
119.54516956677185,
39.96604693833505,
119.5448612156836,
39.96600471316605,
119.54519308538761,
39.966241977220776,
119.54528715910354,
39.96631838402723,
119.54545178856134,
39.966432993982195,
119.54554847593947,
39.96648929346286,
119.54560857921649,
39.96654961445361,
119.54568174841731,
39.966599881852666,
119.54571310687159,
39.966640095889325,
119.54576798391464,
39.966676288346385,
119.54585944340658,
39.96654157014383,
119.54571833130628,
39.96644706769711
]
},
{
"position": [
119.53079884083702,
39.97687743295928,
119.53079884083702,
39.97687743295928,
119.5307897264826,
39.97687509570609,
119.5307897264826,
39.97687509570609,
119.53040692531674,
39.976758231216294,
119.53040692531674,
39.976758231216294,
119.53022767803935,
39.97713454029273,
119.53022767803935,
39.97713454029273,
119.53051629904354,
39.977228032543884,
119.53051629904354,
39.977228032543884,
119.53079276471371,
39.97688678230978,
119.53079276471371,
39.97688678230978,
119.53079276469585,
39.97688444498308,
119.53079276469585,
39.97688444498308,
119.5307897264826,
39.97687509570609,
119.5307897264826,
39.97687509570609
]
},
{
"position": [
119.52048468167523,
40.059282065253186,
119.5204977525516,
40.0593172191564,
119.52004025818547,
40.05929712740019,
119.51924412747452,
40.05922515752985,
119.51894998844809,
40.05921008413,
119.51892383775022,
40.05937080624246,
119.51891075860986,
40.05956668663573,
119.51891074614507,
40.05971234160385,
119.51891728067163,
40.05979773362858,
119.51915261621822,
40.059797737959016,
119.51915915809629,
40.059621931425234,
119.5191853132105,
40.05936575640265,
119.5205580881573,
40.05950641751995,
119.5205907733428,
40.05950641772083,
119.52061038551159,
40.05933563446082,
119.52046657140718,
40.05932558761717
]
},
{
"position": [
119.52181071712211,
40.05986398965627,
119.52181833201776,
40.060050942294765,
119.51892907831758,
40.059799811661065,
119.51892907457058,
40.059618702811605,
119.52181831540396,
40.05987567377638
]
},
{
"position": [
119.53241188501197,
40.07712394178201,
119.5325872439332,
40.07720861939399,
119.53199350085046,
40.07775130606476,
119.53178557290782,
40.077647382500956,
119.53239434894155,
40.07712394152453,
119.53240687457091,
40.07712971501024
]
},
{
"position": [
119.52748342025961,
40.08759982166978,
119.5273109258811,
40.08686545128089,
119.5271729314701,
40.08692223239176,
119.52732078237302,
40.087705813369894,
119.52752284796684,
40.0877323111258,
119.52748342025961,
40.08759982166978
]
}
]
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,780 @@
{
"bridge": [
{
"position": [
119.30824662327683,
39.67661371790197,
119.3086824235368,
39.67674639301368,
119.30964657877341,
39.67373596023913,
119.30917117283738,
39.67363389821231,
119.30827303473626,
39.676593307907716
]
},
{
"position": [
119.31495615318738,
39.678974778296315,
119.31546076243582,
39.67916224518749,
119.31546076243582,
39.67916224518749,
119.3162831245029,
39.676543871053134,
119.3162831245029,
39.676543871053134,
119.31574355555033,
39.67639025470187,
119.31574355555033,
39.67639025470187,
119.31489152994868,
39.67892482842169,
119.31489152994868,
39.67892482842169,
119.3149341269841,
39.67900163478878,
119.3149341269841,
39.67900163478878
]
},
{
"position": [
119.28899565935919,
39.66818780660984,
119.28887775814869,
39.66818780733848,
119.28887775087789,
39.667504427080424,
119.28958514936663,
39.667428489973375,
119.28956551213484,
39.66803593926579,
119.28887775868806,
39.66823336618258
]
},
{
"position": [
119.28572940227309,
39.65930079825922,
119.28571815970682,
39.659313832746435,
119.28564508372698,
39.65922259103538,
119.28619596665102,
39.65911831557934,
119.28621283050694,
39.65915741903948,
119.28571253847417,
39.65930514307741
]
},
{
"position": [
119.28552486950326,
39.65912738762585,
119.2855197190356,
39.659139330546,
119.2855197190356,
39.659139330546,
119.2853652045128,
39.65888056780953,
119.2853652045128,
39.65888056780953,
119.28600386254531,
39.65884075640143,
119.28600386254531,
39.65884075640143,
119.28622018535187,
39.65909155603322,
119.28622018535187,
39.65909155603322,
119.28551971906573,
39.65914729248949,
119.28551971906573,
39.65914729248949
]
},
{
"position": [
119.27944212573806,
39.65830798593177,
119.27946688397974,
39.658320744088115,
119.27946688397974,
39.658320744088115,
119.27946688397974,
39.658320744088115,
119.27946688397974,
39.658320744088115,
119.27982175839354,
39.65813575909072,
119.27982175839354,
39.65813575909072,
119.27982175839354,
39.65813575909072,
119.27982175839354,
39.65813575909072,
119.27973098578296,
39.65763182362617,
119.27973098578296,
39.65763182362617,
119.27973098578296,
39.65763182362617,
119.27973098578296,
39.65763182362617,
119.27939261959541,
39.657804050487506,
119.27939261959541,
39.657804050487506,
119.27939261959541,
39.657804050487506,
119.27939261959541,
39.657804050487506,
119.27944212552926,
39.658314364864516,
119.27944212552926,
39.658314364864516,
119.27944212552926,
39.658314364864516
]
},
{
"position": [
119.2732184144168,
39.65843135241431,
119.2732184144168,
39.65843135241431,
119.2732132608141,
39.658423385339695,
119.2732132608141,
39.658423385339695,
119.2732132608141,
39.658423385339695,
119.27365648231427,
39.658467206877006,
119.27365648231427,
39.658467206877006,
119.27365648231427,
39.658467206877006,
119.27361010309876,
39.65803698674528,
119.27361010309876,
39.65803698674528,
119.27361010309876,
39.65803698674528,
119.27315142339387,
39.65798519753196,
119.27315142339387,
39.65798519753196,
119.27315142339387,
39.65798519753196,
119.2732132608141,
39.658423385339695,
119.2732132608141,
39.658423385339695,
119.2732132608141,
39.658423385339695
]
},
{
"position": [
119.26891397974408,
39.656310287949125,
119.26891994776696,
39.65629620132439,
119.26891994776696,
39.65629620132439,
119.26891994807515,
39.65625584699668,
119.26891994807515,
39.65625584699668,
119.26891994807515,
39.65625584699668,
119.2693441322003,
39.65629620306492,
119.2693441322003,
39.65629620306492,
119.2693441322003,
39.65629620306492,
119.26931802840022,
39.65634160156262,
119.26931802840022,
39.65634160156262,
119.26931802840022,
39.65634160156262,
119.26891994771562,
39.65630124562834,
119.26891994771562,
39.65630124562834,
119.26891994771562,
39.65630124562834
]
},
{
"position": [
119.26656193764495,
39.65937610198187,
119.26654651606728,
39.65936418216024,
119.26654651606728,
39.65936418216024,
119.26683438609793,
39.65939596852502,
119.26683438609793,
39.65939596852502,
119.26683438600857,
39.65925293109987,
119.26683438600857,
39.65925293109987,
119.26654137601729,
39.65922511796286,
119.26654137601729,
39.65922511796286,
119.26653623499274,
39.65936020885053,
119.26653623499274,
39.65936020885053
]
},
{
"position": [
119.26047371140085,
39.65695932802105,
119.26047037967112,
39.656956752760436,
119.26047037967112,
39.656956752760436,
119.26045705245525,
39.656900097113244,
119.26045705245525,
39.656900097113244,
119.26050036460073,
39.65689752171703,
119.26050036460073,
39.65689752171703,
119.26051369182518,
39.656951602117026,
119.26051369182518,
39.656951602117026,
119.26046371629901,
39.65696190331316,
119.26046371629901,
39.65696190331316
]
},
{
"position": [
119.25778818307585,
39.65545094788322,
119.25778818307585,
39.65545094788322,
119.25778818307585,
39.65545094788322,
119.25778496496068,
39.655445972843076,
119.25778496496068,
39.655445972843076,
119.25778496496068,
39.655445972843076,
119.2578654181162,
39.65545841054671,
119.2578654181162,
39.65545841054671,
119.2578654181162,
39.65545841054671,
119.25789438156114,
39.65524199630778,
119.25789438156114,
39.65524199630778,
119.25789438156114,
39.65524199630778,
119.257817146742,
39.655234533638485,
119.257817146742,
39.655234533638485,
119.257817146742,
39.655234533638485,
119.25778174682746,
39.655448460349156,
119.25778174682746,
39.655448460349156,
119.25778174682746,
39.655448460349156
]
},
{
"position": [
119.25283228712797,
39.656017385702356,
119.25283228712797,
39.656017385702356,
119.25283228712797,
39.656017385702356,
119.25283101271977,
39.656018370771086,
119.25283101271977,
39.656018370771086,
119.25283101271977,
39.656018370771086,
119.25283101271977,
39.656018370771086,
119.25285522634435,
39.65602034096232,
119.25285522634435,
39.65602034096232,
119.25285522634435,
39.65602034096232,
119.25285522634435,
39.65602034096232,
119.25286542179317,
39.65598290841157,
119.25286542179317,
39.65598290841157,
119.25286542179317,
39.65598290841157,
119.25286542179317,
39.65598290841157,
119.25284120816333,
39.65598290834614,
119.25284120816333,
39.65598290834614,
119.25284120816333,
39.65598290834614,
119.25284120816333,
39.65598290834614,
119.25283101271977,
39.656018370771086,
119.25283101271977,
39.656018370771086,
119.25283101271977,
39.656018370771086,
119.25283101271977,
39.656018370771086
]
},
{
"position":[
119.25778179537791,
39.655453146838234,
119.25778780365697,
39.655451598780246,
119.25778780365697,
39.655451598780246,
119.25785990279785,
39.655463983534844,
119.25785990279785,
39.655463983534844,
119.25789395035284,
39.65522558048557,
119.25789395035284,
39.65522558048557,
119.25780783219606,
39.655214743763395,
119.25780783219606,
39.655214743763395,
119.25778580090075,
39.65545314685528,
119.25778580090075,
39.65545314685528
]
},
{
"position":[
119.25283035276762,
39.65601767029288,
119.25283507207386,
39.65601762368739,
119.25283507207386,
39.65601762368739,
119.25285256022019,
39.65601955482003,
119.25285256022019,
39.65601955482003,
119.25286138540262,
39.65598394735767,
119.25286138540262,
39.65598394735767,
119.25284514826285,
39.655981923026985,
119.25284514826285,
39.655981923026985,
119.25283152990647,
39.65601674122548,
119.25283152990647,
39.65601674122548
]
},
{
"position":[
119.24892134231692,
39.65336107392842,
119.24892134236009,
39.65336917147129,
119.24892134236009,
39.65336917147129,
119.2489789574842,
39.65331248854436,
119.2489789574842,
39.65331248854436,
119.24887158231938,
39.65303717265414,
119.24887158231938,
39.65303717265414,
119.24881658604933,
39.6530472947275,
119.24881658604933,
39.6530472947275,
119.24892134234351,
39.653367147081234,
119.24892134234351,
39.653367147081234
]
},
{
"position":[
119.24487430252202,
39.65279185671612,
119.24488651036819,
39.652801293528235,
119.24488651036819,
39.652801293528235,
119.245138808467,
39.65271321804755,
119.245138808467,
39.65271321804755,
119.24506556145677,
39.652603122311696,
119.24506556145677,
39.652603122311696,
119.24482954078096,
39.65270378004788,
119.24482954078096,
39.65270378004788,
119.24488651036819,
39.652801293528235,
119.24488651036819,
39.652801293528235
]
},
{
"position":[
119.24092143352051,
39.652826644831755,
119.24092143352051,
39.652826644831755,
119.24092225184322,
39.65284087678658,
119.24092225184322,
39.65284087678658,
119.24092225184322,
39.65284087678658,
119.24092225184322,
39.65284087678658,
119.24098281500052,
39.65284954646352,
119.24098281500052,
39.65284954646352,
119.24098281500052,
39.65284954646352,
119.24098281500052,
39.65284954646352,
119.24108375436981,
39.652651881710014,
119.24108375436981,
39.652651881710014,
119.24108375436981,
39.652651881710014,
119.24108375436981,
39.652651881710014,
119.24104562216682,
39.6526397443303,
119.24104562216682,
39.6526397443303,
119.24104562216682,
39.6526397443303,
119.24104562216682,
39.6526397443303,
119.24092000883134,
39.65283047335347,
119.24092000883134,
39.65283047335347,
119.24092000883134,
39.65283047335347,
119.24092000883134,
39.65283047335347
]
},
{
"position":[
119.2382028109199,
39.65323327692153,
119.23821237376715,
39.65324066905404,
119.23821237376715,
39.65324066905404,
119.23818368551646,
39.6531778363541,
119.23818368551646,
39.6531778363541,
119.23850923870376,
39.65312761650999,
119.23850923870376,
39.65312761650999,
119.23850923938431,
39.6531842902849,
119.23850923938431,
39.6531842902849,
119.2382127836773,
39.65323603740885,
119.2382127836773,
39.65323603740885,
119.23821019023886,
39.653236066126055,
119.23821019023886,
39.653236066126055
]
},
{
"position":[
119.23162391065402,
39.65178142974484,
119.23164449094713,
39.65177347557819,
119.23164449094713,
39.65177347557819,
119.23192746820867,
39.65175756889774,
119.23192746820867,
39.65175756889774,
119.23190174352274,
39.65169791105138,
119.23190174352274,
39.65169791105138,
119.23160333095872,
39.65174165777527,
119.23160333095872,
39.65174165777527,
119.23163420082827,
39.651777452679426,
119.23163420082827,
39.651777452679426
]
},
{
"position":[
119.2264819723142,
39.657495028932836,
119.22648197222954,
39.65750243013243,
119.22648197222954,
39.65750243013243,
119.22656814973418,
39.65750983182595,
119.22656814973418,
39.65750983182595,
119.22657772953394,
39.65711016731934,
119.22657772953394,
39.65711016731934,
119.22648676498885,
39.65710276556733,
119.22648676498885,
39.65710276556733,
119.22649633512798,
39.657506130835564,
119.22649633512798,
39.657506130835564
]
},
{
"position":[
119.22510002738353,
39.65776197332018,
119.22510002738353,
39.65776197332018,
119.22512449729618,
39.657743059402506,
119.22512449729618,
39.657743059402506,
119.22558126774462,
39.657585443352716,
119.22558126774462,
39.657585443352716,
119.22533657025161,
39.65720716521562,
119.22533657025161,
39.65720716521562,
119.22481454968492,
39.65734586580416,
119.22481454968492,
39.65734586580416,
119.2251163406921,
39.657743059392004,
119.2251163406921,
39.657743059392004,
119.22511712705341,
39.657749845901165,
119.22511712705341,
39.657749845901165
]
},
{
"position":[
119.22166547792176,
39.65234110550673,
119.22165725033268,
39.652347465409534,
119.22165725033268,
39.652347465409534,
119.22206040244252,
39.65218846933669,
119.22194521888022,
39.651946789566594,
119.22149270253456,
39.652093064810224,
119.2216601108055,
39.652346385559625
]
},
{
"position":[
119.22304766741372,
39.65847786775555,
119.22304766741372,
39.65847786775555,
119.22304477514218,
39.6584555132565,
119.22304477514218,
39.6584555132565,
119.22304477514218,
39.6584555132565,
119.22304766760489,
39.65851587041074,
119.22304766760489,
39.65851587041074,
119.22304766760489,
39.65851587041074,
119.22284232487071,
39.658484574614086,
119.22284232487071,
39.658484574614086,
119.22284232487071,
39.658484574614086,
119.22284232475113,
39.65842645292739,
119.22284232475113,
39.65842645292739,
119.22284232475113,
39.65842645292739,
119.22304477514501,
39.65845774870738,
119.22304477514501,
39.65845774870738,
119.22304477514501,
39.65845774870738
]
},
{
"position":[
119.2206096642627,
39.656172672884914,
119.2207049752886,
39.656223322348715,
119.22059775030971,
39.65639829326299,
119.22050243909506,
39.65635685272073,
119.22059775039291,
39.65618648640676,
119.22061891480443,
39.65617711507367
]
},
{
"position":[
119.2216812385203,
39.658386943037875,
119.22169524610152,
39.6583862360524,
119.22169524610152,
39.6583862360524,
119.22169524610152,
39.6583862360524,
119.22206485615649,
39.65841462648015,
119.22206485615649,
39.65841462648015,
119.22206485615649,
39.65841462648015,
119.22206944717652,
39.658348971993476,
119.22206944717652,
39.658348971993476,
119.22206944717652,
39.658348971993476,
119.22164474044412,
39.65832767939424,
119.22164474044412,
39.65832767939424,
119.22164474044412,
39.65832767939424,
119.2216791761205,
39.65838623605738,
119.2216791761205,
39.65838623605738,
119.2216822812764,
39.658387058422356,
119.2216822812764,
39.658387058422356,
119.2216822812764,
39.658387058422356
]
},
{
"position":[
119.21575168108646,
39.66131112542493,
119.21574191585886,
39.66129788811537,
119.2159620100235,
39.661382945752905,
119.2159946173507,
39.661316791169455,
119.21579490239387,
39.661241184367036,
119.21574191582259,
39.66130103835157
]
},
{
"position":[
119.2077848418996,
39.67511437703314,
119.20781772887452,
39.675121785656316,
119.20781772887452,
39.675121785656316,
119.20795676912893,
39.67507654450807,
119.20795676912893,
39.67507654450807,
119.20783967519117,
39.674822072968915,
119.20783967519117,
39.674822072968915,
119.20773722493651,
39.67485600369814,
119.20773722493651,
39.67485600369814,
119.20782504682762,
39.6751217855597,
119.20782504682762,
39.6751217855597
]
}
]
}

View File

@ -1,395 +0,0 @@
{
"river" : [
{
"name": "青龙河",
"position": [
118.9911117696249,
40.20953617560951,
118.99064566075933,
40.20922346391975,
118.99044174134691,
40.20904477234905,
118.99017955936058,
40.20884374340235,
118.9899173778982,
40.208665050373206,
118.98950954019196,
40.208419345386,
118.98915996646201,
40.20821831277219,
118.98895605510734,
40.2080172839909,
118.9888104074708,
40.20783859266151,
118.98860648788356,
40.20777157848128,
118.98851909850829,
40.207682232206814,
118.98837344894088,
40.207548212141525,
118.98814039632623,
40.20750353194872,
118.98793648721478,
40.207324837481615,
118.98767430493005,
40.20725781934002,
118.98747039327579,
40.20712379578782,
118.98720821145822,
40.20705677648295,
118.98668383630036,
40.20703441536857,
118.98659645655763,
40.20687806019204,
118.98680041308924,
40.20656536928086,
118.98680043568079,
40.20634201152778,
118.98671304464999,
40.20629733546282,
118.98636347700078,
40.206163301992895,
118.98607216100935,
40.20614094972067,
118.98607217348375,
40.20602927074369,
118.98615959075163,
40.205828253728875,
118.98610133708885,
40.205738907134254,
118.9859848299593,
40.205560214085835,
118.98586832541234,
40.20535918470408,
118.98569355334615,
40.20520282323799,
118.98557704223636,
40.20506880102306,
118.98546052616037,
40.20497945001432,
118.98537314448622,
40.20486776507768,
118.98528575788016,
40.20480075173437,
118.98516923456614,
40.2047784077681,
118.98505271085449,
40.20475606365969,
118.98502357659085,
40.204800733091275,
118.98505269804382,
40.204912414034546,
118.98496528707477,
40.205046422248884,
118.98481961520423,
40.20515809045153,
118.98476136035147,
40.205091078986484,
118.98473223983409,
40.205001733852804,
118.98467399102665,
40.20489005094316,
118.98461573066962,
40.20486771085486,
118.98455747601979,
40.204800699179636,
118.98452835586653,
40.2047113540243,
118.98458663856515,
40.204555008020535,
118.98458665532921,
40.20442099345187,
118.98447012979818,
40.20442098453771,
118.98426620945041,
40.204420968505495,
118.98406228259361,
40.20446562378456,
118.98397487292716,
40.20457729567637,
118.98394573222667,
40.20464430081031,
118.98394574428738,
40.2045549575846,
118.98394575930907,
40.204443278479474,
118.9839457713624,
40.20435393520153,
118.98400405498114,
40.20419758920846,
118.98409147000527,
40.20404124586509,
118.98394582746738,
40.20392955458587,
118.98359627415333,
40.20375083779182,
118.98345062582378,
40.203683817210155,
118.98327582092918,
40.203795480938126,
118.9832175610423,
40.20377313977435,
118.98324669260897,
40.20377314236235,
118.9831301848783,
40.20363911617877,
118.98313021297368,
40.203438092758965,
118.98313022837245,
40.203326413102594,
118.98290567026153,
40.20314124772582,
118.98278915763352,
40.20305189283426,
118.9827017669419,
40.20302954838,
118.98255608724382,
40.20318588473016,
118.98249783736438,
40.20309653527411,
118.98243958758407,
40.20300718596651,
118.98241047255114,
40.20289550346401,
118.98238135099014,
40.20282849269108,
118.98223571341586,
40.20269446174385,
118.9821191877329,
40.20269444937117,
118.9820026586424,
40.20271677285188,
118.98197353381515,
40.20267209782806,
118.9818278831479,
40.20262740996336,
118.98165309367988,
40.20262739062095,
118.98162395146487,
40.202694395218,
118.98144915079949,
40.20276138371083,
118.9813326059514,
40.20287305050456,
118.98124518113573,
40.20305172869035,
118.981099513833,
40.20309638410331,
118.98101212902648,
40.20302936613,
118.98095386833128,
40.2030070232171,
118.9808956190084,
40.202917672072836,
118.98086652401712,
40.20269430790179,
118.98101219505058,
40.20262731698653,
118.98916889902937,
40.19909891507313,
118.98931453117865,
40.199299946699554,
118.98931452145786,
40.19952330704317,
118.98943103108881,
40.19961265611083,
118.9895766678068,
40.199724341849894,
118.98978056050167,
40.19985836503154,
118.98986793444341,
40.20014873441835,
118.98975142087447,
40.200148730216746,
118.98980966634393,
40.200439097974325,
118.98992617322679,
40.20061778796199,
118.99007181118732,
40.20075180718783,
118.99033396830791,
40.200751815443944,
118.99065437977983,
40.200841167310564,
118.99135346480637,
40.200841183525895,
118.99126607491091,
40.2010198667915,
118.99103304205636,
40.2011762111077,
118.99077087723343,
40.2013995606592,
118.99053784266785,
40.20153356791567,
118.9905378336139,
40.201801594163584,
118.99074172935012,
40.20200261864127,
118.99103301165907,
40.202270650886575,
118.99114952225135,
40.20247167206026,
118.99123690430174,
40.20267269240284,
118.99141167900551,
40.20271736617784,
118.99170296381722,
40.2030077296641,
118.99202338398221,
40.20305240427045,
118.9922272911962,
40.202851388940736,
118.99228555255378,
40.20260570138575,
118.9925477163485,
40.20229300904712,
118.9926933608997,
40.2022930099371,
118.99269335974971,
40.20247169263301,
118.99263509901137,
40.20280672169254,
118.99263509737519,
40.20300773922917,
118.99260596587153,
40.20327576187709,
118.99237292998879,
40.2034097715812,
118.99222728129136,
40.203566116891984,
118.99231466658463,
40.20376713460858,
118.99263508967894,
40.20390114816111,
118.99280986537099,
40.20410216570317,
118.99327593905991,
40.20430318329227,
118.99359636601783,
40.204437193853316,
118.99377114459,
40.20445952841112,
118.99377114185401,
40.20416917167107,
118.9939167883453,
40.20405749532096,
118.99420807740668,
40.203588455394,
118.99426633255707,
40.20336510320392,
118.99449936879049,
40.20349911159561,
118.994732405404,
40.20361078446239,
118.9948489229176,
40.20361078289237,
118.994761536621,
40.20370012468625,
118.99473240954904,
40.20381180075139,
118.99476154005266,
40.203856470753124,
118.99470328194643,
40.20390114166311,
118.99470328528858,
40.2040574877441,
118.9949071925114,
40.20407981994881,
118.99502371239379,
40.204146823602194,
118.99484893865566,
40.2043031721884,
118.99464503215708,
40.204347845072405,
118.9943828700744,
40.2046382044322,
118.99426635454101,
40.20486155669674,
118.99409157787014,
40.20504023910901,
118.99417896946926,
40.20517424907152,
118.99441200982032,
40.205196582098914,
118.99467418316745,
40.20535292507651,
118.9948780948288,
40.20539759268823,
118.99516939988807,
40.20553159920626,
118.99531505307898,
40.20559860207731,
118.99554809495028,
40.2055985979022,
118.99563548965031,
40.20571027196776,
118.99575201445295,
40.20579961023248,
118.99645115372294,
40.206000610461636,
118.9965094034826,
40.20577725695562,
118.99668416963081,
40.205464559706236,
118.99668418744413,
40.20548689709307,
118.99717941803456,
40.20535286311075,
118.99703377470412,
40.20559856659858,
118.9970337912344,
40.205866601109726,
118.99723771618271,
40.20588893019351,
118.99744163994507,
40.205888922705704,
118.99767469087628,
40.20582190500755,
118.99770382780598,
40.20588891266065,
118.99755817414193,
40.20597826337011,
118.99738339409713,
40.20615695966067,
118.9972377487895,
40.20638032744105,
118.99729601921352,
40.20646967033106,
118.99773300950903,
40.20655899937524,
118.99817000611543,
40.20669299960939,
118.99843220229168,
40.206737661182956,
118.99889832807854,
40.20678231276661,
118.99916052217007,
40.20678230015528,
118.99948099159514,
40.20687162937095,
118.99965579119434,
40.206893956833376,
119.00000536372643,
40.206692909963365,
119.00026756001915,
40.20669289495239,
119.00029670593361,
40.20680457548036,
119.00052978379308,
40.20691624402195,
119.00082111550248,
40.20691622632675,
119.00114158712488,
40.20696087912889,
119.00172424913468,
40.206916167285094,
119.00239431164258,
40.206849109367205,
119.00300611765697,
40.206826725653215,
119.0031211485243,
40.20695606055862
]
}
]
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,37 @@
<template>
<div>
<div>
级别{{ getSelectLabel(emergencyLevelList, info.emergencyLevel) }}
</div>
<div>属地{{ info.areaName }}</div>
<div>地址{{ info.address }}</div>
<div>
应急库类型{{ getSelectLabel(storageTypeList, info.storageType) }}
</div>
<div>管理单位{{ info.managementUnit }}</div>
</div>
</template>
<script setup>
import { ref } from "vue";
import { getDataDictionary } from "@/request/data_dictionary.js";
import { getSelectLabel } from "@/assets/js/utils.js";
defineProps({
info: Object,
});
const storageTypeList = ref([]);
const emergencyLevelList = ref([]);
const fnGetDictData = async () => {
const [storageTypeRes, emergencyLevelRes] = await Promise.all([
getDataDictionary({ parentId: "j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y" }),
getDataDictionary({ parentId: "870745cbf63985632dd43d9e56a62cb9" }),
]);
storageTypeList.value = storageTypeRes.dictionariesList;
emergencyLevelList.value = emergencyLevelRes.dictionariesList;
};
fnGetDictData();
</script>
<style scoped lang="scss"></style>

View File

@ -0,0 +1,69 @@
<template>
<div>
<div>属地{{ info.areaName }}</div>
<div>地形地貌{{ getSelectLabel(terrainList, info.terrain) }}</div>
<div>
灾害类型{{ getSelectLabel(disasterTypeList, info.disasterType) }}
</div>
<div>规模{{ getSelectLabel(scaleList, info.scale) }}</div>
<div>稳定性{{ getSelectLabel(stabilityList, info.stability) }}</div>
<div>户数{{ info.households }}</div>
<div>人口数{{ info.population }}</div>
<div>人口数{{ info.population }}</div>
<div>
险情等级{{
getSelectLabel(dangerousSituationList, info.dangerousSituation)
}}
</div>
<div>勘察情况{{ info.surveySituation }}</div>
<div>治理情况{{ info.governanceSituation }}</div>
<div>搬迁情况{{ info.relocationSituation }}</div>
<div>风险等级{{ getSelectLabel(riskLevelList, info.riskLevel) }}</div>
<div>规模与形态描述{{ info.scaleDescription }}</div>
</div>
</template>
<script setup>
import { ref } from "vue";
import { getDataDictionary } from "@/request/data_dictionary.js";
import { getSelectLabel } from "@/assets/js/utils.js";
defineProps({
info: Object,
});
const riskLevelList = [
{ bianma: "1", name: "低风险" },
{ bianma: "2", name: "中风险" },
{ bianma: "3", name: "高风险" },
];
const terrainList = ref([]);
const disasterTypeList = ref([]);
const scaleList = ref([]);
const stabilityList = ref([]);
const dangerousSituationList = ref([]);
const fnGetDictData = async () => {
const [
terrainRes,
disasterTypeRes,
scaleRes,
stabilityRes,
dangerousSituationRes,
] = await Promise.all([
getDataDictionary({ parentId: "b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q" }),
getDataDictionary({ parentId: "c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r" }),
getDataDictionary({ parentId: "7d3a1b2c8e4f5947a6b0c8d9e0f1a2b3" }),
getDataDictionary({ parentId: "a4f5c6d7e8291047b3a2b1c0d9e8f7a6" }),
getDataDictionary({ parentId: "c8e9f0a1b2c347d56e7f8a9b0c1d2e3f" }),
]);
terrainList.value = terrainRes.dictionariesList;
disasterTypeList.value = disasterTypeRes.dictionariesList;
scaleList.value = scaleRes.dictionariesList;
stabilityList.value = stabilityRes.dictionariesList;
dangerousSituationList.value = dangerousSituationRes.dictionariesList;
};
fnGetDictData();
</script>
<style scoped lang="scss"></style>

View File

@ -0,0 +1,81 @@
<template>
<div class="box" :style="{ width: info.dialogWidth + 'px' }">
<div class="box-wrap" :style="{ left: info.dialogLeft + 'px' }">
<div class="content">
<div class="main_title line-1">{{ info.name }}</div>
<tailings-pond v-if="info.pointType === 'tailings_pond'" :info="info" />
<torrential-flood-village
v-if="info.pointType === 'torrential_flood_village'"
:info="info"
/>
<emergency-reserve-warehouse
v-if="info.pointType === 'emergency_reserve_warehouse'"
:info="info"
/>
<geological-disaster
v-if="info.pointType === 'geological_disaster'"
:info="info"
/>
<reservoir v-if="info.pointType === 'reservoir'" :info="info" />
</div>
</div>
</div>
</template>
<script setup>
import TailingsPond from "./tailings_pond.vue";
import TorrentialFloodVillage from "./torrential_flood_village.vue";
import EmergencyReserveWarehouse from "./emergency_reserve_warehouse.vue";
import GeologicalDisaster from "./geological_disaster.vue";
import Reservoir from "./reservoir.vue";
defineProps({
info: Object,
close: Function,
enter: Function,
});
</script>
<style lang="scss" scoped>
.box {
position: relative;
bottom: 0;
left: 0;
.box-wrap {
position: absolute;
top: -40px;
width: 100%;
border-radius: 4px;
border: 1px solid #174e94;
background-color: rgba(0, 20, 52, 0.75);
animation: slide-in-elliptic-bottom-fwd 0.75s
cubic-bezier(0.25, 0.46, 0.45, 0.94) both;
.content {
padding: 20px;
line-height: 1.6;
font-size: 12px;
color: #f6f6f6;
.main_title {
font-size: 18px;
font-weight: bold;
color: #fff;
}
}
}
}
@keyframes slide-in-elliptic-bottom-fwd {
0% {
transform: translateY(600px) rotateX(30deg) scale(0);
transform-origin: 50% 100%;
opacity: 0;
}
100% {
transform: translateY(0) rotateX(0) scale(1);
transform-origin: 50% -1400px;
opacity: 1;
}
}
</style>

View File

@ -0,0 +1,34 @@
<template>
<div>
<div>类型{{ getSelectLabel(reservoirTypeList, info.reservoirType) }}</div>
<div>
工程规模{{ getSelectLabel(reservoirLevelList, info.reservoirLevel) }}
</div>
<div>极限库容万立方米{{ info.maxCapacity }}</div>
<div>当前库容万立方米{{ info.currentCapacity }}</div>
</div>
</template>
<script setup>
import { ref } from "vue";
import { getDataDictionary } from "@/request/data_dictionary.js";
import { getSelectLabel } from "@/assets/js/utils.js";
defineProps({
info: Object,
});
const reservoirTypeList = ref([]);
const reservoirLevelList = ref([]);
const fnGetDictData = async () => {
const [typeRes, levelRes] = await Promise.all([
getDataDictionary({ parentId: "848f91ce29ee1f2d078bc6ec69d440df" }),
getDataDictionary({ parentId: "a8b7c6d5e4f3g2h1i0j9k8l7m6n5o4p" }),
]);
reservoirTypeList.value = typeRes.dictionariesList;
reservoirLevelList.value = levelRes.dictionariesList;
};
fnGetDictData();
</script>
<style scoped lang="scss"></style>

View File

@ -0,0 +1,80 @@
<template>
<div>
<div>地址{{ info.address }}</div>
<div>属地{{ info.areaName }}</div>
<div>
运行状态{{ getSelectLabel(runningStatusList, info.runningStatus) }}
</div>
<div>
是否有生产经营主体{{
getSelectLabel(hasOrNoList, info.hasProductionEntity)
}}
</div>
<div>
是否为头顶库{{ getSelectLabel(yesOrNoList, info.isOverheadVault) }}
</div>
<div>
矿种{{ getSelectLabel(mineralSpeciesList, info.mineralSpecies) }}
</div>
<div>设计等别{{ getSelectLabel(designGradeList, info.designGrade) }}</div>
<div>
现状等别{{ getSelectLabel(currentGradeList, info.currentGrade) }}
</div>
<div>设计坝高({{ info.designDamHeight }}</div>
<div>现状坝高({{ info.currentDamHeight }}</div>
<div>设计库容{{ info.designStorageCapacity }}</div>
<div>现状库容{{ info.currentStorageCapacity }}</div>
<div>
是否在长江黄河及其主要支流其他重要河流岸线3公里范围内{{
getSelectLabel(yesOrNoList, info.isCloseToImportantRivers)
}}
</div>
<div>
安全生产许可证或安全设施设计批复编号{{ info.safetyProductionLicense }}
</div>
<div>生效日期{{ info.effectiveDate }}</div>
<div>失效日期{{ info.expiryDate }}</div>
<div>企业或管理单位主要负责人姓名{{ info.corpPrincipalName }}</div>
<div>企业或管理单位主要负责人职务{{ info.corpPrincipalPost }}</div>
<div>企业或管理单位主要负责人手机{{ info.corpPrincipalPhone }}</div>
</div>
</template>
<script setup>
import { getDataDictionary } from "@/request/data_dictionary.js";
import { ref } from "vue";
import { getSelectLabel } from "@/assets/js/utils.js";
defineProps({
info: Object,
});
const yesOrNoList = [
{ name: "是", bianma: "1" },
{ name: "否", bianma: "2" },
];
const hasOrNoList = [
{ name: "有", bianma: "1" },
{ name: "无", bianma: "2" },
];
const runningStatusList = ref([]);
const mineralSpeciesList = ref([]);
const designGradeList = ref([]);
const currentGradeList = ref([]);
const fnGetDictData = async () => {
const [runningStatusRes, mineralSpeciesRes, designGradeRes, currentGradeRes] =
await Promise.all([
getDataDictionary({ parentId: "b62cbaa90f9936bca50e48e8e853150a" }),
getDataDictionary({ parentId: "306f753002bc728163a3b14911b21d1d" }),
getDataDictionary({ parentId: "f32b9172ba95c27041c2289d03e6133f" }),
getDataDictionary({ parentId: "039bed1c0f108325bf800e4e4fe88b12" }),
getDataDictionary({ parentId: "c8e9f0a1b2c347d56e7f8a9b0c1d2e3f" }),
]);
runningStatusList.value = runningStatusRes.dictionariesList;
mineralSpeciesList.value = mineralSpeciesRes.dictionariesList;
designGradeList.value = designGradeRes.dictionariesList;
currentGradeList.value = currentGradeRes.dictionariesList;
};
fnGetDictData();
</script>
<style scoped lang="scss"></style>

View File

@ -0,0 +1,34 @@
<template>
<div>
<div>属地{{ info.areaName }}</div>
<div>县级预警负责人{{ info.countyWarningOfficer }}</div>
<div>县级预警负责人电话{{ info.countyWarningPhone }}</div>
<div>县级责任人{{ info.countyOfficer }}</div>
<div>县级责任人职务{{ info.countyOfficerPosition }}</div>
<div>县级责任人电话{{ info.countyOfficerPhone }}</div>
<div>乡级责任人{{ info.townshipOfficer }}</div>
<div>乡级责任人职务{{ info.townshipOfficerPosition }}</div>
<div>乡级责任人电话{{ info.townshipOfficerPhone }}</div>
<div>村级责任人{{ info.villageOfficer }}</div>
<div>村级责任人职务{{ info.villageOfficerPosition }}</div>
<div>村级责任人电话{{ info.villageOfficerPhone }}</div>
<div>监测员姓名{{ info.monitorName }}</div>
<div>监测员职务{{ info.monitorPosition }}</div>
<div>监测员电话{{ info.monitorPhone }}</div>
<div>预警员姓名{{ info.warningOfficerName }}</div>
<div>预警员职务{{ info.warningOfficerPosition }}</div>
<div>预警员电话{{ info.warningOfficerPhone }}</div>
<div>转移员姓名{{ info.transferOfficerName }}</div>
<div>转移员职务{{ info.transferOfficerPosition }}</div>
<div>转移员电话{{ info.transferOfficerPhone }}</div>
<div>备注{{ info.remarks }}</div>
</div>
</template>
<script setup>
defineProps({
info: Object,
});
</script>
<style scoped lang="scss"></style>

View File

@ -0,0 +1,170 @@
const Cesium = window.Cesium;
export class Coord {
viewer;
constructor(viewer) {
this.viewer = viewer;
}
cartesian2ToCartesian3(position) {
const { viewer } = this;
let cartesian3 = null;
if (viewer && position) {
const picks = this.viewer.scene.drillPick(position);
let isOn3dtiles = false;
for (const i in picks) {
// 为了防止别人用了Array.prototype扩展后出现bug
if (!Number.isNaN(Number(i))) {
const pick = picks[i];
isOn3dtiles =
(pick && pick.primitive instanceof Cesium.Cesium3DTileFeature) ||
(pick && pick.primitive instanceof Cesium.Cesium3DTileset) ||
(pick && pick.primitive instanceof Cesium.Model);
if (isOn3dtiles) {
viewer.scene.pick(position);
cartesian3 = viewer.scene.pickPosition(position);
if (cartesian3) {
const cartographic =
Cesium.Cartographic.fromCartesian(cartesian3);
if (cartographic.height < 0) cartographic.height = 0;
const lon = Cesium.CesiumMath.toDegrees(cartographic.longitude);
const lat = Cesium.CesiumMath.toDegrees(cartographic.latitude);
const height = cartographic.height;
cartesian3 = this.lnglatToCartesian3(lon, lat, height);
return cartesian3;
}
}
}
}
// 不在模型上
if (!isOn3dtiles) {
const isTerrain =
viewer.terrainProvider instanceof Cesium.EllipsoidTerrainProvider; // 是否存在地形
if (!isTerrain) {
// 无地形
const ray = viewer.scene.camera.getPickRay(position);
if (!ray) return null;
cartesian3 = viewer.scene.globe.pick(ray, viewer.scene);
return cartesian3;
} else {
cartesian3 = viewer.scene.camera.pickEllipsoid(
position,
viewer.scene.globe.ellipsoid
);
if (cartesian3) {
const position = this.cartesian3ToLngLat(cartesian3);
if (position && position.height < 0) {
cartesian3 = this.lnglatToCartesian3(
position.longitude,
position.latitude,
0.1
);
}
return cartesian3;
}
}
}
}
return cartesian3;
}
cartesian2ToLnglat(position) {
const cartesian3 = this.cartesian2ToCartesian3(position);
const lnglat = this.cartesian3ToLngLat(cartesian3);
return lnglat;
}
cartesian3ToCartesian2(cartesian3) {
return Cesium.SceneTransforms.wgs84ToWindowCoordinates(
this.viewer.scene,
cartesian3
);
}
computeViewerBounds() {
const extend = this.scene.camera.computeViewRectangle();
let bounds = [];
if (typeof extend === "undefined") {
const coordToLonlat = (viewer, x, y) => {
const { camera, scene } = viewer;
const d2 = new Cesium.Cartesian2(x, y);
const ellipsoid = scene.globe.ellipsoid;
// 2D转3D世界坐标
const d3 = camera.pickEllipsoid(d2, ellipsoid);
if (d3) {
// 3D世界坐标转弧度
const upperLeftCartographic =
scene.globe.ellipsoid.cartesianToCartographic(d3);
// 弧度转经纬度
const lon = Cesium.CesiumMath.toDegrees(
upperLeftCartographic.longitude
);
const lat = Cesium.CesiumMath.toDegrees(
upperLeftCartographic.latitude
);
return { lon, lat };
}
};
const canvas = this.scene.canvas;
const upperLeftLonLat = coordToLonlat(this, 0, 0);
const lowerRightLonLat = coordToLonlat(
this,
canvas.clientWidth,
canvas.clientHeight
);
if (
upperLeftLonLat?.lon &&
upperLeftLonLat?.lat &&
lowerRightLonLat?.lon &&
lowerRightLonLat?.lat
) {
bounds = [
upperLeftLonLat.lon,
upperLeftLonLat.lat,
lowerRightLonLat.lon,
lowerRightLonLat.lat,
];
}
} else {
// 三维视图
bounds = [
Cesium.CesiumMath.toDegrees(extend.west),
Cesium.CesiumMath.toDegrees(extend.south),
Cesium.CesiumMath.toDegrees(extend.east),
Cesium.CesiumMath.toDegrees(extend.north),
];
}
return bounds;
}
isVisibleByBounds(position) {
let visible = false;
const bounds = this.computeViewerBounds();
if (bounds) {
const lnglat = this.cartesian3ToLngLat(position);
if (lnglat) {
const lng = lnglat.longitude;
const lat = lnglat.latitude;
if (
lng >= bounds[0] &&
lng <= bounds[2] &&
lat >= bounds[1] &&
lat <= bounds[3]
)
visible = true;
}
}
return visible;
}
cartesian3ToLngLat(cartesian3) {
if (cartesian3) {
const radians =
this.viewer.scene.globe.ellipsoid.cartesianToCartographic(cartesian3);
const latitude = Cesium.CesiumMath.toDegrees(radians.latitude); // 弧度转度
const longitude = Cesium.CesiumMath.toDegrees(radians.longitude);
const height = radians.height;
return { longitude, latitude, height };
}
}
}

View File

@ -0,0 +1,88 @@
import { Coord } from "./Coord.js";
export class Popup {
viewer;
element;
options;
cameraMoveEnd;
moving = false;
postRender;
coord;
constructor(viewer, options) {
this.viewer = viewer;
this.coord = new Coord(viewer);
this.options = options;
this.element = this.options?.element;
this.addCameraLisener();
this.addMapListener();
}
setPosition(position) {
if (this.viewer && position) {
const screenPosition = this.coord.cartesian3ToCartesian2(position);
const { element } = this;
if (element && screenPosition) {
let x = screenPosition.x - element.clientWidth / 2;
let y = screenPosition.y - element.clientHeight - 15;
if (this.options?.popPosition) {
if (this.options?.popPosition === "leftbottom") {
x = screenPosition.x;
y = screenPosition.y - element.clientHeight;
} else if (this.options?.popPosition === "leftmiddle") {
x = screenPosition.x + 20;
y = screenPosition.y - element.clientHeight / 2;
}
}
element.style.display = "block";
element.style.left = `${x}px`;
element.style.top = `${y}px`;
}
if (this.options) this.options.position = position;
}
}
addCameraLisener() {
if (this.options?.visibleMaxCameraHeight) {
this.cameraMoveEnd = this.viewer?.camera.moveEnd.addEventListener(() => {
const h = this.viewer?.camera.getMagnitude();
const min = 6375000;
if (h && this.options?.visibleMaxCameraHeight && this.element) {
if (h - min > this.options.visibleMaxCameraHeight) this.hide();
else this.show();
}
});
}
}
hide() {
if (this.element) this.element.style.visibility = "hidden";
}
show() {
if (this.element) this.element.style.visibility = "visible";
}
destory() {
if (this.cameraMoveEnd) this.cameraMoveEnd();
if (this.postRender) this.postRender();
}
addMapListener() {
this.postRender = this.viewer?.scene.postRender.addEventListener(() => {
const position = this.options?.position;
if (position) {
if (this.options?.renderInViewBounds) {
if (this.coord.isVisibleByBounds(position)) {
if (!this.moving) this.setPosition(position);
if (this.element?.style.visibility !== "hidden") this.show();
} else {
this.hide();
}
} else {
if (!this.moving) this.setPosition(position);
}
}
});
}
}

View File

@ -0,0 +1,35 @@
import { h, render } from "vue";
import { Popup } from "./Popup.js";
export class PopupVue {
viewer;
element;
popup;
constructor(viewer, options) {
this.viewer = viewer;
this.init(options);
}
init(options) {
const { component, position, popupCommonOption, props } = options;
const div = document.createElement("div");
div.style.position = "absolute";
div.className = "popup";
this.element = div;
if (component) render(h(component, props), div);
this.viewer.container.appendChild(div);
this.popup = new Popup(this.viewer, {
...popupCommonOption,
element: div,
position,
});
}
remove() {
if (this.element) this.viewer.container.removeChild(this.element);
this.popup?.destory();
this.element = null;
}
}