| @@ -4,36 +4,79 @@ | |||||
| <van-nav-bar left-arrow fixed placeholder @click-left="goBack" > | <van-nav-bar left-arrow fixed placeholder @click-left="goBack" > | ||||
| <template #title> | <template #title> | ||||
| <div class="tb_main"> | <div class="tb_main"> | ||||
| <!-- B村<p><span class="tb">签字完成</span><span class="tb">异常挂起</span></p>--> | |||||
| 地图 | 地图 | ||||
| </div> | </div> | ||||
| </template> | </template> | ||||
| </van-nav-bar> | </van-nav-bar> | ||||
| <!-- <div class="tap_block"> | |||||
| <p @click="$router.push({path:'/contracted/village/contractorDetail'})">承包方</p> | |||||
| <p @click="$router.push({path:'/contracted/village/contractorFamily'})">家庭成员</p> | |||||
| <p @click="$router.push({path:'/contracted/village/contractorWord'})">承包合同</p> | |||||
| <p class="active">承包地</p> | |||||
| </div> --> | |||||
| <div class="mapBox" id="contractedLandMapBox"></div> | |||||
| <div class="mapBox"></div> | |||||
| <div class="contractedLandPopup"> | |||||
| <van-dialog v-model="open" title="承包地信息" :show-confirm-button="false" :show-cancel-button="true" cancel-button-text="关闭"> | |||||
| <van-form ref="landForm"> | |||||
| <van-field v-model="form.dkbm" label="地块代码:" :border="true" input-align="right" /> | |||||
| <van-field v-model="form.dkmc" label="地块名称:" :border="true" input-align="right" /> | |||||
| <van-field v-model="form.syqxz" label="所有权性质:" :border="true" input-align="right" /> | |||||
| <van-field v-model="form.dklb" label="地块类别:" :border="true" input-align="right" /> | |||||
| <van-field v-model="form.tdlylx" label="土地利用类型:" :border="true" input-align="right" /> | |||||
| <van-field v-model="form.dldj" label="地力等级:" :border="true" input-align="right" /> | |||||
| <van-field v-model="form.tdyt" label="土地用途:" :border="true" input-align="right" /> | |||||
| <van-field v-model="form.sfjbnt" label="基本农田:" :border="true" input-align="right" /> | |||||
| <van-field v-model="form.scmjm" label="实测面积(亩):" :border="true" input-align="right" /> | |||||
| <van-field v-model="form.zjrxm" label="指界人姓名:" :border="true" input-align="right" /> | |||||
| <van-field v-model="form.dkdz" label="地块东至:" :border="true" input-align="right" /> | |||||
| <van-field v-model="form.dkxz" label="地块西至:" :border="true" input-align="right" /> | |||||
| <van-field v-model="form.dknz" label="地块南至:" :border="true" input-align="right" /> | |||||
| <van-field v-model="form.dkbz" label="地块北至:" :border="true" input-align="right" /> | |||||
| <van-field v-model="form.dkbzxx" label="地块备注信息:" :border="true" input-align="right" /> | |||||
| </van-form> | |||||
| </van-dialog> | |||||
| </div> | |||||
| </div> | </div> | ||||
| </template> | </template> | ||||
| <script> | <script> | ||||
| import Cookies from "js-cookie"; | import Cookies from "js-cookie"; | ||||
| import { getConfigKey } from "@/api/system/config"; | |||||
| import { listCbdkxx } from "@/api/contracted/cbdkxx"; | |||||
| import { getDept } from "@/api/contracted"; | |||||
| export default { | export default { | ||||
| name: "contractedVillageContractor", | name: "contractedVillageContractor", | ||||
| data() { | data() { | ||||
| return { | return { | ||||
| form: {}, // 承包地信息表单 | |||||
| open: false, // 是否显示承包地信息弹出层 | |||||
| map: "", // 地图 | |||||
| mapGeoServerUrl: "", // geoserver地址 | |||||
| mapCenterLocation: [], // 地图中心坐标 | |||||
| landLayerName: "", // 地块图层名称 | |||||
| }; | }; | ||||
| }, | }, | ||||
| created() { | created() { | ||||
| // 获取geoserver的地址 | |||||
| this.getGeoServerUrl(); | |||||
| // 获取地块图层名称 | |||||
| this.getLandLayerName(); | |||||
| }, | |||||
| mounted() { | |||||
| // 获取承包地块列表 | |||||
| this.getContractedLandList(); | |||||
| }, | }, | ||||
| methods: { | methods: { | ||||
| // 获取geoserver的地址 | |||||
| getGeoServerUrl() { | |||||
| getConfigKey("system.geoServer.url").then(response => { | |||||
| this.mapGeoServerUrl = response.msg; | |||||
| }); | |||||
| }, | |||||
| // 获取地块图层名称 | |||||
| getLandLayerName() { | |||||
| getConfigKey("geoserver.layer.dk").then(response => { | |||||
| this.landLayerName = response.msg; | |||||
| }); | |||||
| }, | |||||
| goBack() { | goBack() { | ||||
| this.$router.push({ | this.$router.push({ | ||||
| name: 'contractedVillageContractorLand', | name: 'contractedVillageContractorLand', | ||||
| @@ -45,6 +88,133 @@ | |||||
| } | } | ||||
| }); | }); | ||||
| }, | }, | ||||
| getContractedLandList() { | |||||
| listCbdkxx({cbfbm: this.$route.params.cbfbm, translate_dict: 1}).then(response => { | |||||
| const landList = response.rows; | |||||
| this.map = ""; | |||||
| setTimeout(() => { | |||||
| this.drawMap(landList); | |||||
| }, 500); | |||||
| }); | |||||
| }, | |||||
| drawMap(landList) { | |||||
| getDept(this.$route.params.deptId).then(response => { | |||||
| let dept = response.data; | |||||
| if (dept.lng && dept.lat) { | |||||
| this.mapCenterLocation = [dept.lng, dept.lat]; | |||||
| } else { | |||||
| this.mapCenterLocation = [116.391458, 39.902377]; | |||||
| } | |||||
| document.getElementById("contractedLandMapBox").innerHTML = ""; | |||||
| // 定义地图投影 | |||||
| let projection = new ol.proj.Projection({ | |||||
| code: "EPSG:3857", | |||||
| units: "degrees", | |||||
| }); | |||||
| // 定义地图图层 | |||||
| let aerial = new ol.layer.Tile({ | |||||
| source: new ol.source.XYZ({ | |||||
| url: "http://t{0-7}.tianditu.com/img_w/wmts?" + | |||||
| "SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles" + | |||||
| "&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=cc4aba6e967096098249efa069733067", | |||||
| }), | |||||
| isGroup: true, | |||||
| name: "卫星影像图", | |||||
| }); | |||||
| let yingxzi = new ol.layer.Tile({ | |||||
| source: new ol.source.XYZ({ | |||||
| url: "http://t{0-7}.tianditu.com/DataServer?T=cia_w&x={x}&y={y}&l={z}&tk=cc4aba6e967096098249efa069733067", | |||||
| }), | |||||
| isGroup: true, | |||||
| name: "天地图文字标注--卫星影像图", | |||||
| }); | |||||
| //加载地图 | |||||
| this.map = new ol.Map({ | |||||
| controls: ol.control.defaults({attribution: false, zoom: false, rotate: false}).extend([]), | |||||
| layers: [aerial, yingxzi], | |||||
| projection: projection, | |||||
| target: "contractedLandMapBox", | |||||
| view: new ol.View({ | |||||
| center: ol.proj.fromLonLat(this.mapCenterLocation), // 地图中心坐标 | |||||
| zoom: 17, | |||||
| minZoom: 1, //地图缩小限制 | |||||
| maxZoom: 18, //地图放大限制 | |||||
| // extent: [13481224.75161,5667110.83528,13811063.06278,5880284.11416] | |||||
| }), | |||||
| }); | |||||
| // 添加全部的地块图层 | |||||
| this.addLandLayer(); | |||||
| // 添加承包地块图层 | |||||
| this.addContractedLandLayer(landList); | |||||
| // 地图点击事件 | |||||
| this.map.on("click", (evt) => { | |||||
| let feature = this.map.forEachFeatureAtPixel( | |||||
| evt.pixel, | |||||
| (feature) => feature | |||||
| ); | |||||
| if (feature) { | |||||
| // 镇级:加载村级坐标点 | |||||
| if (feature.get('level') === 'contractedLand') { | |||||
| this.form = feature.get('landInfo'); | |||||
| this.open = true; | |||||
| } | |||||
| } | |||||
| }); | |||||
| }); | |||||
| }, | |||||
| // 添加全部的地块图层 | |||||
| addLandLayer() { | |||||
| const landLayer = new ol.layer.Image({ | |||||
| source: new ol.source.ImageWMS({ | |||||
| url: this.mapGeoServerUrl + '/wms', | |||||
| params: { | |||||
| LAYERS: this.landLayerName, | |||||
| cql_filter: "dept_id = '" + this.$route.params.deptId + "'", | |||||
| SRID: 3857, | |||||
| } | |||||
| }), | |||||
| name: 'landLayer' | |||||
| }); | |||||
| this.map.getLayers().insertAt(3, landLayer); | |||||
| // this.map.addLayer(landLayer); | |||||
| }, | |||||
| // 添加承包地块图层 | |||||
| addContractedLandLayer(landList) { | |||||
| if (landList.length === 0) { | |||||
| return ; | |||||
| } | |||||
| let features = []; | |||||
| landList.forEach(item => { | |||||
| if (item.theGeomJson) { | |||||
| const iconFeature = new ol.Feature({ | |||||
| geometry: new ol.geom.MultiPolygon(JSON.parse(item.theGeomJson).coordinates), | |||||
| level: 'contractedLand', | |||||
| landInfo: item | |||||
| }); | |||||
| features.push(iconFeature); | |||||
| } | |||||
| }); | |||||
| const contractedLandLayer = new ol.layer.Vector({ | |||||
| source: new ol.source.Vector({ | |||||
| features: features | |||||
| }), | |||||
| name: 'contractedLandLayer', | |||||
| style: new ol.style.Style({ | |||||
| fill: new ol.style.Fill({ | |||||
| color: "rgba(255, 84, 87, 0.5)" | |||||
| }), | |||||
| stroke: new ol.style.Stroke({ | |||||
| color: "#ff5457", | |||||
| width: 3 | |||||
| }) | |||||
| }) | |||||
| }); | |||||
| this.map.getLayers().insertAt(4, contractedLandLayer); | |||||
| this.map.getView().fit(contractedLandLayer.getSource().getExtent()); | |||||
| // this.map.getView().setZoom(15); | |||||
| } | |||||
| }, | }, | ||||
| }; | }; | ||||
| </script> | </script> | ||||
| @@ -82,6 +252,15 @@ | |||||
| overflow: initial; | overflow: initial; | ||||
| } | } | ||||
| /deep/ .contractedLandPopup .van-dialog { | |||||
| height: 85%; | |||||
| overflow-y: auto; | |||||
| } | |||||
| /deep/ .contractedLandPopup .van-field__label { | |||||
| width: 7em; | |||||
| } | |||||
| .tb_main{ | .tb_main{ | ||||
| position: relative; | position: relative; | ||||
| p{ | p{ | ||||