当前位置: 首页 > 知识库问答 >
问题:

用传单地图上的按钮更改标记文本

端木元青
2023-03-14

我有一个带有标记的映射,由一个json文件生成,其中包含一个数值文本。对于标记生成,我使用Beaufify标记插件。这是我使用的代码的一部分

var map = L.map('mapid').setView([43.08, 12.34], 9);

for ( var i=0; i < markers.length; ++i ) {
    options = {
      isAlphaNumericIcon: true,
      text: markers[i].temperatura,
      iconSize: [28, 28],
      borderColor: markers[i].color,
      backgroundColor: markers[i].color,
      innerIconAnchor: [0, 4],
      textColor: '#000;'
    };
    var popup = L.popup({
      pane: 'fixed',
      className: 'popup-fixed',
      autoPan: false,
    }).setContent('my html code');

    L.marker( [markers[i].lat, markers[i].lng], {
        icon: L.BeautifyIcon.icon(options),
        virtual: true
    })
    .bindPopup(popup)
    .addTo( map );
}

我想用最好和最干净的方法,改变选项上的变量文本('markers[I].temperatura'),在按钮上使用onclick操作。

共有1个答案

戚澄邈
2023-03-14

更新标记图标文本:

1)将标记列表保存到全局变量中,例如:

var markerObjects = [];
for (var i=0; i < markers.length; ++i ) {
    //...

    var markerObject = L.marker( [markers[i].lat, markers[i].lng], {
        icon: L.BeautifyIcon.icon(options),
        virtual: true
    })
    .bindPopup(popup)
    .addTo( map );
    markerObjects.push(markerObject);

}

2)单击按钮后,通过marker.seticon方法更新标记图标:

btn.onclick = () => {
    const selectedIndex = ...;  //get the selected index of marker 
    const selectedMarker = markerObjects[selectedIndex];
    let iconOptions = selectedMarker.options.icon.options; //get existing icon properties
    iconOptions.text = txtName.value; //update icon property
    selectedMarker.setIcon(L.BeautifyIcon.icon(iconOptions)); //update marker icon 
};
const map = L.map("map").setView([53.339025, 18.065818], 4);

L.tileLayer("http://{s}.tile.osm.org/{z}/{x}/{y}.png", {
  attribution:
    '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
}).addTo(map);

const locations = [
  {
    name: "Oslo",
    lat: 59.923043,
    lng: 10.752839
  },
  {
    name: "Stockholm",
    lat: 59.339025,
    lng: 18.065818
  },
  {
    name: "Copenhagen",
    lat: 55.675507,
    lng: 12.574227
  },
  {
    name: "Berlin",
    lat: 52.521248,
    lng: 13.399038
  },
  {
    name: "Paris",
    lat: 48.856127,
    lng: 2.346525
  }
];

const markers = locations.map(location => {
  let options = {
    isAlphaNumericIcon: true,
    text: location.name,
    iconSize: [98, 28],
    textColor: "#000;"
  };
  let popup = L.popup({
    className: "popup-fixed",
    autoPan: false
  }).setContent(location.name);

  return L.marker([location.lat, location.lng], {
    icon: L.BeautifyIcon.icon(options),
    virtual: true
  })
    .bindPopup(popup)
    .addTo(map);
});

initControl();

function initControl() {
  

  let selectLocations = document.getElementById("selectLocations");
  let idx = 0;
  for (const marker of markers) {
    const option = document.createElement("option");
    option.value = idx;
    option.text = marker.options.icon.options.text;
    selectLocations.appendChild(option);
    idx++;
  }

  let txtName = document.getElementById("txtName");
  txtName.value = locations[selectLocations.selectedIndex].name;
  selectLocations.onchange = e => {
    txtName.value = markers[e.target.value].options.icon.options.text;
  };

  let btnUpdate = document.getElementById("btnUpdate");
  btnUpdate.onclick = () => {
    const selectedIndex = selectLocations.selectedIndex;
    const selectedMarker = markers[selectedIndex];
    let iconOptions = selectedMarker.options.icon.options; //get existing icon properties
    iconOptions.text = txtName.value; //update text property
    selectedMarker.setIcon(L.BeautifyIcon.icon(iconOptions)); //set icon 
  };
}
<link
  rel="stylesheet"
  href="https://unpkg.com/leaflet@1.3.4/dist/leaflet.css"
/>
<link rel="stylesheet" href="style.css" />
<script src="https://unpkg.com/leaflet@1.3.4/dist/leaflet.js"></script>


<link
  rel="stylesheet"
  href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css"
/>
<link
  rel="stylesheet"
  href="https://marslan390.github.io/BeautifyMarker/leaflet-beautify-marker-icon.css"
/>

<script src="https://marslan390.github.io/BeautifyMarker/leaflet-beautify-marker-icon.js"></script>


<select id="selectLocations">
</select>
<input id="txtName" type="text"/>
<button id="btnUpdate">Update</button> 
<div id="map" style="height:410px; width:570px;"></div>
 类似资料:
  • 我正在用html/jsp页面主体中的Google地图做一个web动态项目。 我制作了一个函数,可以创建一个标记(lat、lng、map),并在标记的参数中使用一个特殊的image.png作为图标。 在我的地图中,我制作了两种不同的样式(地图的颜色…)“白天”和“夜晚”。 我想知道当用户点击夜间更改样式时,我如何更改标记的图标。事实上,标记的颜色不适合这种风格的地图... 我尝试用相同的名称初始化不

  • 问题内容: 如何使文件选择器的按钮文本国际化?例如,此代码向用户呈现的内容: 问题答案: 它通常由浏览器提供并且很难更改,因此解决该问题的唯一方法是CSS / JavaScript hack,

  • 我试图在点击时更改标记的图标编号。我使用的是角度谷歌地图。我正在使用本地资产文件夹而不是服务API设置iNurl。 单击标记时,如何更改上述图标。

  • 下面是使用引导模板的单选按钮组的代码片段。但我试图做的是每次切换选项时更改单选按钮的类部分(即选中单选按钮时,标签类将为“btn btn primary”,如果未选中,标签类将为“btn btn default”)。有人知道如何做到这一点吗?

  • 当我单击一个按钮时,有没有一种方法可以更改TreeView的TreeItem的文本?我尝试执行oracle示例http://docs.oracle.com/javafx/2/uicontrols/tree-view.htm中所示的操作,但我不想通过单击TreeItem更改它,而是单击按钮。第二步,我想使用上下文菜单打开一个带有Textfield的窗口,在这里我可以手动插入文本以更改treeitem

  • 我想更改Google Maps上选定的标记图标,因此我有以下代码: 在这一行,我从下面得到错误: 例外情况如下: