123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280 |
- <!--
- * @Description:
- * @Author: wangcc
- * @Date: 2022-10-19 09:32:46
- * @LastEditors: wangcc
- * @LastEditTime: 2022-11-11 14:01:26
- * @FilePath: \castgroup_bigscreen\src\components\amapPow.vue
- * @Copyright: Copyright (c) 2016~2022 by wangcc, All Rights Reserved.
- -->
- <template>
- <div class="map-wrap">
- <div id="container" tabindex="0"></div>
- <div id="mask"></div>
- <div class="yun-wrap">
- <img class="yun yun1" src="../assets/img/云1.png" alt />
- </div>
- <div class="yun-wrap">
- <img class="yun yun2" src="../assets/img/云2.png" alt />
- </div>
- <div class="yun-wrap">
- <img class="yun yun3" src="../assets/img/云3.png" alt />
- </div>
- <el-dialog title="查看图片" :modal="false" :visible.sync="imgDialogVisible" width="40%">
- <img width="100%" style="height:580px" :src="dialogImageUrl" alt />
- </el-dialog>
- </div>
- </template>
- <script>
- import AMapLoader from '@amap/amap-jsapi-loader';
- import { mapMutations, mapState, mapGetters } from 'vuex';
- import {
- smallClassMap,
- smallClassMapFile,
- rightScrollData,
- forestSample,
- alarmDataApi,
- financeBasePlant,
- financeBaseDetail,
- farmInfo,
- smallClassDetail,
- treePlant,
- projectList,
- getProjectIcon
- } from '@/service/index.js';
- import axios from 'axios';
- export default {
- name: 'Mapview',
- data() {
- return {
- imgDialogVisible: false,
- dialogImageUrl: null,
- AMap: null,
- map: null,
- lngLat: [106.628201, 26.646694],
- adName: '贵州省',
- mapLevel: 'province',
- adcode: '贵州省',
- parentId: '520000',
- province: '',
- zoom: 8,
- districtExplorer: null,
- tipMarker: null,
- $tipMarkerContent: null,
- currentAreaNode: null,
- cityMarkerArr: [],
- eventMarker: null,
- baseMarker: null,
- streetMarkerArr: [],
- leftPage: 'forest',
- putPolygonData: [],
- //乡镇边界
- townPolygons: [],
- // 基地详情
- baseMarkers: [],
- // 小班详情
- smallMarkers: [],
- // 时间详情
- eventMarkers: [],
- // 林场
- treesMarkerArr: [],
- // 小班边界
- smallClassMapArr: [],
- // 作物
- economicsArr: [],
- // 基地定位
- baseMarkerArr: [],
- // 时间信息
- eventMarkersArr: [],
- // 样地、小班
- forestMarkerArr: [],
- // 样地号
- smallClassNArr: [],
- // 森林资源小班边界
- smallClassPolygonArr: [],
- // 林木结构小班边界
- treesPolygonArr: [],
- // 项目列表
- projectMarkerArr: [],
- treeCompMarkers: [],
- townPolygonArr: [],
- economicsArr: [],
- selectData: {},
- districtData: {},
- streetData: {},
- // 项目小班数
- projectSmallClassArr: [],
- // 项目小班边界
- smallClassProject: [],
- // 项目小班红点转边界图
- projectPolygonArr: [],
- projectIcon:
- 'http://miniores.hw.hongweisoft.com/mintou/1667460231789_a06fed1519c5e3d206e4ab9148d658e5.png'
- // projectIcon: ''
- };
- },
- watch: {
- '$store.state.addr.parentId': {
- handler(val) {
- // 加载小班边界
- // this.getSmallClass();
- this.parentId = val;
- if (this.projectSmallClassArr) {
- this.map.remove(this.projectSmallClassArr);
- }
- if (this.$store.state.addr.mapLevel == 'street') {
- this.parentId = val.substring(0, 6);
- if (this.map) {
- this.switch2AreaNode(
- this.parentId,
- this.$store.state.addr.mapLevel,
- this.$store.state.addr.selectCity,
- this.leftPage
- );
- }
- }
- if (this.$store.state.addr.mapLevel != 'street') {
- this.selectData = this.$store.state.addr.selectCity;
- this.districtData = this.$store.state.addr.selectDistrict;
- this.streetData = this.$store.state.addr.selectStreet;
- if (this.map) {
- this.switch2AreaNode(
- this.parentId,
- this.$store.state.addr.mapLevel,
- this.$store.state.addr.selectCity,
- this.leftPage
- );
- }
- if (this.townPolygonArr) {
- this.map.remove(this.townPolygonArr);
- }
- if (
- this.polygon ||
- this.streetMarkerArr ||
- this.townPolygons ||
- this.forestMarkerArr ||
- this.smallClassNArr ||
- this.forestMarkerArr ||
- this.townPolygonArr ||
- this.smallClassPolygonArr
- ) {
- this.map.remove(this.polygon);
- this.map.remove(this.streetMarkerArr);
- this.map.remove(this.townPolygons);
- this.map.remove(this.forestMarkerArr);
- this.map.remove(this.smallClassNArr);
- this.map.remove(this.forestMarkerArr);
- this.map.remove(this.townPolygonArr);
- this.map.remove(this.smallClassPolygonArr);
- this.townPolygons = [];
- }
- }
- }
- },
- '$store.state.addr.selectStreet'(val) {
- if (val.label && val.value && val.areaId) {
- this.map.remove(this.polygon);
- let labelTown = val.label;
- this.map.setCity(labelTown);
- }
- },
- '$store.state.addr.page': {
- handler(val) {
- this.leftPage = val;
- if (!this.parentId) {
- this.parentId = '520000';
- this.$store.state.addr.parentName = '贵州省';
- }
- if (this.parentId) {
- if (this.$store.state.addr.mapLevel == 'street') {
- // this.getSmallClass(val);
- }
- }
- this.mapPolygon();
- if (val == 'forest' || val == 'treeSpecies') {
- this.getProjectList();
- } else {
- this.map.remove(this.projectSmallClassArr);
- }
- if (val != 'forest') {
- this.map.remove(this.forestMarkerArr);
- this.map.remove(this.smallClassNArr);
- this.map.remove(this.smallClassPolygonArr);
- this.map.remove(this.projectMarkerArr);
- if (this.projectPolygonArr) {
- this.map.remove(this.projectPolygonArr);
- }
- if (this.smallMarkers) {
- this.map.remove(this.smallMarkers);
- }
- }
- if (val != 'treeSpecies') {
- this.map.remove(this.forestMarkerArr);
- this.map.remove(this.treesPolygonArr);
- this.map.remove(this.projectMarkerArr);
- if (this.treeCompMarkers) {
- this.map.remove(this.treeCompMarkers);
- }
- if (this.treesPolygonArr) {
- this.map.remove(this.treesPolygonArr);
- }
- }
- if (val != 'economics') {
- this.map.remove(this.economicsArr);
- this.map.remove(this.baseMarkerArr);
- }
- if (val != 'event') {
- this.map.remove(this.eventMarkersArr);
- if (this.eventMarkers) {
- this.map.remove(this.eventMarkers);
- }
- }
- }
- },
- '$store.state.addr.mapLevel': {
- handler(val) {
- if (val === 'street') {
- // this.getSmallClass();
- }
- }
- },
- '$store.state.addr.smallClassSearch': {
- deep: true,
- immediate: true,
- handler: function (val, oldVal) {
- let _this = this;
- if (val) {
- if (val.longitude && val.latitude && !val.name) {
- this.map.remove(this.polygon);
- if (_this.smallMarkers) {
- _this.map.remove(_this.smallMarkers);
- }
- if (this.smallClassProject) {
- this.map.remove(this.smallClassProject);
- }
- this.setMapLabel(val);
- if (
- this.$store.state.addr.mapLevel == 'province' ||
- this.$store.state.addr.mapLevel == 'city' ||(this.$store.state.addr.mapLevel == 'district'&& this.$store.state.addr.selectCity.prop == '1')
- ) {
- if (val.countyCode) {
- // this.switch2AreaNode(val.countyCode.substring(0, 6));
- let selectCity = '';
- switch (val.cityName) {
- case '黔西南州':
- selectCity = '黔西南布依族苗族自治州';
- break;
- case '黔东南州':
- selectCity = '黔东南苗族侗族自治州';
- break;
- case '黔南州':
- selectCity = '黔南布依族苗族自治州';
- break;
- }
- this.$store.dispatch('searchArea', {
- parentId: val.cityCode.substring(0, 6),
- name: selectCity,
- mapLevel: 'city'
- });
- if (val.cityCode) {
- this.changeSelectCity({
- value: val.cityCode,
- label: selectCity,
- areaId: val.cityId,
- prop: '2'
- });
- }
- if (val.countyCode) {
- this.changeSelectDistrict({
- value: val.countyCode,
- label: val.countyName,
- areaId: val.countyId,
- prop: '2'
- });
- }
- }
- } else {
- this.switch2AreaNode(val.countyCode.substring(0, 6));
- }
- }
- if (val.mapInfo) {
- let polyData = JSON.parse(val.mapInfo);
- let smallClassPolygon = new AMap.Polygon({
- map: _this.map,
- path: polyData.features[0].geometry.coordinates,
- strokeOpacity: 1,
- fillOpacity: 0.5,
- strokeColor: 'red',
- strokeWeight: 2,
- zIndex: 999,
- cursor: 'pointer',
- fillColor: 'red'
- });
- this.smallClassProject.push(smallClassPolygon);
- }
- }
- }
- },
- '$store.state.addr.eventData': {
- deep: true,
- immediate: true,
- handler: function (val, oldVal) {
- let _this = this;
- if (val) {
- if (val.longitude && val.latitude && !val.name) {
- if (_this.eventMarkers) {
- _this.map.remove(_this.eventMarkers);
- }
- let lanLatArr = [val.longitude, val.latitude];
- let baseIcon = '';
- let fireIcon = require('@/assets/img/fire.png');
- let cutTreeIcon = require('@/assets/img/cutTree.png');
- let insectpestIcon = require('@/assets/img/insectpest.png');
- let stealIcon = require('@/assets/img/steal.png');
- if (val.eventType == 1) {
- val.eventContLabel = '火灾';
- baseIcon = fireIcon;
- } else if (val.eventType == 2) {
- val.eventContLabel = '砍伐';
- baseIcon = cutTreeIcon;
- } else if (val.eventType == 3) {
- val.eventContLabel = '病虫害';
- baseIcon = insectpestIcon;
- } else if (val.eventType == 4) {
- val.eventContLabel = '偷盗林木';
- baseIcon = stealIcon;
- }
- let baseIconData = new AMap.Icon({
- size: new AMap.Size(35, 35), // 图标尺寸
- image: baseIcon,
- imageSize: new AMap.Size(35, 35) // 根据所设置的大小拉伸或压缩图片
- });
- let treeSmallLabel =
- "<div class='info-small'>" +
- "<h5 class='marker-title'>历史事件" +
- '</h5>' +
- "<div class='marker-content'>" +
- '<p>事件类型:' +
- val.eventContLabel +
- '</p>' +
- '<p>上报时间:' +
- val.createTime +
- '</p>' +
- '<p>上报人:' +
- val.createBy +
- '</p>' +
- '<p>位置:' +
- val.cityName +
- val.countyName +
- val.townName +
- val.villageName +
- '</p>' +
- '</div>' +
- '</div>';
- this.eventMarker = new AMap.Marker({
- map: this.map,
- position: lanLatArr,
- icon: baseIconData,
- anchor: 'bottom-center',
- offset: new AMap.Pixel(0, 0),
- zIndex: 9999
- });
- this.eventMarker.setLabel({
- direction: 'top',
- offset: new AMap.Pixel(-10, 0), //设置文本标注偏移量
- content: treeSmallLabel //设置文本标注内容
- });
- this.eventMarkers.push(this.eventMarker);
- // this.map.add(this.eventMarker);
- _this.eventMarker.on('click', (e) => {
- if (_this.eventMarkers) {
- _this.map.remove(_this.eventMarkers);
- }
- });
- } else if (val.name == false && this.eventMarker) {
- this.map.on('rightclick', function (e) {
- _this.map.remove(_this.eventMarkers);
- });
- }
- }
- }
- },
- '$store.state.addr.baseDetail': {
- deep: true,
- immediate: true,
- handler: function (val, oldVal) {
- let _this = this;
- if (val) {
- if (val.baseLongitude && val.baseLatitude && !val.name) {
- if (_this.baseMarkers) {
- _this.map.remove(_this.baseMarkers);
- }
- let lanLatArr = [val.baseLongitude, val.baseLatitude];
- let treeSmallLabel =
- "<div class='info-small'>" +
- "<h5 class='marker-title'>" +
- val.baseName +
- '</h5>' +
- "<div class='marker-content'>" +
- '<p>基地名称:' +
- val.baseName +
- '</p>' +
- '<p>种植/养殖/加工作物:' +
- val.cropName +
- '</p>' +
- '<p>占地面积:' +
- val.baseArea +
- '亩' +
- '</p>' +
- '<p>位置:' +
- val.cityName +
- val.countyName +
- val.townName +
- '</p>' +
- '</div>' +
- '</div>';
- this.baseMarker = new AMap.Marker({
- map: this.map,
- position: lanLatArr,
- icon: require('@/assets/img/small-marker.png'),
- anchor: 'bottom-center',
- offset: new AMap.Pixel(0, 0),
- zIndex: 9999
- });
- this.baseMarker.setLabel({
- direction: 'top',
- offset: new AMap.Pixel(0, 0), //设置文本标注偏移量
- content: treeSmallLabel //设置文本标注内容
- });
- this.baseMarkers.push(_this.baseMarker);
- this.baseMarker.on('click', (e) => {
- _this.map.remove(_this.baseMarkers);
- });
- } else if (val.name == false && _this.baseMarker) {
- this.map.on('rightclick', function (e) {
- _this.map.remove(_this.baseMarkers);
- });
- }
- }
- }
- },
- '$store.state.addr.smallClassMap': {
- handler(val) {
- if (val) {
- let _this = this;
- if (this.projectSmallClassArr) {
- this.map.remove(this.projectSmallClassArr);
- }
- let capitals = { animations: 'scaless' };
- val.forEach((element) => {
- let lnglat = new AMap.LngLat(element.longitude, element.latitude);
- var projectSmallClass = new AMap.Text({
- map: this.map,
- text: ' ',
- textAlign: 'center',
- verticalAlign: 'middle', //middle 、bottom
- draggable: false,
- cursor: 'pointer',
- angle: 2,
- style: {
- width: '2px',
- height: '2px',
- 'border-radius': '50%',
- 'border-width': 0,
- 'text-align': 'center',
- 'font-size': '12px',
- color: 'blue',
- 'background-color': 'red',
- // '-moz-box-shadow': '0px 0px 20px 2px '+capitals[i].color,
- // 'box-shadow': '0px 0px 20px 2px '+capitals[i].color,
- animation:
- capitals.animations +
- '1s infinite cubic-bezier(0, 0, 0.49, 1.02)'
- // 'animation': 'myfirst 1s infinite'
- },
- position: lnglat
- });
- this.projectSmallClassArr.push(projectSmallClass);
- projectSmallClass.on('click', (e) => {
- if (_this.projectPolygonArr) {
- _this.map.remove(_this.projectPolygonArr);
- }
- if (_this.smallMarkers) {
- _this.map.remove(_this.smallMarkers);
- }
- if (_this.treeCompMarkers) {
- _this.map.remove(_this.treeCompMarkers);
- }
- if (_this.treesPolygonArr) {
- _this.map.remove(_this.treesPolygonArr);
- }
- if (_this.smallClassProject) {
- _this.map.remove(_this.smallClassProject);
- }
- // _this.map.remove(projectSmallClass);
- smallClassDetail({ id: element.id }).then((res) => {
- if (res.code == 200) {
- let detail = res.data;
- if (this.leftPage == 'forest') {
- if (detail.mapInfo) {
- let polyData = JSON.parse(detail.mapInfo);
- let projectPolygon = new AMap.Polygon({
- map: _this.map,
- path: polyData.features[0].geometry.coordinates,
- strokeOpacity: 1,
- fillOpacity: 0.5,
- strokeColor: 'red',
- strokeWeight: 2,
- zIndex: 999,
- cursor: 'pointer',
- fillColor: 'red'
- });
- this.projectPolygonArr.push(projectPolygon);
- }
- this.map.on('rightclick', (e) => {
- if (_this.projectPolygonArr) {
- _this.map.remove(_this.projectPolygonArr);
- }
- if (_this.smallMarkers) {
- _this.map.remove(_this.smallMarkers);
- }
- });
- _this.setMapLabel(detail);
- } else if (this.leftPage == 'treeSpecies') {
- this.addTreeSpeciesPolygon(detail);
- }
- }
- });
- });
- });
- }
- }
- }
- },
- computed: {
- ...mapGetters(['vuexCityList', 'vuexDistrictList', 'vuexStreetList']),
- ...mapState(['selectCity', 'selectDistrict', 'selectStreet'])
- },
- created() {
- this.getTreePlant();
- // this.getIcon();
- },
- mounted() {
- this.initAMap();
- // 加载小班边界
- // this.getSmallClass();
- },
- methods: {
- ...mapMutations([
- 'changeSelectCity',
- 'changeSelectDistrict',
- 'changeSelectStreet',
- 'changeSelectAddr'
- ]),
- getIcon() {
- getProjectIcon('project_icon').then((res) => {
- if (res.code == 200) {
- this.projectIcon = res.data[0].dictValue;
- }
- });
- },
- setMapLabel(val) {
- let _this = this;
- let lanLatArr = [val.longitude, val.latitude];
- let imgList = [];
- if (val.imageList.length > 0) {
- val.imageList.forEach((element) => {
- imgList.push(`<img id="markerLabel" src="${element.image}"/>`);
- });
- } else {
- imgList.push('暂无图片');
- }
- this.imgClick();
- let smallLabel =
- "<div class='info-details'>" +
- "<h5 class='marker-title'>" +
- val.countyName +
- '-' +
- val.smallNumber +
- '</h5>' +
- "<div class='marker-content'>" +
- '<div>' +
- '<p>小班号:' +
- val.smallNumber +
- '</p>' +
- '<p>样地数:' +
- val.sampleCount +
- '</p>' +
- '<p>小班蓄积量:' +
- val.smallClassStock +
- '(立方米)' +
- '</p>' +
- '<p>小班占地面积:' +
- val.landArea +
- '(亩)' +
- '</p>' +
- '<p>小班树种组成:' +
- val.treeComp +
- '</p>' +
- '<p>地类:' +
- val.landType +
- '</p>' +
- '<p>林地权属:' +
- val.landOwner +
- '</p>' +
- '<p>林木权属:' +
- val.forestOwner +
- '</p>' +
- '<p>林种:' +
- val.forestClass +
- '</p>' +
- '<p>树种结构:' +
- val.treeStruct +
- '</p>' +
- '</div>' +
- '<div>' +
- '<p>起源:' +
- val.origin +
- '</p>' +
- '<p>优势树种:' +
- val.superTree +
- '</p>' +
- '<p>主要灌木名称:' +
- val.shrubName +
- '</p>' +
- '<p>地貌:' +
- val.landForm +
- '</p>' +
- '<p>海拔:' +
- val.altitude +
- '</p>' +
- '<p>坡位:' +
- val.slopePosit +
- '</p>' +
- '<p>坡向:' +
- val.slopeDirect +
- '</p>' +
- '<p>坡形:' +
- val.slopeForm +
- '</p>' +
- '<p>坡度:' +
- val.slope +
- '</p>' +
- '<p>森林健康度:' +
- val.forestHealth +
- '</p>' +
- '</div>' +
- '</div>' +
- '<div class="imgList">' +
- "<span class='marker-span'>图片:</span>" +
- '<div class="marker-imgs">' +
- imgList +
- '</div>' +
- '</div>' +
- '</div>';
- let infoIcon = new AMap.Icon({
- size: new AMap.Size(40, 25), // 图标尺寸
- image: require('@/assets/img/small-marker.png'),
- imageSize: new AMap.Size(40, 25) // 根据所设置的大小拉伸或压缩图片
- });
- this.smallMarker = new AMap.Marker({
- map: this.map,
- position: lanLatArr,
- icon: infoIcon,
- anchor: 'bottom-center',
- offset: new AMap.Pixel(0, -6),
- zIndex: 9999
- });
- this.smallMarker.setLabel({
- direction: 'right',
- offset: new AMap.Pixel(-230, -150), //设置文本标注偏移量
- content: smallLabel //设置文本标注内容
- });
- if (this.$store.state.addr.mapLevel == 'street') {
- this.map.setFitView(this.smallMarker, false, false, 12);
- }
- this.smallMarkers.push(_this.smallMarker);
- this.smallMarker.on('click', (e) => {
- if (_this.smallMarkers) {
- _this.map.remove(_this.smallMarkers);
- }
- if (_this.projectPolygonArr) {
- _this.map.remove(_this.projectPolygonArr);
- }
- if (_this.smallClassProject) {
- _this.map.remove(_this.smallClassProject);
- }
- // _this.smallMarker.setLabel({
- // direction: 'right',
- // offset: new AMap.Pixel(-230, -160), //设置文本标注偏移量
- // content: smallLabel //设置文本标注内容
- // });
- });
- },
- initAMap() {
- window._AMapSecurityConfig = {
- securityJsCode: 'e6666dfe93e7d3c6f3a5dc35cad6befb' // 密钥
- };
- let _this = this;
- AMapLoader.load({
- key: 'f79d862df9288710e3dce6591af9dff1', //设置您的key
- version: '2.0',
- plugins: [
- 'AMap.ToolBar',
- 'AMap.Driving',
- 'AMap.DistrictSearch',
- 'AMap.MapboxVectorTileLayer'
- ],
- Loca: {
- version: '2.0'
- },
- AMapUI: {
- version: '1.1',
- plugins: ['overlay/SimpleMarker']
- },
- features: ['road', 'bg', 'building']
- }).then((AMap) => {
- _this.AMap = AMap;
- _this.map = new AMap.Map('container', {
- viewMode: '3D',
- zoom: _this.zoom,
- center: _this.lngLat,
- pitch: 45,
- terrain: true,
- features: ['road', 'bg', 'building'],
- layers: [new AMap.TileLayer.Satellite()]
- });
- AMapUI.load(
- ['ui/geo/DistrictExplorer', 'ui/geo/DistrictCluster', 'lib/$'],
- function (DistrictExplorer, DistrictCluster, $) {
- window.DistrictCluster = DistrictCluster;
- _this.loadMapData(DistrictExplorer, $);
- }
- );
- _this.map.on('rightclick', function (e) {
- if (_this.smallMarkers.length > 0) {
- _this.map.remove(_this.smallMarkers);
- }
- if (_this.smallClassProject) {
- _this.map.remove(_this.smallClassProject);
- }
- if (_this.projectPolygonArr) {
- _this.map.remove(_this.projectPolygonArr);
- }
- // if (_this.treeCompMarkers.length > 0) {
- // _this.map.remove(_this.treeCompMarkers);
- // }
- });
- let wms = new AMap.TileLayer.WMTS({
- url: 'http://t4.tianditu.gov.cn/img_w/wmts',
- blend: false,
- tileSize: 256,
- params: {
- Layer: 'img',
- Version: '1.0.0',
- Format: 'tiles',
- TileMatrixSet: 'w',
- STYLE: 'default',
- tk: '064688075f565aa463866b915c378e00'
- }
- });
- wms.setMap(_this.map);
- this.map.on('mousewheel', (e) => {
- var zoom = this.map.getZoom(); //获取当前地图级别
- if (
- zoom > '10.5' &&
- zoom < '11' &&
- this.$store.state.addr.mapLevel == 'street'
- ) {
- if (this.districtData.value) {
- let districtCode = this.districtData.value.substring(0, 6);
- this.$store.dispatch('searchArea', {
- parentId: districtCode,
- name: this.districtData.label,
- mapLevel: 'district'
- });
- }
- }
- // if (
- // zoom > '9' &&
- // zoom < '9.5' &&
- // this.$store.state.addr.mapLevel == 'district'
- // ) {
- // if (this.selectData.value) {
- // let districtCode = this.selectData.value.substring(0, 6);
- // this.$store.dispatch('searchArea', {
- // parentId: districtCode,
- // name: this.selectData.label,
- // mapLevel: 'city'
- // });
- // }
- // }
- // if (
- // zoom > '7.6' &&
- // zoom < '7.9' &&
- // this.$store.state.addr.mapLevel == 'city'
- // ) {
- // this.$store.dispatch('searchArea', {
- // parentId: '520000',
- // name: '贵州省',
- // mapLevel: 'province'
- // });
- // }
- });
- });
- },
- loadMapData(DistrictExplorer, $) {
- let that = this;
- //创建一个实例
- that.districtExplorer = window.districtExplorer = new DistrictExplorer({
- eventSupport: true, //打开事件支持
- bubble: true,
- map: that.map
- });
- //当前聚焦的区域
- // this.$tipMarkerContent = $('<div class="tipMarker top"></div>');
- this.$tipMarkerContent = $('<div class="tipMarker top"></div>');
- this.tipMarker = new AMap.Marker({
- content: this.$tipMarkerContent.get(0),
- offset: new AMap.Pixel(0, 0),
- bubble: true
- });
- //监听feature的hover事件
- this.districtExplorer.on(
- 'featureMouseout featureMouseover',
- (e, feature) => {
- this.toggleHoverFeature(
- feature,
- e.type === 'featureMouseover',
- e.originalEvent ? e.originalEvent.lnglat : null
- );
- }
- );
- //监听鼠标在feature上滑动
- this.districtExplorer.on('featureMousemove', (e) => {
- //更新提示位置
- this.tipMarker.setPosition(e.originalEvent.lnglat);
- });
- let adName = that.adName; //贵州省
- let mapLevel = that.mapLevel;
- let adcode = '520000';
- //feature被点击
- this.districtExplorer.on('featureClick', (e, feature) => {
- const props = feature.properties;
- if (props.subFeatureIndex != null) {
- adName = props.name;
- adcode = props.adcode;
- mapLevel = props.level;
- // for (let item of this.forestFarmData) {
- // if (props.name == item.cityName || props.name == item.countyName) {
- mapLevel = props.level;
- adName = props.name;
- this.$store.dispatch('searchArea', {
- parentId: props.adcode,
- name: props.name,
- mapLevel: props.level
- });
- let valCode = props.adcode + '000000';
- let areaId = '';
- this.vuexCityList.forEach((item) => {
- if (valCode == item.areaCode) {
- areaId = item.areaId;
- }
- });
- this.vuexDistrictList.forEach((item) => {
- if (valCode == item.areaCode) {
- areaId = item.areaId;
- }
- });
- if (props.level == 'city') {
- this.changeSelectCity({
- value: valCode,
- label: props.name,
- areaId: areaId,
- prop: '1'
- });
- } else if (props.level == 'district') {
- this.changeSelectDistrict({
- value: valCode,
- label: props.name,
- areaId: areaId,
- prop: '1'
- });
- }
- if (this.projectMarkerArr) {
- this.map.remove(this.projectMarkerArr);
- }
- if (this.economicsArr) {
- this.map.remove(this.economicsArr);
- }
- if (this.baseMarkerArr) {
- this.map.remove(this.baseMarkerArr);
- }
- if (this.eventMarkersArr) {
- this.map.remove(this.eventMarkersArr);
- }
- if (this.treesMarkerArr) {
- this.map.remove(this.treesMarkerArr);
- }
- }
- // }
- // }
- });
- this.switch2AreaNode(adcode);
- // this.getProjectList();
- },
- //根据Hover状态设置相关样式
- toggleHoverFeature(feature, isHover, position) {
- if (feature.properties.subFeatureIndex != null) {
- // this.tipMarker.setMap(isHover ? this.map : null);
- // this.tipMarker.setMap(isHover ? this.map : null);
- if (!feature) {
- return;
- }
- const props = feature.properties;
- // if (isHover) {
- // //更新提示内容
- // this.$tipMarkerContent.html(props.name);
- // //更新位置
- // this.tipMarker.setPosition(position || props.center);
- // }
- //更新相关多边形的样式
- const polys = this.districtExplorer.findFeaturePolygonsByAdcode(
- props.adcode
- );
- polys.forEach((elemnt) => {
- elemnt.setOptions({
- fillColor: '#0dbc79',
- fillOpacity: isHover ? 0.5 : 0
- });
- });
- }
- },
- //绘制某个区域的边界
- renderAreaPolygons(areaNode) {
- // 加载小班边界
- // this.getSmallClass();
- let _this = this;
- //更新地图视野
- if (
- (this.$store.state.addr.selectCity.prop == '1' &&
- this.$store.state.addr.mapLevel != 'street') ||
- this.$store.state.addr.mapLevel == 'province'
- ) {
- this.map.setBounds(areaNode.getBounds(), null, null, false);
- } else if (
- this.$store.state.addr.selectCity.prop == '2' &&
- this.$store.state.addr.mapLevel != 'province'
- ) {
- this.map.setFitView(this.smallMarker, false, false, 14);
- }
- // 加载相关标识
- this.mapPolygon();
- //清除已有的绘制内容
- this.districtExplorer.clearFeaturePolygons();
- // 清除已绘制的省市县名称
- this.map.remove(this.cityMarkerArr);
- //绘制子区域
- this.districtExplorer.renderSubFeatures(areaNode, () => {
- return {
- cursor: 'default',
- bubble: true,
- strokeColor: 'yellow', //线颜色
- strokeOpacity: 1, //线透明度
- strokeWeight: 2, //线宽
- fillOpacity: 0 //填充透明度
- };
- });
- //绘制父区域
- this.districtExplorer.renderParentFeature(areaNode, {
- cursor: 'default',
- bubble: true,
- strokeColor: '#00eeff', //线颜色
- strokeOpacity: 1, //线透明度
- strokeWeight: 2, //线宽
- fillOpacity: 0 //填充透明度
- });
- let areaPolygon = areaNode.getParentFeature();
- // 绘制父级蒙版
- // if (this.$store.state.addr.mapLevel == 'province' || this.$store.state.addr.mapLevel == 'city') {
- let outer = [
- new AMap.LngLat(-360, 90, true),
- new AMap.LngLat(-360, -90, true),
- new AMap.LngLat(360, -90, true),
- new AMap.LngLat(360, 90, true)
- ];
- let areaPolygonArr = [];
- areaPolygon.geometry.coordinates.forEach((element) => {
- areaPolygonArr.push(element[0]);
- });
- let holes = areaPolygonArr;
- let pathArray = [outer];
- pathArray.push.apply(pathArray, holes);
- this.polygon = new AMap.Polygon({
- pathL: pathArray,
- map: this.map,
- strokeColor: '#00eeff',
- strokeWeight: 1,
- fillColor: '#0c1b05', // 遮罩背景色
- fillOpacity: 0.8,
- height: 10000
- });
- this.polygon.setPath(pathArray);
- // }
- if (this.leftPage == 'forest' || this.leftPage == 'treeSpecies') {
- if (this.map) {
- this.getProjectList();
- }
- }
- if (areaPolygon.properties.level != 'district') {
- // this.setMarker();
- } else {
- this.map.remove(this.treesMarkerArr);
- }
- //查询乡镇 标识
- if (areaPolygon.properties.level == 'district') {
- if (
- this.$store.state.addr.mapLevel != 'street' &&
- this.townPolygons.length == 0
- ) {
- this.getrjx(areaPolygon.properties.name);
- }
- AMap.plugin(['AMap.DistrictSearch'], function () {
- let district = new AMap.DistrictSearch({
- // 返回行政区边界坐标等具体信息
- extensions: 'all',
- // 设置查询行政区级别为 区 (district)
- level: areaPolygon.properties.level,
- // 显示下级行政区级数,1表示返回下一级行政区
- subdistrict: 1
- });
- let areaCode = areaPolygon.properties.name;
- district.search(areaCode, function (status, result) {
- let streetArr = result.districtList[0].districtList;
- for (let elementLs in streetArr) {
- _this.streetMarker = new AMap.Text({
- //c城市指示标
- text: streetArr[elementLs].name,
- zIndex: 1,
- map: _this.map,
- anchor: 'center', // 设置文本标记锚点
- style: {
- padding: '0px 6px',
- color: '#fff',
- border: 'none',
- fontSize: '12px',
- 'background-color': '#E6810C'
- },
- position: [
- streetArr[elementLs].center.lng,
- streetArr[elementLs].center.lat
- ]
- });
- _this.streetMarkerArr.push(_this.streetMarker);
- }
- });
- });
- }
- // 添加城市标识
- let cityArr = areaNode.getSubFeatures();
- if (cityArr) {
- for (let i = 0; i < cityArr.length; i++) {
- this.cityMarker = new AMap.Text({
- //c城市指示标
- text: cityArr[i].properties.name,
- zIndex: 1,
- map: this.map,
- anchor: 'center', // 设置文本标记锚点
- style: {
- padding: '0px 6px',
- color: '#fff',
- border: 'none',
- fontSize: '12px',
- 'background-color': '#E6810C'
- },
- position: cityArr[i].properties.centroid
- });
- this.cityMarkerArr.push(this.cityMarker);
- }
- }
- },
- //切换区域后刷新显示内容
- refreshAreaNode(areaNode) {
- this.districtExplorer.setHoverFeature(null);
- this.renderAreaPolygons(areaNode);
- },
- //切换区域
- switch2AreaNode(adcode, mapLevel, selectStreet, page, callback) {
- // if (
- // this.currentAreaNode &&
- // '' + this.currentAreaNode.getAdcode() === '' + adcode
- // ) {
- // return;
- // }
- this.loadAreaNode(adcode, (error, areaNode) => {
- if (error) {
- if (callback) {
- callback(error);
- }
- return;
- }
- this.currentAreaNode = areaNode;
- //设置当前使用的定位用节点
- this.districtExplorer.setAreaNodesForLocating([this.currentAreaNode]);
- this.refreshAreaNode(areaNode);
- if (callback) {
- callback(null, areaNode);
- }
- });
- },
- // 加载区域
- loadAreaNode(adcode, callback) {
- this.districtExplorer.loadAreaNode(adcode, (error, areaNode) => {
- if (error) {
- if (callback) {
- callback(error);
- }
- window.console.error(error);
- return;
- }
- if (callback) {
- callback(null, areaNode);
- }
- });
- },
- // 加载林场
- // setMarker() {
- // this.forestFarmData = [];
- // if (this.treesMarkerArr.length > 0) {
- // this.map.remove(this.treesMarkerArr);
- // }
- // farmInfo().then((res) => {
- // this.forestFarmData = res.rows;
- // let parentMarker = require('@/assets/img/pre-marker.png');
- // this.forestFarmData.forEach((item) => {
- // let selectCity = this.$store.state.addr.selectCity.label;
- // switch (this.$store.state.addr.selectCity.label) {
- // case '黔西南州':
- // selectCity = '黔西南布依族苗族自治州';
- // break;
- // case '黔东南州':
- // selectCity = '黔东南苗族侗族自治州';
- // break;
- // case '黔南州':
- // selectCity = '黔南布依族苗族自治州';
- // break;
- // }
- // if (this.$store.state.addr.selectCity.label) {
- // if (selectCity == item.cityName) {
- // let lngLat = [item.longitude, item.latitude];
- // this.treesMarker = new AMap.Marker({
- // map: this.map,
- // position: lngLat,
- // icon: parentMarker,
- // anchor: 'bottom-center',
- // offset: new AMap.Pixel(0, 0)
- // });
- // this.treesMarker.setLabel({
- // direction: 'bottom',
- // offset: new AMap.Pixel(0, 0), //设置文本标注偏移量
- // content: `<div>${item.forestName}</div>` //设置文本标注内容
- // });
- // this.treesMarkerArr.push(this.treesMarker);
- // }
- // } else {
- // let lngLat = [item.longitude, item.latitude];
- // this.treesMarker = new AMap.Marker({
- // map: this.map,
- // position: lngLat,
- // icon: parentMarker,
- // anchor: 'bottom-center',
- // offset: new AMap.Pixel(0, 0)
- // });
- // this.treesMarker.setLabel({
- // direction: 'bottom',
- // offset: new AMap.Pixel(0, 0), //设置文本标注偏移量
- // content: `<div>${item.forestName}</div>` //设置文本标注内容
- // });
- // this.treesMarkerArr.push(this.treesMarker);
- // }
- // });
- // });
- // },
- // 查询项目列表
- getProjectList() {
- let params = {
- cityId: this.$store.state.addr.selectCity.areaId,
- countyId: this.$store.state.addr.selectDistrict.areaId,
- townId: this.$store.state.addr.selectStreet.areaId
- };
- // image: '//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png',
- projectList(params).then((res) => {
- if (res.code == 200) {
- let infoIcon = new AMap.Icon({
- size: new AMap.Size(20, 25), // 图标尺寸
- image: this.projectIcon,
- imageSize: new AMap.Size(20, 25) // 根据所设置的大小拉伸或压缩图片
- });
- res.rows.forEach((element) => {
- if (element.longitude && element.latitude) {
- let lnglat = new AMap.LngLat(element.longitude, element.latitude);
- var projectMarker = new AMap.Marker({
- map: this.map,
- position: lnglat,
- offset: new AMap.Pixel(0, -30),
- icon: infoIcon,
- zIndex: 999,
- topWhenClick: true
- });
- this.projectMarkerArr.push(projectMarker);
- }
- });
- }
- });
- },
- // 加载乡镇边界
- getrjx(cityName) {
- if (cityName == '榕江县') {
- axios.get('/static/rongjangintown.json').then((res) => {
- this.putPolygonData = res.data.features;
- this.putPolygon();
- });
- } else if (cityName == '清镇市') {
- axios.get('/static/qingzhenzhen.json').then((res) => {
- this.putPolygonData = res.data.features;
- this.putPolygon();
- });
- }
- },
- putPolygon() {
- let that = this;
- this.putPolygonData.forEach((element) => {
- this.boundaryPolygon = new AMap.Polygon({
- map: that.map,
- path: element.geometry.coordinates,
- strokeOpacity: 1,
- fillOpacity: 0,
- strokeColor: 'yellow',
- strokeWeight: 1,
- zIndex: 999,
- cursor: 'pointer'
- });
- that.townPolygons.push(this.boundaryPolygon);
- this.boundaryPolygon.on('click', (e) => {
- let centerLanLatArr = [e.lnglat.lng, e.lnglat.lat];
- that.map.remove(that.townPolygons);
- // that.districtExplorer.clearFeaturePolygons();
- let valCode = element.properties.XIANG;
- let areaId = '';
- let label = element.properties.XIANG_NAME;
- this.vuexStreetList.forEach((item) => {
- if (valCode == item.areaCode) {
- areaId = item.areaId;
- }
- });
- this.changeSelectStreet({
- value: valCode,
- label: label,
- areaId: areaId,
- prop: '1'
- });
- this.changeSelectAddr('street');
- this.$store.dispatch('searchArea', {
- parentId: valCode,
- name: label,
- mapLevel: 'street'
- });
- let townPolygon = new AMap.Polygon({
- map: that.map,
- path: element.geometry.coordinates,
- strokeColor: 'yellow',
- strokeWeight: 3,
- fillOpacity: 0
- });
- this.townPolygonArr.push(townPolygon);
- that.map.setZoomAndCenter(14, centerLanLatArr, false, 13);
- });
- that.boundaryPolygon.on('rightclick', function (e) {
- if (
- that.smallMarkers ||
- that.baseMarkers ||
- that.eventMarkers ||
- that.smallClassProject ||
- that.projectPolygonArr
- ) {
- that.map.remove(that.smallMarkers);
- that.map.remove(that.baseMarkers);
- that.map.remove(that.eventMarkers);
- that.map.remove(that.smallClassProject);
- that.map.remove(that.projectPolygonArr);
- }
- });
- });
- },
- async getSmallClass() {
- let that = this;
- that.smallClassMapArr = [];
- let params = {
- // cityId: that.$store.state.addr.selectCity.areaId,
- // countyId: that.$store.state.addr.selectDistrict.areaId,
- townId: this.$store.state.addr.selectStreet.areaId
- };
- if (that.smallClassPolygonArr.length > 0) {
- that.map.remove(that.smallClassPolygonArr);
- }
- if (that.treesPolygonArr.length > 0) {
- that.map.remove(that.treesPolygonArr);
- }
- // let pageData = {
- // pageNum: 0,
- // pageSize: 25
- // };
- let mapLevel = that.$store.state.addr.mapLevel;
- let res = await smallClassMap({ ...params });
- if (res.code == 200) {
- res.rows.forEach((item) => {
- // if (item.smallId != null) {
- // }
- // this.smallClassMapArr.push(item);
- if (that.leftPage === 'forest') {
- this.addForestPolygon(item);
- } else if (this.leftPage === 'treeSpecies') {
- this.addTreeSpeciesPolygon(item);
- }
- });
- }
- // if (res.code == 200 && res.total > 25) {
- // const total = res.total;
- // const totalPage = Math.ceil(total / pageData.pageSize);
- // const render = (page, mapLevel) => {
- // if (page >= totalPage) return;
- // requestAnimationFrame(() => {
- // render(page + 1, mapLevel);
- // pageData.pageNum = page;
- // smallClassMap({ ...params, ...pageData }).then((response) => {
- // if (response.code == 200) {
- // response.rows.forEach((item) => {
- // // if (item.smallId != null) {
- // // }
- // // this.smallClassMapArr.push(item);
- // if (that.leftPage === 'forest') {
- // this.addForestPolygon(item);
- // } else if (this.leftPage === 'treeSpecies') {
- // this.addTreeSpeciesPolygon(item);
- // }
- // });
- // }
- // });
- // });
- // };
- // render(pageData.pageNum, mapLevel);
- // } else {
- // res.rows.forEach((item) => {
- // if (that.leftPage === 'forest') {
- // this.addForestPolygon(item);
- // } else if (this.leftPage === 'treeSpecies') {
- // this.addTreeSpeciesPolygon(item);
- // }
- // });
- // }
- },
- mapPolygon() {
- // if (this.smallClassMapArr) {
- // if (this.leftPage === 'forest') {
- // // this.addForestPolygon(this.smallClassMapArr);
- // if (
- // // this.$store.state.addr.mapLevel == 'district' ||
- // this.$store.state.addr.mapLevel == 'street'
- // ) {
- // this.getForestSample(this.leftPage);
- // }
- // } else if (this.leftPage === 'treeSpecies') {
- // // this.addTreeSpeciesPolygon();
- // if (
- // // this.$store.state.addr.mapLevel == 'district' ||
- // this.$store.state.addr.mapLevel == 'street'
- // ) {
- // this.getRightScrollData(this.leftPage);
- // }
- // } else
- if (this.leftPage === 'economics') {
- this.getEconomics();
- } else if (this.leftPage === 'event') {
- this.getEven();
- }
- // }
- },
- addForestPolygon(item) {
- let that = this;
- if (item) {
- // console.log(item);
- // smallClassMapArr.forEach((item) => {
- let polyData = JSON.parse(item.mapInfo);
- for (let elementLs in polyData.features) {
- let smallClassPolygon = new AMap.Polygon({
- map: that.map,
- path: polyData.features[elementLs].geometry.coordinates,
- strokeOpacity: 1,
- fillOpacity: 0,
- strokeColor: 'red',
- strokeWeight: 2,
- zIndex: 999,
- cursor: 'pointer',
- fillColor: ''
- });
- this.smallClassPolygonArr.push(smallClassPolygon);
- smallClassPolygon.on('click', (e) => {
- let imgList = [];
- if (item.imageList.length > 0) {
- item.imageList.forEach((element) => {
- imgList.push(`<img id="markerLabel" src="${element.image}"/>`);
- });
- } else {
- imgList.push('暂无图片');
- }
- this.imgClick();
- let smallLabel =
- "<div class='info-details'>" +
- "<h5 class='marker-title'>" +
- item.countyName +
- '-' +
- item.smallNumber +
- '</h5>' +
- "<div class='marker-content'>" +
- '<div>' +
- '<p>小班号:' +
- item.smallNumber +
- '</p>' +
- '<p>样地数:' +
- item.sampleCount +
- '</p>' +
- '<p>小班蓄积量:' +
- item.smallClassStock +
- '(立方米)' +
- '</p>' +
- '<p>小班占地面积:' +
- item.landArea +
- '(亩)' +
- '</p>' +
- '<p>小班树种组成:' +
- item.treeComp +
- '</p>' +
- '<p>地类:' +
- item.landType +
- '</p>' +
- '<p>林地权属:' +
- item.landOwner +
- '</p>' +
- '<p>林木权属:' +
- item.forestOwner +
- '</p>' +
- '<p>林种:' +
- item.forestClass +
- '</p>' +
- '<p>树种结构:' +
- item.treeStruct +
- '</p>' +
- '</div>' +
- '<div>' +
- '<p>起源:' +
- item.origin +
- '</p>' +
- '<p>优势树种:' +
- item.superTree +
- '</p>' +
- '<p>主要灌木名称:' +
- item.shrubName +
- '</p>' +
- '<p>地貌:' +
- item.landForm +
- '</p>' +
- '<p>海拔:' +
- item.altitude +
- '</p>' +
- '<p>坡位:' +
- item.slopePosit +
- '</p>' +
- '<p>坡向:' +
- item.slopeDirect +
- '</p>' +
- '<p>坡形:' +
- item.slopeForm +
- '</p>' +
- '<p>坡度:' +
- item.slope +
- '</p>' +
- '<p>森林健康度:' +
- item.forestHealth +
- '</p>' +
- '</div>' +
- '</div>' +
- '<div class="imgList">' +
- "<span class='marker-span'>图片:</span>" +
- '<div class="marker-imgs">' +
- imgList +
- '</div>' +
- '</div>' +
- '</div>';
- that.smallMarker = new AMap.Marker({
- map: that.map,
- position: lanLatArr,
- icon: require('@/assets/img/small-marker.png'),
- anchor: 'bottom-center',
- offset: new AMap.Pixel(-5, -6)
- });
- that.smallMarker.setLabel({
- direction: 'right',
- offset: new AMap.Pixel(-230, -160), //设置文本标注偏移量
- content: smallLabel //设置文本标注内容
- });
- // that.smallMarker.setMap(that.map);
- that.smallMarkers.push(that.smallMarker);
- smallClassPolygon.setOptions({
- fillOpacity: 0.7,
- fillColor: 'yellow'
- });
- });
- smallClassPolygon.on('mouseout', () => {
- smallClassPolygon.setOptions({
- fillOpacity: 0,
- fillColor: '#ccebc5'
- });
- });
- }
- if (item.longitude && item.latitude) {
- var lanLatArr = [];
- lanLatArr = [item.longitude, item.latitude];
- if (
- this.$store.state.addr.mapLevel == 'district' ||
- this.$store.state.addr.mapLevel == 'street'
- ) {
- this.smallClassN = new AMap.Text({
- map: this.map,
- position: lanLatArr,
- text: item.smallNumber,
- anchor: 'bottom-center',
- offset: new AMap.Pixel(0, 8),
- style: {
- 'background-color': 'transparent',
- border: 'none',
- color: '#05dfff',
- fontSize: '12px'
- }
- });
- this.smallClassNArr.push(this.smallClassN);
- }
- }
- // this.map.add(that.smallClassPolygon);
- // });
- }
- },
- imgClick() {
- document.getElementsByTagName('div')[0].addEventListener('click', (e) => {
- if (e.target.id === 'markerLabel') {
- this.imgDialogVisible = true;
- this.dialogImageUrl = e.target.currentSrc;
- }
- });
- },
- // 获取样地数据
- getForestSample(page) {
- forestSample({
- // cityId: this.$store.state.addr.selectCity.areaId,
- // countyId: this.$store.state.addr.selectDistrict.areaId,
- townId: this.$store.state.addr.selectStreet.areaId
- }).then((res) => {
- let sampleMarker = require('@/assets/img/sample-marker.png');
- let iconMeta = [28, 28];
- this.setMarkers(res, sampleMarker, iconMeta, page);
- });
- },
- // 添加地图标注(样地、树种)
- setMarkers(res, sampleMarker, iconMeta, page) {
- let _this = this;
- if (this.forestMarker) {
- this.forestMarker.setMap(null);
- this.forestMarker = null;
- }
- this.markerData = res;
- let iconMarker = sampleMarker;
- let iconMetaSet = iconMeta;
- let sampleIcon = new AMap.Icon({
- size: new AMap.Size(iconMetaSet[0], iconMetaSet[1]), // 图标尺寸
- image: iconMarker,
- imageSize: new AMap.Size(iconMetaSet[0], iconMetaSet[1]) // 根据所设置的大小拉伸或压缩图片
- });
- this.markerData.rows.forEach((item) => {
- let lngLat = [item.longitude, item.latitude];
- if (item.longitude && item.latitude) {
- this.forestMarker = new AMap.Marker({
- map: _this.map,
- position: lngLat,
- icon: sampleIcon,
- anchor: 'bottom-center',
- offset: new AMap.Pixel(0, -18)
- });
- if (page === 'forest') {
- this.forestMarker.setLabel({
- direction: 'right',
- offset: new AMap.Pixel(-8, 0), //设置文本标注偏移量
- content: `<div style="color:#05dfff">${item.smallNumber}-${item.sampleNumber}</div>` //设置文本标注内容
- });
- let clickLabel =
- "<div class='info-small'>" +
- "<h5 class='marker-title'>" +
- item.smallNumber +
- '-' +
- item.sampleNumber +
- '</h5>' +
- "<div class='marker-content'>" +
- '<p>样地号:' +
- item.sampleNumber +
- '</p>' +
- '<p>所属小班:' +
- item.smallNumber +
- '</p>' +
- '<p>样地蓄积:' +
- item.landStock +
- '</p>' +
- '<p>样地株数:' +
- item.landNumber +
- '</p>' +
- '</div>' +
- '</div>';
- let lastMarker = new AMap.Marker({
- position: lngLat,
- icon: sampleIcon,
- anchor: 'bottom-center',
- offset: new AMap.Pixel(0, -18)
- });
- lastMarker.setLabel({
- zIndex: 120,
- direction: 'top',
- offset: new AMap.Pixel(-4, 0), //设置文本标注偏移量
- content: clickLabel //设置文本标注内容
- });
- this.forestMarker.on('click', function (e) {
- _this.map.add(lastMarker);
- });
- this.forestMarker.on('mouseout', function (e) {
- _this.map.remove(lastMarker);
- });
- } else if (page === 'treeSpecies') {
- this.forestMarker.setLabel({
- direction: 'top',
- offset: new AMap.Pixel(0, 8), //设置文本标注偏移量
- content: `<div class="label-treecomp">${item.treeComp}<span class="smallH">${item.smallNumber}</span></div>` //设置文本标注内容
- });
- }
- // this.map.add(this.forestMarker);
- // forestMarker
- this.forestMarkerArr.push(this.forestMarker);
- }
- });
- },
- addTreeSpeciesPolygon(item) {
- let that = this;
- // that.smallClassMapArr.forEach((item) => {
- let polyData = JSON.parse(item.mapInfo);
- for (let elementLs in polyData.features) {
- let polygonColor = '';
- this.treePlant.forEach((tree) => {
- if (tree.plantName == item.superTree && item.superTree == '硬阔') {
- polygonColor = '#00da85';
- } else if (
- tree.plantName == item.superTree &&
- item.superTree == '软阔'
- ) {
- polygonColor = '#009bfd';
- } else if (
- tree.plantName == item.superTree &&
- item.superTree == '杉木'
- ) {
- polygonColor = '#eca62d';
- } else if (
- tree.plantName == item.superTree &&
- item.superTree == '马尾松'
- ) {
- polygonColor = '#b82dec';
- }
- });
- let polygon = new AMap.Polygon({
- map: that.map,
- path: polyData.features[elementLs].geometry.coordinates,
- strokeOpacity: 1,
- fillOpacity: 0.6,
- strokeColor: 'red',
- strokeWeight: 2,
- zIndex: 999,
- cursor: 'pointer',
- fillColor: polygonColor
- });
- this.treesPolygonArr.push(polygon);
- if (item.longitude && item.latitude) {
- var lanLatArr = [];
- // polygon.on('click', (e) => {
- lanLatArr = [item.longitude, item.latitude];
- let treeSmallLabel =
- "<div class='info-small'>" +
- "<h5 class='marker-title'>小班" +
- item.smallNumber +
- '</h5>' +
- "<div class='marker-content'>" +
- '<p>树种组成:' +
- item.treeComp +
- '</p>' +
- '<p>树种结构:' +
- item.treeStruct +
- '</p>' +
- '<p>优势树种:' +
- item.superTree +
- '</p>' +
- '<p>优势树种平均胸径:' +
- item.superTreeDbh +
- '厘米' +
- '</p>' +
- '<p>优势树种平均高:' +
- item.superTreeHigh +
- '米' +
- '</p>' +
- '<p>位置:' +
- item.countyName +
- item.townName +
- item.villageName +
- '</p>' +
- '</div>' +
- '</div>';
- that.smallMarker = new AMap.Marker({
- map: that.map,
- position: lanLatArr,
- icon: require('@/assets/img/small-marker.png'),
- anchor: 'bottom-center',
- offset: new AMap.Pixel(0, 0)
- });
- that.smallMarker.setLabel({
- direction: 'top',
- offset: new AMap.Pixel(-10, 0), //设置文本标注偏移量
- content: treeSmallLabel //设置文本标注内容
- });
- that.treeCompMarkers.push(that.smallMarker);
- if (
- this.$store.state.addr.mapLevel == 'street' ||
- this.$store.state.addr.mapLevel == 'district'
- ) {
- this.map.setFitView(this.smallMarker, false, false, 14);
- }
- // });
- that.smallMarker.on('click', (e) => {
- if (that.treesPolygonArr) {
- that.map.remove(that.treesPolygonArr);
- }
- if (that.treeCompMarkers) {
- that.map.remove(that.treeCompMarkers);
- }
- });
- that.map.on('rightclick', function (e) {
- if (that.treeCompMarkers) {
- that.map.remove(that.treeCompMarkers);
- }
- if (that.treesPolygonArr) {
- that.map.remove(that.treesPolygonArr);
- }
- });
- }
- }
- // });
- },
- // 获取小班列表
- getRightScrollData(page) {
- rightScrollData({
- // cityId: this.$store.state.addr.selectCity.areaId,
- // countyId: this.$store.state.addr.selectDistrict.areaId,
- townId: this.$store.state.addr.selectStreet.areaId
- }).then((res) => {
- let sampleMarker = require('@/assets/img/sanjiaod.png');
- let iconMeta = [16, 10];
- this.setMarkers(res, sampleMarker, iconMeta, page);
- });
- },
- // 事件信息
- getEven() {
- let _this = this;
- alarmDataApi({
- cityId: this.$store.state.addr.selectCity.areaId,
- countyId: this.$store.state.addr.selectDistrict.areaId,
- townId: this.$store.state.addr.selectStreet.areaId
- }).then((res) => {
- res.data.forEach((item) => {
- let lanLatArr = [item.longitude, item.latitude];
- let baseIcon = '';
- let fireIcon = require('@/assets/img/fire.png');
- let cutTreeIcon = require('@/assets/img/cutTree.png');
- let insectpestIcon = require('@/assets/img/insectpest.png');
- let stealIcon = require('@/assets/img/steal.png');
- if (item.eventType == 1) {
- item.eventContLabel = '火灾';
- baseIcon = fireIcon;
- } else if (item.eventType == 2) {
- item.eventContLabel = '砍伐';
- baseIcon = cutTreeIcon;
- } else if (item.eventType == 3) {
- item.eventContLabel = '病虫害';
- baseIcon = insectpestIcon;
- } else if (item.eventType == 4) {
- item.eventContLabel = '偷盗林木';
- baseIcon = stealIcon;
- }
- let baseIconData = new AMap.Icon({
- size: new AMap.Size(35, 35), // 图标尺寸
- image: baseIcon,
- imageSize: new AMap.Size(35, 35) // 根据所设置的大小拉伸或压缩图片
- });
- let treeSmallLabel =
- "<div class='info-small'>" +
- "<h5 class='marker-title'>最新事件" +
- '</h5>' +
- "<div class='marker-content'>" +
- '<p>事件类型:' +
- item.eventContLabel +
- '</p>' +
- '<p>上报时间:' +
- item.createTime +
- '</p>' +
- '<p>上报人:' +
- item.createBy +
- '</p>' +
- '<p>位置:' +
- item.cityName +
- item.countyName +
- item.townName +
- item.villageName +
- '</p>' +
- '</div>' +
- '</div>';
- _this.smallMarker = new AMap.Marker({
- map: _this.map,
- position: lanLatArr,
- icon: baseIconData,
- anchor: 'bottom-center',
- offset: new AMap.Pixel(0, 0),
- zIndex: 999
- });
- _this.eventMarkersArr.push(_this.smallMarker);
- _this.smallMarker.on('click', function (e) {
- let infoWindow = new AMap.InfoWindow({
- isCustom: true,
- offset: new AMap.Pixel(0, -20),
- content: treeSmallLabel,
- position: lanLatArr
- });
- infoWindow.open(_this.map, lanLatArr);
- });
- _this.smallMarker.on('mouseout', function (e) {
- _this.map.clearInfoWindow();
- });
- });
- });
- },
- // 林业经济
- getEconomics() {
- let _this = this;
- financeBasePlant({
- cityId: this.$store.state.addr.selectCity.areaId,
- countyId: this.$store.state.addr.selectDistrict.areaId
- // townId: this.$store.state.addr.selectStreet.areaId
- }).then((res) => {
- let economicsList = [];
- let baseList = [];
- res.rows.forEach((element) => {
- economicsList.push({
- longitude: element.cateLongitude,
- latitude: element.cateLatitude,
- icon: element.image
- });
- baseList.push({
- baseId: element.baseId,
- baseName: element.baseName,
- longitude: element.baseLongitude,
- latitude: element.baseLatitude
- });
- });
- economicsList.forEach((item) => {
- let lanLatArr = [item.longitude, item.latitude];
- let beeIcon = item.icon;
- let iconMeta = [35, 26];
- let sampleIcon = new AMap.Icon({
- size: new AMap.Size(iconMeta[0], iconMeta[1]), // 图标尺寸
- image: beeIcon,
- imageSize: new AMap.Size(iconMeta[0], iconMeta[1]) // 根据所设置的大小拉伸或压缩图片
- });
- this.smallMarker = new AMap.Marker({
- map: _this.map,
- position: lanLatArr,
- icon: sampleIcon,
- anchor: 'bottom-center',
- offset: new AMap.Pixel(0, 0)
- });
- this.economicsArr.push(this.smallMarker);
- // this.smallMarker.setMap(this.map);
- });
- baseList.forEach((element) => {
- let lanLatArr = [element.longitude, element.latitude];
- let baseIcon = require('@/assets/img/postion.png');
- let iconMeta = [20, 29];
- let sampleIcon = new AMap.Icon({
- size: new AMap.Size(iconMeta[0], iconMeta[1]), // 图标尺寸
- image: baseIcon,
- imageSize: new AMap.Size(iconMeta[0], iconMeta[1]) // 根据所设置的大小拉伸或压缩图片
- });
- this.baseMarker = new AMap.Marker({
- map: this.map,
- position: lanLatArr,
- icon: sampleIcon,
- anchor: 'bottom-center',
- offset: new AMap.Pixel(0, 0)
- });
- this.baseMarker.setLabel({
- direction: 'right',
- offset: new AMap.Pixel(0, 0), //设置文本标注偏移量
- content: `<div>${element.baseName}</div>` //设置文本标注内容
- });
- this.baseMarkerArr.push(this.baseMarker);
- this.baseMarker.on('click', function (e) {
- financeBaseDetail({ baseId: element.baseId }).then((res) => {
- if (res.code == 200) {
- let treeSmallLabel =
- "<div class='info-small'>" +
- "<h5 class='marker-title'>" +
- res.data.baseName +
- '</h5>' +
- "<div class='marker-content'>" +
- '<p>基地名称:' +
- res.data.baseName +
- '</p>' +
- '<p>种植/养殖/加工作物:' +
- res.data.cropName +
- '</p>' +
- '<p>占地面积:' +
- res.data.baseArea +
- '亩' +
- '</p>' +
- '<p>位置:' +
- res.data.cityName +
- res.data.countyName +
- res.data.townName +
- '</p>' +
- '</div>' +
- '</div>';
- let infoWindow = new AMap.InfoWindow({
- isCustom: true,
- offset: new AMap.Pixel(0, -20),
- content: treeSmallLabel,
- position: lanLatArr
- });
- infoWindow.open(_this.map, lanLatArr);
- }
- });
- });
- this.baseMarker.on('mouseout', function (e) {
- _this.map.clearInfoWindow();
- });
- });
- });
- },
- getTreePlant() {
- treePlant().then((res) => {
- this.treePlant = res.rows;
- });
- }
- }
- };
- </script>
- <style lang='scss' scoped>
- #container {
- width: 100%;
- height: 100vh;
- /deep/ .tdt-pane {
- z-index: auto;
- }
- }
- /deep/ .amap-marker-content {
- .tipMarker {
- color: #555;
- background-color: rgba(255, 254, 239, 0.8);
- border: 1px solid #7e7e7e;
- padding: 2px 6px;
- font-size: 12px;
- white-space: nowrap;
- display: inline-block;
- &:before,
- &:after {
- content: '';
- display: block;
- position: absolute;
- margin: auto;
- width: 0;
- height: 0;
- border: solid transparent;
- border-width: 5px 5px;
- }
- &.top {
- transform: translate(-50%, -110%);
- &:before,
- &:after {
- bottom: -9px;
- left: 0;
- right: 0;
- border-top-color: rgba(255, 254, 239, 0.8);
- }
- &:before {
- bottom: -10px;
- border-top-color: #7e7e7e;
- }
- }
- }
- }
- /deep/ .amap-logo,
- .amap-copyright {
- display: block !important;
- visibility: inherit !important;
- }
- /deep/ .amap-icon {
- overflow: unset !important;
- }
- /deep/ .info-small {
- background-image: url('../assets/img/small-label.png');
- background-repeat: no-repeat;
- background-size: 100% 100%;
- width: 18rem;
- // height: 10rem;
- color: #fff;
- .marker-title {
- margin: 0 auto;
- line-height: 30px;
- }
- .marker-content {
- padding: 0 20px 10px 20px;
- p {
- text-align: left;
- font-size: 12px;
- margin: 0;
- line-height: 28px;
- }
- }
- }
- /deep/ .info-details {
- background-image: url('../assets/img/small-label.png');
- background-repeat: no-repeat;
- background-size: 100% 100%;
- width: 26rem;
- padding-bottom: 13px;
- // height: 10rem;
- color: #fff;
- .marker-title {
- margin: 0 auto;
- line-height: 50px;
- }
- .marker-content {
- display: flex;
- justify-content: space-between;
- padding: 0 20px 0 20px;
- .marker-span {
- display: block;
- }
- p {
- text-align: left;
- font-size: 12px;
- margin: 0;
- line-height: 18px;
- }
- }
- .imgList {
- display: block;
- text-align: left;
- padding: 0 20px;
- .marker-span {
- display: block;
- }
- .marker-imgs {
- display: block;
- line-height: 18px !important;
- width: 376px;
- overflow: auto;
- img {
- width: 40px;
- height: 40px;
- margin: 0 4px;
- cursor: pointer;
- }
- }
- .marker-imgs::-webkit-scrollbar {
- background: transparent;
- opacity: 0.6px;
- width: 10px;
- height: 8px;
- }
- .marker-imgs::-webkit-scrollbar-thumb {
- background: rgba($color: #07a2eb8e, $alpha: 0.6);
- border-radius: 20px;
- -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
- }
- .marker-imgs::-webkit-scrollbar-track {
- /*滚动条里面轨道*/
- -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
- border-radius: 10px;
- background: transparent;
- }
- }
- }
- /deep/ .amap-marker-label {
- border: 0;
- background-color: transparent;
- }
- #mask {
- width: 100%;
- height: 100vh;
- box-shadow: inset 0px 0px 10vw 8vw rgba(0, 10, 34, 0.54);
- position: fixed;
- left: 0;
- right: 0;
- bottom: 0;
- top: 0;
- pointer-events: none;
- }
- @keyframes imageAnimation_32630606 {
- 0% {
- // opacity: 0;
- transform: none;
- }
- 34% {
- // opacity: 1;
- transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg) scaleX(1) scaleY(1)
- translate3d(34vw, 0px, 0px);
- }
- 67% {
- // opacity: 1;
- transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg) scaleX(1) scaleY(1)
- translate3d(67vw, 0px, 0px);
- }
- 100% {
- // opacity: 0;
- transform: rotateX(0deg) rotateY(0deg) rotateZ(0deg) scaleX(1) scaleY(1)
- translate3d(160vw, 0px, 0px);
- }
- }
- .yun-wrap {
- position: fixed;
- left: 0;
- top: 350px;
- width: 100vw;
- pointer-events: none;
- }
- .yun {
- position: fixed;
- left: -500px;
- animation-name: imageAnimation_32630606;
- animation-iteration-count: infinite;
- animation-timing-function: linear;
- animation-duration: 110s;
- animation-delay: 0s;
- -webkit-user-drag: none;
- filter: none;
- pointer-events: none;
- }
- .yun2 {
- bottom: 20px;
- animation-duration: 90s;
- animation-delay: 10s;
- }
- .yun3 {
- top: 100px;
- animation-duration: 120s;
- animation-delay: 15s;
- }
- /deep/ .label-treecomp {
- position: relative;
- background-color: #05dfff;
- color: #fff;
- padding: 6px 10px;
- border-radius: 8px;
- font-size: 14px;
- text-align: center;
- &::before {
- position: absolute;
- top: 26px;
- left: 42%;
- content: '';
- width: 0px;
- height: 0px;
- border: 6px solid transparent;
- border-top-color: #05dfff;
- }
- .smallH {
- position: absolute;
- top: 34px;
- z-index: 99;
- display: block;
- color: #05dfff;
- text-align: center;
- font-size: 14px;
- // left: 38%;
- left: 0;
- width: 100%;
- }
- }
- </style>
|