传单地图,通过按钮获取geojson文件的具体数据

2022-01-12 00:00:00 geojson leaflet javascript

我正在尝试使用按钮在我的 geojson 文件的地图特定值 (data.geojson) 上显示.(例如绘制只有值domaine"的地图:violences")

I'm triying to display on my map specific value ( data.geojson) of my geojson file with buttons. (for exemple to plot a map with only value "domaine":"violences ")

我正在寻找一种方法,通过我的地图上的按钮来依赖我的数据(domaine":violences"或其他)?

I am loocking for a way to rely my data ("domaine":"violences" or other)with a buttons on my map ?

非常感谢您抽出宝贵时间.我的js:

Thanks so much in advance for your time. my js:

<script type="text/javascript">
var map = L.map('map');
var terrainTiles = L.tileLayer('http://stamen-tiles-{s}.a.ssl.fastly.net/toner-lite/{z}/{x}/{y}.{ext}', {
    attribution: 'Map tiles by <a href="http://stamen.com">Stamen Design</a>, <a href="http://creativecommons.org/licenses/by/3.0">CC BY 3.0</a> &mdash; Map data &copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>',
    subdomains: 'abcd',
    minZoom: 0,
    maxZoom: 20,
    ext: 'png'
});



terrainTiles.addTo(map);
map.setView([46.5160000, 6.6328200], 10);




L.control.locate(location).addTo(map);

function addDataToMap(data, map) {
    var dataLayer = L.geoJson(data, {
        onEachFeature: function(feature, layer) {
            var popupText = "<b>" + feature.properties.nom
                + "<br>" 

                + "<small>"  + feature.properties.localite 
                + "<br>Rue: " + feature.properties.rue + + feature.properties.num
                + "<br>Téléphone: " + feature.properties.tel

                + "<br><a href= '" + feature.properties.url + "'>Internet</a>";
            layer.bindPopup(popupText); }
        });
    dataLayer.addTo(map);
}

$.getJSON("data.geojson", function(data) { addDataToMap(data, map); });

</script>
</body>
</html>

data.geojson

the data.geojson

{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
   "type": "Point",
   "coordinates":  [ 6.1200622,46.2106091 ]
},
"properties": {
  "nom":"Centre d'entraînement aux méthodes d'éducation active - Genève",
  "rue":"Route des Franchises",
  "num":"11",
  "npa":1203,
  "localite":"Genève",
  "canton":"GE",
  "tel":"022 940 17 57",
  "url":"www.formation-cemea.ch",
  "domaine":"formation   "
}
  },

  {
"type": "Feature",
"geometry": {
   "type": "Point",
   "coordinates":  [ 6.1243056,46.2120426 ]
  },
"properties": {
  "nom":"VIRES",
  "rue":"Rue Ernest-Pictet ",
  "num":"10",
  "npa":1203,
  "localite":"Genève",
  "canton":"GE",
  "tel":"022 328 44 33",
  "url":"www.vires.ch",
  "domaine":"violences   "
  }
}

推荐答案

至于打开/关闭你的类别,你可以使用 Leaflet Layers Control L.control.layers.

As for toggling ON / OFF your categories, you could use Leaflet Layers Control L.control.layers.

至于按类别(在您的情况下为域")对功能进行分组,请参阅我在评论中链接的帖子:传单:如何从单个集合中切换 GeoJSON 功能属性?

As for grouping your features by category ("domaine" in your case), see the post I linked in my comment: Leaflet: How to toggle GeoJSON feature properties from a single collection?

您甚至可以通过直接使用图层组来稍微简化它L.layerGroup 而不是使用中间数组.

You could even slightly simplify it by directly using Layer Groups L.layerGroup instead of using intermediate arrays.

var categories = {},
    category;

var layersControl = L.control.layers(null, null).addTo(map);

function addDataToMap(data, map) {
  L.geoJson(data, {
    onEachFeature: function(feature, layer) {
      category = feature.properties.domaine;
      // Initialize the category layer group if not already set.
      if (typeof categories[category] === "undefined") {
        categories[category] = L.layerGroup().addTo(map);
        layersControl.addOverlay(categories[category], category);
      }
      categories[category].addLayer(layer);
    }
  });
  //dataLayer.addTo(map); // no longer add the GeoJSON layer group to the map.
}

$.getJSON("data.geojson", function(data) {
  addDataToMap(data, map);
});

演示:https://plnkr.co/edit/H6E6q0vKwb3RPOZBWs27?p=preview

相关文章