如何刷新传单标记值

如何解决如何刷新传单标记值

晚上好,

我正在使用 Leaflet.js 来定位测量芽温度的站点。该应用程序需要在温度过低时发出警报。 用户可以查看标记中显示的温度。 该应用需要请求一个 MySQL 数据库来收集所需的记录。

每次刷新时,我不想重新加载地图,因为车站不动。

有没有办法只重新加载制造商,或者更新价值?

这是我加载地图的方式

    function refreshMap(){
        loadMap();
    }
    
    function loadMap(){
    
        var get_map_center = [];
    
        $.ajax({
            type: "POST",url: "https://sub.domain.ch/sql/mysql.php",crossDomain: true,success: result,error: error,dataType: "json"
        });
    
        function error(data)
        {
            alert("Error getting datas from DB");
            console.log("Error getting datas from DB");
            console.log(data);
    
            showMap(46.187164,5.997526,null);
        }
    
        function result(data){
            console.info("data:",data);
    
           for(var y=0; y < data.map_center.length; y++)
           {
                get_map_center.push(data.map_center[y]);
           }
    
            
            var allMarkers = [];
            var markers = L.markerClusterGroup({
                showCoverageOnHover: false
            });

            // THIS ADD AN IMAGE IF THE TEMPERATURE ARE NORMAL; LIMITE OR TO LOW
            var nhtml = '<img src="img/property-types/vineyard.png">';
    
            for (var i = 0; i < data.properties.length; i++) 
            {
                allMarkers.push(L.latLng(data.properties[i]['la'],data.properties[i]['lo']));
    
                if((data.properties[i]['b1']>=data.properties[i]['se'] && data.properties[i]['b1'] < data.properties[i]['se']+1) ||
                        (data.properties[i]['b2']>=data.properties[i]['se'] && data.properties[i]['b2'] < data.properties[i]['se']+1) ||
                        (data.properties[i]['b3']>=data.properties[i]['se'] && data.properties[i]['b3'] < data.properties[i]['se']+1) ||
                        (data.properties[i]['b4']>=data.properties[i]['se'] && data.properties[i]['b4'] < data.properties[i]['se']+1)
                    )
                {
                    nhtml = '<img src="img/property-types/vineyard-orange.png">';
                }
    
                if(((data.properties[i]['b1'] < data.properties[i]['se']) && data.properties[i]['b1'] != null) ||
                        ((data.properties[i]['b2'] < data.properties[i]['se']) && data.properties[i]['b2'] != null) ||
                        ((data.properties[i]['b3'] < data.properties[i]['se']) && data.properties[i]['b3'] != null) ||
                        ((data.properties[i]['b4'] < data.properties[i]['se']) && data.properties[i]['b4'] != null)
                    )
                {   
                    nhtml = '<img src="img/property-types/vineyard-red.png">';
                }
                else{
                    nhtml = '<img src="img/property-types/vineyard.png">';
                }
    
    
                var _icon = L.divIcon({
                    //html: '<img src="' + locations[i][7] +'">',html: nhtml,iconSize:     [40,48],iconAnchor:   [20,popupAnchor:  [0,-48]
                });
    
                var title = data.properties[i]['station'];
                var marker = L.marker(new L.LatLng(data.properties[i]['la'],data.properties[i]['lo']),{
                    title: title,icon: _icon
                });
    
                var str ='';
                if(data.properties[i]['b1'] != null)
                {
                    str = str.concat('<div class="tag price"> ' + data.properties[i]['b1'] + '°C</div>');
                }
                if(data.properties[i]['b2'] != null)
                {
                    str = str.concat('<div class="tag price"> ' + data.properties[i]['b2'] + '°C</div>');
                }
                if(data.properties[i]['b3'] != null)
                {
                    str = str.concat('<div class="tag price"> ' + data.properties[i]['b3'] + '°C</div>');
                }
                if(data.properties[i]['b4'] != null)
                {
                    str = str.concat('<div class="tag price"> ' + data.properties[i]['b4'] + '°C</div>');
                }
    
                marker.bindPopup(
                        '<div class="property">' +
                            '' +
                                '<div class="property-image">' +
    
                                    '<img src="img/stations/station-' + data.properties[i]['id_station'] + '.jpg">' +
                                '</div>' +
                                '<div class="overlay">' +
    
                                    '<div class="info">' +
                                          '<h3>' + data.properties[i]['station'] + '</h3>' +
                                        '<p>' + data.properties[i]['da'] + '</p>' +
                                        // '<figure>' + data.properties[i]['la'] + ' ' + data.properties[i]['lo'] +'</figure>' +
                                        str +
                                        '<p> <a data-field=' + data.properties[i]['id_field'] +'" data-station=' + data.properties[i]['id_station'] +'" href="https://bud.eco-sensors.ch/charts.php?field='+ data.properties[i]['id_field'] +'#st-'+ data.properties[i]['id_station'] +'">Historique</a></p>' +
                              
                                        //'<div class="tag"> ' + data.properties[i]['se'] + '°C</div>' +
                                        
                                      
                                    '</div>' +
                                '</div>' +
                            '' +
                        '</div>',{autoClose: true,closeOnClick: true,closeButton: true}
                );
    
    /*
    *. THOSE VALUES NEEED TO BE UPDATED
    */
    
                 var val = '';
    
                if(!isEmpty(data.properties[i]['b4']))
                {
                    val = data.properties[i]['b4'] +'°C ';
                }
    
                if(!isEmpty(data.properties[i]['b1']))
                {
                    val = val + data.properties[i]['b1'] +'°C ';
                }
    
                if(!isEmpty(data.properties[i]['su']))
                {
                    val = val + data.properties[i]['su'] +'W/m2 ';
                }
    
                if(!isEmpty(data.properties[i]['an']))
                {
                    val = val + data.properties[i]['an'] +'km/h ';
                }
    
                if(!isEmpty(data.properties[i]['sb']))
                {
                    val = val + data.properties[i]['sb'] +'°C (B)';
                }
    
                if(!isEmpty(data.properties[i]['sl']))
                {
                    val = val + data.properties[i]['sl'] +'°C (F)';
                }
                marker.bindTooltip(val,{direction: 'bottom',permanent: true});
                markers.addLayer(marker);
            }
            showMap(get_map_center[0][0],get_map_center[0][1],markers);
    
        } // End result
    }
    
    /*
    * BUILD THE MAP AFTER THE FUNCTION 'result' OF AJAX
    * I need it to make sure that the map is initialized when AJAX finishes loading
    */
    
    function showMap(lat,lng,markers){
    
        var map = L.map('map',{
                //center: [46.187164,5.997526],center: [lat,lng],zoom: 14,scrollWheelZoom: false
            });
    
             
    
            // add an OpenStreetMap tile layer
            L.tileLayer('https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png',{
            //subdomains: '0123',maxZoom: 20,attribution: '<a href="https://openstreetmap.org">OpenStreetMap</a> contributors,<a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>'
            }).addTo(map);
    
            if(markers!=null){
                map.addLayer(markers);  
            }   
    }

也许它可以做得更好,但是这很好用,只是当我发出新的 MySQL 请求以获取新值时,我需要更新绑定工具提示中的值。

我希望我清楚地解释了我的需求;) 是否可以在不重新加载完整地图的情况下重新加载标记(或值)?

非常感谢

解决方法

  1. 在外部(=全局),而不是在函数中创建您的地图
var map = L.map('map',{
    //center: [46.187164,5.997526],center: [0,0],zoom: 14,scrollWheelZoom: false
});

// add an OpenStreetMap tile layer
L.tileLayer('https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png',{
    //subdomains: '0123',maxZoom: 20,attribution: '<a href="https://openstreetmap.org">OpenStreetMap</a> contributors,<a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>'
}).addTo(map);

function loadMap() {
...
  1. 创建一个要素组,您可以在其中添加标记而不是将它们添加到地图中:
var map = ...
// add an OpenStreetMap tile layer
L.tileLayer( ... ).addTo(map); 

var fg = L.featureGroup().addTo(map);

function loadMap() {
...
  1. 调用 loadMap 时,清除 featureGroup,然后向其中添加标记(然后删除旧标记并添加新标记 => 刷新标记)

代替showMap

function result(){ 
 ...

            marker.bindTooltip(val,{direction: 'bottom',permanent: true});
            markers.addLayer(marker);
        }
        showMap(get_map_center[0][0],get_map_center[0][1],markers);

    } // End result
}

我们这个代码:


function result(){ 
 ...

            marker.bindTooltip(val,permanent: true});
            markers.addLayer(marker);
        }
        fg.clearLayers();
        fg.addLayer(markers);
        map.panTo(get_map_center[0][0],get_map_center[0][1]);
    } // End result
}
  1. 如果您不想刷新地图中心,可以使用标志:

var map = ...
var fg = ...
var centered = false;

...

function result(){
...

        fg.clearLayers();
        fg.addLayer(markers);
        if(!centered){
            centered = true;
            // map is centered only once
            map.panTo(get_map_center[0][0],get_map_center[0][1]);
        }

总结:

var map = L.map('map',<a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>'
}).addTo(map);

var fg = L.featureGroup().addTo(map);
var centered = false;


function refreshMap(){
    loadMap();
}

function loadMap(){

    var get_map_center = [];

    $.ajax({
        type: "POST",url: "https://sub.domain.ch/sql/mysql.php",crossDomain: true,success: result,error: error,dataType: "json"
    });

    function error(data)
    {
        alert("Error getting datas from DB");
        console.log("Error getting datas from DB");
        console.log(data);

        showMap(46.187164,5.997526,null);
    }

    function result(data){
        console.info("data:",data);

       for(var y=0; y < data.map_center.length; y++)
       {
            get_map_center.push(data.map_center[y]);
       }

        
        var allMarkers = [];
        var markers = L.markerClusterGroup({
            showCoverageOnHover: false
        });
    
        // THIS ADD AN IMAGE IF THE TEMPERATURE ARE NORMAL; LIMITE OR TO LOW
        var nhtml = '<img src="img/property-types/vineyard.png">';

        for (var i = 0; i < data.properties.length; i++) 
        {
            allMarkers.push(L.latLng(data.properties[i]['la'],data.properties[i]['lo']));

            if((data.properties[i]['b1']>=data.properties[i]['se'] && data.properties[i]['b1'] < data.properties[i]['se']+1) ||
                    (data.properties[i]['b2']>=data.properties[i]['se'] && data.properties[i]['b2'] < data.properties[i]['se']+1) ||
                    (data.properties[i]['b3']>=data.properties[i]['se'] && data.properties[i]['b3'] < data.properties[i]['se']+1) ||
                    (data.properties[i]['b4']>=data.properties[i]['se'] && data.properties[i]['b4'] < data.properties[i]['se']+1)
                )
            {
                nhtml = '<img src="img/property-types/vineyard-orange.png">';
            }

            if(((data.properties[i]['b1'] < data.properties[i]['se']) && data.properties[i]['b1'] != null) ||
                    ((data.properties[i]['b2'] < data.properties[i]['se']) && data.properties[i]['b2'] != null) ||
                    ((data.properties[i]['b3'] < data.properties[i]['se']) && data.properties[i]['b3'] != null) ||
                    ((data.properties[i]['b4'] < data.properties[i]['se']) && data.properties[i]['b4'] != null)
                )
            {   
                nhtml = '<img src="img/property-types/vineyard-red.png">';
            }
            else{
                nhtml = '<img src="img/property-types/vineyard.png">';
            }


            var _icon = L.divIcon({
                //html: '<img src="' + locations[i][7] +'">',html: nhtml,iconSize:     [40,48],iconAnchor:   [20,popupAnchor:  [0,-48]
            });

            var title = data.properties[i]['station'];
            var marker = L.marker(new L.LatLng(data.properties[i]['la'],data.properties[i]['lo']),{
                title: title,icon: _icon
            });

            var str ='';
            if(data.properties[i]['b1'] != null)
            {
                str = str.concat('<div class="tag price"> ' + data.properties[i]['b1'] + '°C</div>');
            }
            if(data.properties[i]['b2'] != null)
            {
                str = str.concat('<div class="tag price"> ' + data.properties[i]['b2'] + '°C</div>');
            }
            if(data.properties[i]['b3'] != null)
            {
                str = str.concat('<div class="tag price"> ' + data.properties[i]['b3'] + '°C</div>');
            }
            if(data.properties[i]['b4'] != null)
            {
                str = str.concat('<div class="tag price"> ' + data.properties[i]['b4'] + '°C</div>');
            }

            marker.bindPopup(
                    '<div class="property">' +
                        '' +
                            '<div class="property-image">' +

                                '<img src="img/stations/station-' + data.properties[i]['id_station'] + '.jpg">' +
                            '</div>' +
                            '<div class="overlay">' +

                                '<div class="info">' +
                                      '<h3>' + data.properties[i]['station'] + '</h3>' +
                                    '<p>' + data.properties[i]['da'] + '</p>' +
                                    // '<figure>' + data.properties[i]['la'] + ' ' + data.properties[i]['lo'] +'</figure>' +
                                    str +
                                    '<p> <a data-field=' + data.properties[i]['id_field'] +'" data-station=' + data.properties[i]['id_station'] +'" href="https://bud.eco-sensors.ch/charts.php?field='+ data.properties[i]['id_field'] +'#st-'+ data.properties[i]['id_station'] +'">Historique</a></p>' +
                          
                                    //'<div class="tag"> ' + data.properties[i]['se'] + '°C</div>' +
                                    
                                  
                                '</div>' +
                            '</div>' +
                        '' +
                    '</div>',{autoClose: true,closeOnClick: true,closeButton: true}
            );

/*
*. THOSE VALUES NEEED TO BE UPDATED
*/

             var val = '';

            if(!isEmpty(data.properties[i]['b4']))
            {
                val = data.properties[i]['b4'] +'°C ';
            }

            if(!isEmpty(data.properties[i]['b1']))
            {
                val = val + data.properties[i]['b1'] +'°C ';
            }

            if(!isEmpty(data.properties[i]['su']))
            {
                val = val + data.properties[i]['su'] +'W/m2 ';
            }

            if(!isEmpty(data.properties[i]['an']))
            {
                val = val + data.properties[i]['an'] +'km/h ';
            }

            if(!isEmpty(data.properties[i]['sb']))
            {
                val = val + data.properties[i]['sb'] +'°C (B)';
            }

            if(!isEmpty(data.properties[i]['sl']))
            {
                val = val + data.properties[i]['sl'] +'°C (F)';
            }
            marker.bindTooltip(val,permanent: true});
            markers.addLayer(marker);
        }

        fg.clearLayers();
        fg.addLayer(markers);
        if(!centered){
            centered = true;
            // map is centered only once
            map.panTo(get_map_center[0][0],get_map_center[0][1]);
        }

    } // End result
}

现在您可以根据需要拨打 loadMap 的频率

,

非常感谢,效果很好。太好了。

我只是添加来纠正这个

map.panTo(get_map_center[0][0],get_map_center[0][1]);

map.panTo([get_map_center[0][0],get_map_center[0][1]]);

最后,地图没有完全显示

enter image description here

我在使用传单时遇到了这个问题,......几年前,我在我的旧代码中发现了以下内容,并在 panto() 之后添加了它

map.panTo([get_map_center[0][0],get_map_center[0][1]]);
map.invalidateSize();

我不知道它是否能解决问题。但我试过了,地图现在很好(并且完全)显示了

我看文档

map.invalidateSize()
检查地图容器大小是否发生变化以及 如果是,则更新地图 - 在更改地图大小后调用它 动态,默认情况下也会为平移设置动画。如果 options.pan 为假, 不会发生平移。如果 options.debounceMoveend 为真,它将 延迟 moveend 事件,这样即使该方法也不会经常发生 被连续调用多次。

这似乎是正确的选择,不是吗?

非常感谢,帮助很大!!!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res