在调用另一个 JSON 之前删除 Leaflet 地图中的所有数据/标记

2024-02-12

我正在检索不同的数据以使用不同的 JSON 文件标记传单地图。每个单选按钮都会检索不同的 JSON 文件。但是,当我选择不同的单选按钮时,我无法清除标记。所有标记只是从一个 JSON 文件添加到另一个 JSON 文件。当我选择不同的单选按钮时,我希望能够清除所有标记。

我四处搜寻并阅读了 map.removeLayer(MyLayer);将删除所有标记。因此,我创建了一个名为“markers”的标记数组,并将其放置在一个名为“markersLayer”的图层中。当我尝试删除“markersLayer”时,它没有在地图上留下任何标记。现在不会绘制任何内容,而不是从不同的 JSON 文件中清除以前的标记。

我只想使用我使用单选按钮选择的特定 JSON 文件中的数据来显示这些标记。

HTML:

<div style="text-align: center;">
    <h1 id="title">Map Visualization 3</h1>
    <label><input type="radio" class="location" name="location" value="locations1" checked="checked">Location Set 1</label>
    <label><input type="radio" class="location" name="location" value="locations2">Location Set 2</label>
    <label><input type="radio" class="location" name="location" value="locations3">Location Set 3</label>
<ul id="location-list"></ul>
    <div id="map" style="width: 80%; max-width: 900px; height: 600px; margin: 0 auto;"></div>
</div>

JS:

var map;
var markers = [];
var markersLayer;
var updateMap = function() {
    var uri = $('input.location:checked').val() + '.json';
    $.getJSON(uri, function(response){
        $('ul#location-list').empty();


        var locationCoor = []; 
        var marker;

        for(var i=0; i < response.length; i++){

            var lat = response[i].latitude;
            var lon = response[i].longitude;
            $('ul#location-list').append('<li>(' + lat + ', ' + lon + ')</li>');
            //console.log(lat, lon);
            locationCoor[i] = [lat, lon];
            //console.log(locationCoor);

            var popup = L.popup()
                .setLatLng([lat, lon])
                .setContent('<h3 style="margin:0 0 3px 0;"><a href="' + response[i].link + '">' + response[i].title + '</a></h3><img width="180px" height="auto" src="' + response[i].imageUrl + '">');

            marker = L.marker([lat, lon], {
                clickable: true
            }).bindPopup(popup, {showOnMouseOver:true});

            markers[i] = marker; 
            console.log(markers);
        }

        markersLayer = L.layerGroup(markers);
        markersLayer.addTo(map);



        var bounds = new L.latLngBounds(locationCoor);
        map.fitBounds(bounds, {padding: [50,50]});
        markers.length = 0;
    });
};

$(document).ready(function(){
    map = L.map('map');
    L.tileLayer('https://{s}.tiles.mapbox.com/v3/examples.map-i87786ca/{z}/{x}/{y}.png', {
        maxZoom: 18,
        id: 'examples.map-20v6611k'
    }).addTo(map);

    $('input.location').on('change', updateMap);
    updateMap();
});

JSON 1:

[
  {
    "title": "Weathertop",
    "link": "http://en.wikipedia.org/wiki/Weathertop",
    "latitude": 38.80,
    "longitude": -77.12,
    "imageUrl": "assets/img/location-images/Weathertop.jpg"
  },
{
  "title": "Rivendell",
  "link": "http://lotr.wikia.com/wiki/Rivendell",
  "latitude": 38.78,
  "longitude": -77.18,
  "imageUrl": "assets/img/location-images/Rivendell2.jpg"
},
{
  "title": "Minas Tirith",
  "link": "http://lotr.wikia.com/wiki/Minas_Tirith",
  "latitude": 38.76,
  "longitude": -77.18,
  "imageUrl": "assets/img/location-images/320px-Minas_Tirith.jpg"
}

]

JSON2:

[
  {
    "title": "Chicago",
    "link": "http://en.wikipedia.org/wiki/Weathertop",
    "latitude": 41.836,
    "longitude": -87.604980,
    "imageUrl": "assets/img/location-images/Weathertop.jpg"
  },
{
  "title": "Detroit",
  "link": "http://lotr.wikia.com/wiki/Rivendell",
  "latitude": 42.326062,
  "longitude": -83.078613,
  "imageUrl": "assets/img/location-images/Rivendell2.jpg"
},
{
  "title": "Indianopolis",
  "link": "http://lotr.wikia.com/wiki/Minas_Tirith",
  "latitude": 39.741,
  "longitude": -86.154785,
  "imageUrl": "assets/img/location-images/320px-Minas_Tirith.jpg"
}

]

您不应该重新创建markersLayer目的。您想要的是创建一次,然后继续从中添加/删除标记。

在您定义的行中markersLayer在文件顶部,您现在还想将其定义为 L.LayerGroup。我们不会重新创建这个对象。

当您想要更新地图时,您将清除地图中所有现有的标记。markersLayer。这是通过调用来完成的markersLayer.clearLayers()。这不会删除markersLayer从地图上看。它只会删除该图层包含的标记。

从此图层中删除所有标记后,您现在可以自由添加新图层到markersLayer.

您的代码将如下所示:

var map;
var markers = [];
var markersLayer = new L.LayerGroup(); // NOTE: Layer is created here!
var updateMap = function() {
  // NOTE: The first thing we do here is clear the markers from the layer.
  markersLayer.clearLayers();

  var uri = $('input.location:checked').val() + '.json';
  $.getJSON(uri, function(response){
    $('ul#location-list').empty();


    var locationCoor = []; 
    var marker;

    for(var i=0; i < response.length; i++){

        var lat = response[i].latitude;
        var lon = response[i].longitude;
        $('ul#location-list').append('<li>(' + lat + ', ' + lon + ')</li>');
        //console.log(lat, lon);
        locationCoor[i] = [lat, lon];
        //console.log(locationCoor);

        var popup = L.popup()
            .setLatLng([lat, lon])
            .setContent('<h3 style="margin:0 0 3px 0;"><a href="' + response[i].link + '">' + response[i].title + '</a></h3><img width="180px" height="auto" src="' + response[i].imageUrl + '">');

        marker = L.marker([lat, lon], {
            clickable: true
        }).bindPopup(popup, {showOnMouseOver:true});

        markersLayer.addLayer(marker); 
        console.log(markers);
    }

    // NOTE: We are no longer recreating the layer here. Remove these lines of code.
    //markersLayer = L.layerGroup(markers);
    //markersLayer.addTo(map);




    var bounds = new L.latLngBounds(locationCoor);
    map.fitBounds(bounds, {padding: [50,50]});
    markers.length = 0;
});
};

$(document).ready(function(){
map = L.map('map');
L.tileLayer('https://{s}.tiles.mapbox.com/v3/examples.map-i87786ca/{z}/{x}/{y}.png', {
    maxZoom: 18,
    id: 'examples.map-20v6611k'
}).addTo(map);

// NOTE: We add the markersLayer to the map here. This way, the layer is only added once.  
markersLayer.addTo(map);

$('input.location').on('change', updateMap);
updateMap();
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在调用另一个 JSON 之前删除 Leaflet 地图中的所有数据/标记 的相关文章

  • 在Java Servlet中获取通过jquery ajax发送的参数[重复]

    这个问题在这里已经有答案了 我在网上搜索这个主题 但找不到有效的示例 我会很高兴有人能给我帮助 这就是我测试的 ajax url GetJson type POST dataType json contentType application
  • CURL 相当于使用 VBA 的 POST JSON 数据

    我知道这与之前提出的一些问题类似 但有些东西仍然对我不起作用 如何执行以下命令 curl X POST data statements json H Content Type application json user username p
  • 来自不同级别的一对值根据邻居成员选择一个

    我正在尝试使用 jq 遍历对象数组并将其转换为 csv 我可以做一些选择和 csv 部分 但我正在努力解决的是如何获得Name每个对象的标签值 json 看起来像这样 Groups Instances InstanceType m5 xla
  • 如何对数组的数组进行 JSON_MODIFY?

    我的结构看起来像这样 Declare layout NVARCHAR MAX N Sections SectionName Section1 SectionOrder 1 Renders RenderName Render1 RenderO
  • 使用 Django 添加额外 \\ 字符的 JSON 编码

    我正在尝试创建一个函数 将包含消息和 Django 模型实例的字典转换为 JSON 然后我可以将其传回客户端 例如 我在 models py 中定义了模型 Test from django db import models class Te
  • 使用 Ajax Jquery post 请求进行 Json 劫持

    昨天 我读了一些关于如何预防的好文章使用 Asp Net MVC 进行 Json 劫持 http haacked com archive 2009 06 24 json hijacking aspx 规则是 永远不要通过 get 请求发送
  • Javascript 将对象推送为克隆

    我将 d3 用于交互式网络应用程序 我需要绑定的数据在交互过程中发生变化 并且由 JSON 变量中的一些选定对象组成 为此 我在 JSON 变量上使用了映射 并进行了一些查询来选择适当的对象 对象被推送到列表中 并且该列表被绑定为新数据 我
  • 参考上一个问题:为什么 VBA 没有加载所有发票详细信息

    除了上一个问题之外 我们在销售发票上仍然存在相同的加载失败问题 下面的 VBA Json 仍然仅加载一行或第一个产品详细信息行 而不是与表中该销售发票合作的所有产品行详细信息 我们希望下面的 VBA 能够根据参数加载发票详细信息 例如 如果
  • 由于 json 字符串化 dict 键导致数据丢失

    考虑下面的例子 gt gt gt import json gt gt gt d 0 potato 0 spud gt gt gt json dumps d 0 potato 0 spud gt gt gt json loads json d
  • mysql_query 保留返回时在表中创建的数据类型?

    我在mysql中有一个表 CREATE TABLE user id INT name VARCHAR 250 我查询表 result mysql query SELECT id name FROM user 我收集结果 while row
  • 如何使用 JSON_TABLE 从 Oracle JSON 列获取键值作为结果集

    我用谷歌搜索了很多 似乎无法找到适合我的简单用例的简单解决方案 我在 Oracle 12C 数据库中有一个 json 列 当然实际上是一个带有 json 约束的 varchar 在该列中我存储了这样的 Map 表示 a 9 0847 b 8
  • JSON 转换带有整数键的 Map

    我有一个测试代码的小样本 我尝试将 Map 转换为 JSON 字符串并返回 在解析 JSON 字符串时 结果映射包含字符串键 1 而不是整数键 1 从而导致测试失败 用作此映射的键的 POJO 也会发生同样的情况 这是预期行为还是我省略了
  • 有没有办法扩展 angular.json 中的配置?

    在构建 Angular 6 应用程序时 我需要同时指定两件事 如果是生产或开发版本 我正在使用的区域设置 In my angular json I have build configurations production fileRepla
  • 我可以将 JSON 字符串转换为 JsonResult 吗?

    我在数据库中存储了一些存储的 JSON 字符串 我想将其作为 JsonResult 返回给客户端 我知道 Json object 将对象转换为 JsonResult 但如果我已经将结果存储在字符串中怎么办 我可以将其转换为 JsonResu
  • 如何将对象从 rake 任务传递给 Rabl 视图

    我正在尝试使用 rabl 从 rake 任务创建 json 文件 下面我有一个简化版本来测试 当我通过 url 查看 articles json 或 articles 2 json 时 我得到了预期的 json 响应 但是当我尝试通过 ra
  • 清理 MongoDB 的输入

    我正在为 MongoDB 数据库程序编写 REST 接口 并尝试实现搜索功能 我想公开整个 MongoDB 接口 我确实有两个问题 但它们是相关的 所以我将它们放在一篇文章中 使用 Python json 模块解码不受信任的 JSON 是否
  • PySpark - RDD 到 JSON

    我有一个 Hive 查询返回以下格式的数据 ip category score 1 2 3 4 X 5 10 10 10 10 A 2 1 2 3 4 Y 2 12 12 12 12 G 10 1 2 3 4 Z 9 10 10 10 10
  • Jackson 的 ObjectMapper 和 SQL 中的 RowMapper

    我们正在使用对象映射器 当将 ObjectMapper 与 RowMapper 一起使用时 是否应该在每个 mapRow 内部 如下所示 声明它 还是在 mapRow 外部声明为类公共成员 我认为根据本文 它应该作为公共类成员在外部 我应该
  • 如何将 JSON 文本转换为 PHP 关联数组

    我将以下 JSON 对象存储在文本文件 data txt 中 player black time 0 from 2c to 3d 我使用 php 阅读 问题 有没有简单的方法可以转换 data到 PHP 关联数组 我尝试过使用json de
  • Rails escape_javascript 通过转义单引号创建无效的 JSON

    ActionView中的escape javascript方法转义撇号 作为反斜杠撇号 解析为 JSON 时会出错 例如 消息 我在这里 在打印时是有效的 JSON message I m here But 输出 I m here 导致无效

随机推荐

  • 哪些错误事件不会触发window.onerror?

    MDN 陈述如下 https developer mozilla org en US docs DOM window onerror 一些 许多error事件不触发window onerror 你必须 专门听他们的 这很好 但是哪些不调用o
  • 从现在开始 5 秒后用 Java 怎么说?

    我正在看日期文档 http www j2ee me javase 6 docs api java util Date html并试图找出如何表达现在 5 秒 这是一些伪代码 import java util Date public clas
  • 从命令行打开 Chrome

    我有以下批处理文件 echo off REM Starts a chrome browser with multiple tabbed sites C Users UserName AppData Local Google Chrome A
  • 两个 TCP/IP 套接字 send() 请求实际上在一个 TCP 消息中处理

    我的 C 程序中有两个 send 查看wireshark 我意识到它们是作为一条 TCP IP 消息发送出去的 我假设这是某种 TCP IP 优化 确定它们足够小 可以一起发送 然而 我正在从头开始重建一个旧程序 并且我正在基于它的 TCP
  • 圣杯。 JSON。他的方法?

    我彻夜未眠寻找有关如何使用的信息JSON in Grails 我找到了信息JSON closure 我们只能使用一种方法 array 没有其他 这是真的吗 下一个小问题 我在这里找到 http www jiramot info mini g
  • 无法在 ruby​​ on Rails 上访问本地主机

    当我运行服务器并转到localhost 3000我收到此错误 ActiveRecord ConnectionNotEstablished 没有带 id 的连接池 主要发现 有问题的代码 activerecord 5 0 0 lib acti
  • 如何在 Symfony 中将实体导出为 CSV?

    我使用以下代码输出 CSV 但运行时出现空白屏幕 基本上我的困惑在于 DoctrineORMQuerySourceIterator 因为我不明白如何正确使用它 我假设我必须列出属性名称 我正在使用索纳塔导出器 https github co
  • 在 Elastic Search 中模拟字段折叠/按字段分组

    Elastic Search 目前 自 0 18 4 起 不支持字段折叠 有没有一个好的方法来模拟这个 以避免N搜索查询 可能不是您正在寻找的答案 但是 据我所知 并且根据this https github com elasticsearc
  • 在 powerbi 中使用相同的过滤器过滤两个表

    我有两个表显示 PowerBI 中的国家 地区数据 一个表包含不同国家 地区的销售数据 另一个表显示每个国家 地区的统计数据 然后我有一个仪表板 其中包含每个表的图表 我想要一个过滤器来过滤两个表中的国家 地区列 即 如果我过滤美国 我将得
  • 编译 32 位二进制文​​件:'__int128' 之前应有非限定 ID

    我正在努力将我的代码移植到 Mac 它可以在我的 64 位 Windows 机器上正常编译 显然我正在使用的库之一 Awesomium 没有编译为 64 位代码 因此我必须将代码编译为 32 位二进制文 件 我在尝试使用 GCC 4 8 编
  • 嵌套组件内的 React.memo 从不调用 areEqual,总是重新渲染

    我突然好奇 React memo 今天的表现如何 看来 React memo 不能在嵌套函数组件中工作 但可以在组件主返回和返回 React memo 组件的嵌套函数中工作 这是预期的行为还是有其他方法使 React memo 与嵌套功能组
  • 用C画形状时用什么?

    我一直遇到一些问题 试图弄清楚 header 对于设法获取屏幕并使用 C 在其中绘制形状很有用 尝试使用 graphics h 但对我不起作用 我想 graphics h 可能应该在 C 中使用 而不是在 C 中使用 我真的不知道 如果有人
  • 接受vertx api中相同键的参数列表

    如何在路由器 GET 方法中接受同一键中的参数列表 例如 我的查询参数名称为 personId 但在 get 请求中 可能会出现多个 列表 personId 如何在 vertx 中处理这个问题 我在中找不到任何这样的方法HttpServer
  • PyQt 文件浏览 - 设置默认选项?

    我一直在尝试在我正在设计的 GUI 中实现一个文件浏览小部件 我正在使用 QFileDialog 模块 它工作得很好 我可以使用以下代码行浏览和保存文件 filenames QFileDialog getOpenFileName 我的小部件
  • 将所有“/”替换为 File.separator

    在Java中 当我这样做时 a b c d replaceAll 我回来了 a b c d 但是当我这样做时 a b c d replaceAll File separator 它抛出 StringIndexOutOfBoundsExcep
  • 从 mongodb 中删除重复的数组值

    在 mongodb 中 我有一个集合 其中数组具有重复的条目 例如 id ObjectId 57cf3cdd5f20a3b0ba009777 Chat 6 string 1348157031 Riyadh 548275320 Mohamma
  • 如何禁用 jqueryui datepicker 中的 Enter 键

    我正在使用 jQueryUI 日期选择器 当用户单击文本框并按 Enter 键时 将填充当前日期 我想避免这种情况 我已经尝试过这个 datepicker on keypress function e if e which 13 e pre
  • 有没有用Python编写的好的构建框架?

    我从 NAnt 切换到使用 Python 来编写构建自动化脚本 我很好奇是否有任何值得使用的构建框架类似于 Make Ant 和 NAnt 但它们是基于 Python 的 例如 Ruby 有 Rake 那么Python呢 Try SCons
  • 设备旋转时丢失“MediaPlayer”(及其他变量)

    我正在为 Android 创建一个音乐播放器 它基本上可以工作 问题是 当我水平转动设备时 我会丢失 Activity 中的所有变量 这是有道理的 因为它被销毁并重新创建 我尝试使用捆绑包通过 onSaveInstanceState 和 o
  • 在调用另一个 JSON 之前删除 Leaflet 地图中的所有数据/标记

    我正在检索不同的数据以使用不同的 JSON 文件标记传单地图 每个单选按钮都会检索不同的 JSON 文件 但是 当我选择不同的单选按钮时 我无法清除标记 所有标记只是从一个 JSON 文件添加到另一个 JSON 文件 当我选择不同的单选按钮