• LeaFlet学习之结合turf.js生成简单的等值线demo


    本文主要结合turf.js生成等值线俺,进行展示效

    一、放张图:

    二、全部源码

    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>等值线的生成</title>
        <link href="Script/leaflet/leaflet.css" rel="stylesheet" />
        <style>
            #map
            {
                height: 2000px;
                 1500px;
            }
        </style>
        <script src="Script/leaflet/leaflet.js"></script>
        <script src="Script/leaflet/leaflet.ChineseTmsProviders.js"></script>
        <script src='https://npmcdn.com/@turf/turf/turf.min.js'></script>
    </head>
    <body>
        <div id="map"></div>
        
    </body>
        <script>
            var normalm = L.tileLayer.chinaProvider('TianDiTu.Normal.Map', {
                maxZoom: 18,
                minZoom: 1
            }),
                normala = L.tileLayer.chinaProvider('TianDiTu.Normal.Annotion', {
                    maxZoom: 18,
                    minZoom: 1
                }),
                imgm = L.tileLayer.chinaProvider('TianDiTu.Satellite.Map', {
                    maxZoom: 18,
                    minZoom: 1
                }),
                imga = L.tileLayer.chinaProvider('TianDiTu.Satellite.Annotion', {
                    maxZoom: 18,
                    minZoom: 1
                });
    
            var normal = L.layerGroup([normalm, normala]);
            image = L.layerGroup([imgm, imga]);
    
            var baseLayers = {
                "地图": normal,
                "影像": image,
            }
    
            var overlayLayers = {
                "图": normal,
                "像": image,
            }
    
            var map = L.map("map", {
                center: [31.59, 120.29],
                zoom: 12,
                layers: [normal],
                zoomControl: false
    
            });
            // 创建等值线区域
            var extent = [0, 30, 20, 50];
            var cellWidth = 100;
            var pointGrid = turf.pointGrid(extent, cellWidth, { units: 'miles' });
    
            for (var i = 0; i < pointGrid.features.length; i++) {
                pointGrid.features[i].properties.temperature = Math.random() * 10;
            }
            console.log(pointGrid.features.length);
            //等值线的级数
            var breaks = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    
            var lines = turf.isolines(pointGrid, breaks, { zProperty: 'temperature' });
            //设置颜色
            var myStyle = {
                "color": "#ff7800",
                "weight": 5,
                "opacity": 0.65
            };
            //进行平滑处理
                var _lFeatures = lines.features;
                for(var i=0;i<_lFeatures.length;i++){
                    var _coords = _lFeatures[i].geometry.coordinates;
                    var _lCoords = [];
                    for(var j=0;j<_coords.length;j++){
                        var _coord = _coords[j];
                        var line = turf.lineString(_coord);
                        var curved = turf.bezierSpline(line);
                        _lCoords.push(curved.geometry.coordinates);
                    }
                    _lFeatures[i].geometry.coordinates = _lCoords;
                }
            //geojson数据读取
            L.geoJSON(lines, {
                style: myStyle
            }).addTo(map);
        </script>
    </html>
    

    三、总结

    这里是等值线,可不是等高线,等高线不会相交,等值线可能相交,数据平滑参考牛老师ol4的等值线效果。

  • 相关阅读:
    网站压力测试工具----webbench
    skin.xml
    krpano和react的结合展示
    swiper的相关用法
    js的hover实现方法。
    js的slice和split和splice和substring和substr的区别
    使用JSSDK分享页面
    微信jssdk分享功能开发
    点击复制
    JS的document.all函数使用 示例
  • 原文地址:https://www.cnblogs.com/tuboshu/p/10752335.html
Copyright © 2020-2023  润新知