使用leaflet来创建风场地图,点标记,绘图,多图层,解析

下面有文件,自取别忘了点赞!!!!!!!!!!

<!--

 * @Author: fanqingchen

 * @Description:

 * 版本:0.1

-->

<!--

leaflet-velocity 是 leaflet 绘制风场的一个插件,其控制参数如下所示

// 以下为控制参数,后面为默认值

    minVelocity: 0,  // 粒子最小速度( m/s )

    maxVelocity: 10,  // 粒子最大速度( m/s )

    velocityScale: 0.05,  // 风速的比例 ( 粒子的小尾巴长度 )

    particleAge: 90,  // 粒子在再生之前绘制的最大帧数

    lineWidth: 1,  // 绘制粒子的线宽

    particleMultiplier: 1 / 300,  // 粒子计数标量( 粒子密度 )

    frameRate: 15,  // 每秒所需的帧数

    colorScale: [],  // 定义自己的 hex / rgb 颜色数组 ( 粒子颜色 )

-->

在main.js中需要添加css:

import "leaflet/dist/leaflet.css";

import "leaflet-velocity/dist/leaflet-velocity.css";

<template>

    <div>

        <div id="map"></div>

    </div>

</template>

<script>

import L from "leaflet";

import "leaflet-velocity/dist/leaflet-velocity";

import "leaflet.chinesetmsproviders";

//windJson文件可下载,此为风场参数

import windJSON from "./wind-global.json";

import axios from "axios";

export default {

    data() {

        return {

            map: null,

            data: null,

            velocityLayer: null,

            marker: null,

        };

    },

    created() {

        // 获取风场数据

        // axios.get("https://sakitam-fdd.github.io/wind-layer/data/wind.json").then((res) => {

        //     this.data = res.data;

        // });

    },

    mounted() {

        this.init();

    },

    methods: {

        init() {

            //生成风场效果实例

            /**

             * 高德地图

             */

            var Gaode = L.tileLayer.chinaProvider("GaoDe.Normal.Map", {

                maxZoom: 18,

                minZoom: 2,

            });

            var Gaodimgem = L.tileLayer.chinaProvider("GaoDe.Satellite.Map", {

                maxZoom: 18,

                minZoom: 2,

            });

            var Gaodimga = L.tileLayer.chinaProvider("GaoDe.Satellite.Annotion", {

                maxZoom: 18,

                minZoom: 2,

            });

            var Gaodimage = L.layerGroup([Gaodimgem, Gaodimga]);

            // 风场图层实例

            this.velocityLayer = L.velocityLayer({

                displayValues: true,

                displayOptions: {

                    velocityType: "风向/风速",

                    displayPosition: "bottomleft",

                    displayEmptyString: "No wind data",

                },

                data: windJSON, //风场数据

                minVelocity: 1, //Velocity:速率

                maxVelocity: 10,

                velocityScale: 0.005,

                particleAge: 90,

                particleMultiplier: 1 / 1200, //粒子的数量

                lineWidth: 2, //粒子的粗细

                frameRate: 15, //定义每秒执行的次数

                colorScale: ["#7a8ff8", "#61a5f8"],

            });

            //地图图层样式1(标注:可这样使用)

            // var Esri_DarkGreyCanvas = L.tileLayer("GaoDe.Satellite.Map");

            // var Esri_DarkGreyCanvas = L.tileLayer("http://{s}.sm.mapstack.stamen.com/" + "(toner-lite,$fff[difference],$fff[@23],$fff[hsl-saturation@20])/" + "{z}/{x}/{y}.png");

            // 生成地图!!!!!!!!!!!!!!!!!!!

            this.map = L.map("map", {

                center: [30.39459, 120.010067], // 地图中心

                zoom: 8, //缩放比列

                minZoom: 2,

                maxZoom: 18,

                zoomControl: false, // + - 按钮

                doubleClickZoom: true, // 禁用双击放大

                // crs: L.CRS.EPSG3857, //地图样式

                attributionControl: true, // 移除右下角leaflet标识

                // layers: [Esri_DarkGreyCanvas], 地图图层样式1(标注:可这样使用)

                layers: [Gaode],

            });

            L.control

                .zoom({

                    zoomInTitle: "放大",

                    zoomOutTitle: "缩小",

                })

                .addTo(this.map);

            //地图图层样式2

            //风场实例添加到地图上

            // L.tileLayer.chinaProvider("GaoDe.Normal.Map.Annotion", { maxZoom: 30, minZoom: 1 }).addTo(this.map);

            this.velocityLayer.addTo(this.map);

            // L.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png?{foo}", { foo: "bar" }).addTo(this.map);

            //移除图层

            //   this.map.removeLayer(name)

            //添加icon

            var myIcon = L.icon({

                iconUrl: "https://webapi.amap.com/theme/v1.3/markers/n/mark_bs.png",

                iconSize: [19, 33],

                iconAnchor: [22, 94],

                popupAnchor: [-3, -76],

                // shadowUrl: "my-icon-shadow.png",

                // shadowSize: [68, 95],

                // shadowAnchor: [22, 94],

            });

            //添加标记点 官方api

            this.marker = L.marker([30.39459, 120.010067], { icon: myIcon });

            this.marker.addTo(this.map);

            // var marker = L.marker([30.39459, 120.010067]).addTo(this.map);

            // //添加圆形 官方api

            // var circle = L.circle([30.3949, 120.01067], {

            //     color: "red",

            //     fillColor: "#f03",

            //     fillOpacity: 0.5,

            //     radius: 500,

            // }).addTo(this.map);

            // //添加多边形 官方api

            // var polygon = L.polygon([

            //     [38.561954, 128.675429],

            //     [38.561954, 128.475429],

            //     [38.361954, 128.375429],

            // ]).addTo(this.map);

            //你可以为map或者marker之类事件驱动的类上使用on或者off添加或关闭一个事件监听 官方api

            // var popup = L.popup();

            this.marker.on("click", function (e) {

                console.log(e);

                // popup.setLatLng(e.latlng).setContent("你点击了 " + e.latlng.toString());

                // .openOn(this.map);

            });

        },

    },

};

</script>

<style scoped>

#map {

    width: 100%;

    height: 100%;

}

</style>

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值