feat: 新增2D地图以及地图点位

This commit is contained in:
严妍 2023-05-19 16:10:07 +08:00
parent 728a3f0f24
commit b474419566
5 changed files with 199 additions and 58 deletions

View File

@ -30,3 +30,7 @@ export const getRealNameSystem = () => {
export const getEngineeringAll = () => {
return http.get<ResponseSame<ScreenResponse.EngineeringAllResponse>>(BASEURL + `/gov/api/index/engineeringStat`);
};
//顶部查询工程统计信息
export const getMapProject = () => {
return http.get<ResponseSame<ScreenResponse.mapProjectResponse>>(BASEURL + `/gov/api/index/engineeringList`);
};

View File

@ -154,4 +154,44 @@ export declare namespace ScreenResponse {
finish: number; //今年竣工工程
important: number; //重点工程
}
interface mapProjectResponse {
id: string;
project_sn: string;
engineering_sn: string;
engineering_name: string; //工程名称
engineering_code: string;
engineering_type: number;
engineering_use: number;
engineering_cost: string; //工程造价(万元)
engineering_area: string; //工程总面积(㎡)
engineering_length: string;
is_important: boolean;
longitude: string;
latitude: string;
province: string; //省
city: string; //市
district: string; //区
address: string; //详细地址
license_key: string;
license_create_time: string;
safety_supervision: string;
safety_supervision_person: string;
safety_supervision_code: string;
safety_supervision_state: string;
safety_supervision_plan: string;
quality_supervision: string;
quality_supervision_person: string;
quality_supervision_code: string;
quality_supervision_state: string;
quality_supervision_plan: string;
start_time: string;
end_time: string;
create_time: string;
examine_state: number;
reject_reason: string;
state: number; //工程状态(1:未开工;2:在建;3:在建.普通停工;4:在建.处罚停 工;5:在建.完工;6:待竣工;7:竣工)
update_time: string;
ai_alarm_stat: string;
enterprise_name: string; //建设单位
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

View File

@ -4,19 +4,39 @@
</div>
</template>
<script setup>
<script lang="ts" setup>
import AMapLoader from "@amap/amap-jsapi-loader";
/*Vue3使,Vue3shallowRef(使shallowRef,
因为在Vue3中所使用的Proxy拦截操作会改变JSAPI原生对象,所以此处需要区别Vue2使用方式对地图对象进行非深度监听,
否则会出现问题,建议JSAPI相关对象采用非响应式的普通对象来存储)*/
import { shallowRef } from "@vue/reactivity";
import { ref } from "vue";
// import { shallowRef } from "@vue/reactivity";
import { ref, onMounted } from "vue";
import { getMapProject } from "@/api/modules/largeSreen";
onMounted(() => {
getProjectList();
});
// const map = shallowRef(null);
const path = ref([]);
const current_position = ref([]);
const projectStatusEnum = ref({
1: "开工前准备",
2: "在建工程",
3: "停工工程",
4: "完工待验收",
5: "已验收(安全评价)",
6: "已验收未备案",
7: "已竣工验收备案"
});
const mapProjectList = ref([]);
const getProjectList = async () => {
const { result } = await getMapProject();
mapProjectList.value = result;
console.log(mapProjectList.value, "aaa");
initMap();
};
function initMap() {
const initMap = () => {
window._AMapSecurityConfig = {
securityJsCode: "6caf6429e4b98cf7f39db9bf7014a78b"
};
@ -29,8 +49,8 @@ function initMap() {
const map = new AMap.Map("container", {
//id
viewMode: "3D", //3D
zoom: 13, //
center: [104.065735, 30.659462], //
zoom: 10, //
center: [114.085947, 22.547], //
mapStyle: "amap://styles/67570a93d67b07a02ee522a2c1180be4"
});
//
@ -51,62 +71,139 @@ function initMap() {
mouseTool.measureArea(); //
}
);
//
map.on("click", e => {
// lng ==> lat =>
current_position.value = [e.lnglat.lng, e.lnglat.lat];
path.value.push([e.lnglat.lng, e.lnglat.lat]);
// addMarker();
// addPolyLine();
});
//
// ()
function addMarker() {
const marker = new AMap.Marker({
icon: "//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png",
position: current_position.value, // ,
// offset
offset: new AMap.Pixel(-26, -54)
});
console.log("我是经纬度", current_position.value);
marker.setMap(map);
}
// position
/*const marker = new AMap.Marker({
icon: "//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png",
position: [113.808299,34.791787],
// offset
offset: new AMap.Pixel(-26, -54),
});
marker.setMap(map);*/
//
// map.on("click", e => {
// // lng ==> lat =>
// current_position.value = [e.lnglat.lng, e.lnglat.lat];
// path.value.push([e.lnglat.lng, e.lnglat.lat]);
// // addMarker();
// // addPolyLine();
// });
// //
// // ()
// function addMarker() {
// const marker = new AMap.Marker({
// icon: "//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png",
// position: current_position.value, // ,
// // offset
// offset: new AMap.Pixel(-26, -54)
// });
// console.log("", current_position.value);
// marker.setMap(map);
// }
// 线
function addPolyLine() {
const polyline = new AMap.Polyline({
path: path.value,
isOutline: true,
outlineColor: "#ffeeff",
borderWeight: 1,
strokeColor: "#3366FF",
strokeOpacity: 0.6,
strokeWeight: 5,
// 线 'dashed'
strokeStyle: "solid",
// strokeStyledashed
// strokeDasharray: [10, 5],
lineJoin: "round",
lineCap: "round",
zIndex: 50
// position
mapProjectList.value.forEach((item, index, array) => {
const marker = new AMap.Marker({
icon: "/src/assets/images/screenImg/mapImg/dian.png",
position: [`${item.longitude}`, `${item.latitude}`],
// offset
offset: new AMap.Pixel(-26, -24)
});
map.add([polyline]);
}
//
const infoWindow = new window.AMap.InfoWindow({
offset: new window.AMap.Pixel(0, -31)
});
// // -
// const postponeImage = require("@/assets/images/screenImg/mapImg/iconPostpone.png");
// // -
// const shutdownRectificationImage = require("@/assets/images/screenImg/mapImg/iconShutdownRectification.png");
// // -
// const stagnateImage = require("@/assets/images/screenImg/mapImg/iconStagnate.png");
// // -
// const completedImage = require("@/assets/images/screenImg/mapImg/iconCompleted.png");
// // -
// const normalConstruction = require("@/assets/images/screenImg/mapImg/iconNormalConstruction.png");
// const statusIcons = {
// projectDelay: createIcon(postponeImage), //
// suspensionandrectification: createIcon(shutdownRectificationImage), //
// projectStagnation: createIcon(stagnateImage), //
// completionAcceptance: createIcon(completedImage), //
// normalConstruction: createIcon(normalConstruction) //
// };
// /**
// *
// * @param {string} image icon
// */
// function createIcon(image) {
// return new window.AMap.Icon({
// size: new window.AMap.Size(28, 40), //
// image, //
// imageSize: new window.AMap.Size(28, 40), //
// imageOffset: new window.AMap.Pixel(0, 0) //
// });
// }
marker.content = `<div class="info-window" style="font-size: 14px">
<div class="info">
<span class="label" style="font-weight: 600">项目名称</span>
<span class="value">${item.engineering_name}</span>
</div>
<div class="info">
<span class="label" style="font-weight: 600">项目状态</span>
<span class="value">${projectStatusEnum.value[item.state] ? projectStatusEnum.value[item.state] : "暂无"}</span>
</div>
<div class="info">
<span class="label" style="font-weight: 600">项目造价</span>
<span class="value">${item.engineering_cost || 0}万元</span>
</div>
<div class="info">
<span class="label" style="font-weight: 600">工程面积</span>
<span class="value">${item.engineering_area || 0}</span>
</div>
<div class="info">
<span class="label" style="font-weight: 600">建设单位</span>
<span class="value">${item.enterprise_name || "暂无"}</span>
</div>
<span class="info">
<span class="label" style="font-weight: 600">项目地址</span>
<span class="value">${item.province + item.city + item.district + item.address || "暂无"}</span>
</div>
</div>`;
marker.on("mousemove", markerMousemove);
//
marker.on("mouseout", markerMouseout);
// df
function markerMousemove(e) {
infoWindow.setContent(e.target.content);
infoWindow.open(map, e.target.getPosition());
}
//
function markerMouseout(e) {
infoWindow.setContent(e.target.content);
infoWindow.close(map, e.target.getPosition());
}
marker.setMap(map);
});
//
// // 线
// function addPolyLine() {
// const polyline = new AMap.Polyline({
// path: path.value,
// isOutline: true,
// outlineColor: "#ffeeff",
// borderWeight: 1,
// strokeColor: "#3366FF",
// strokeOpacity: 0.6,
// strokeWeight: 5,
// // 线 'dashed'
// strokeStyle: "solid",
// // strokeStyledashed
// // strokeDasharray: [10, 5],
// lineJoin: "round",
// lineCap: "round",
// zIndex: 50
// });
// map.add([polyline]);
// }
})
.catch(e => {
console.log(e);
});
}
initMap();
};
</script>
<style>

View File

@ -1,7 +1,7 @@
<template>
<div class="orderBgc">
<Map3D class="mapStyle"></Map3D>
<!-- <Map2D class="mapStyle"></Map2D> -->
<!-- <Map3D class="mapStyle"></Map3D> -->
<Map2D class="mapStyle"></Map2D>
<headerScreen class="topHeader"></headerScreen>
<div class="bottomContent">
<leftScreen class="leftScreen"></leftScreen>