【问题标题】:Loading GeoJSON layer over OpenStreetMap layer in Leaflet web map在 Leaflet 网络地图中的 OpenStreetMap 图层上加载 GeoJSON 图层
【发布时间】:2019-04-04 03:25:46
【问题描述】:

我正在构建一个 Leaflet web 地图,我使用 OpenStreetMap 作为基础层。

我有一个地块的 .shp 文件,我使用 QGIS 将其转换为 GeoJSON。

我还能够获得在 Leaflet 中正确显示基础图层的 web 地图。

我将免除所有标头代码注入,因为它是标准的,但我一直在尝试在我的基础地图上加载 GeoJSON 层。这是我第一次用 Leaflet 做任何事情,我很迷茫。

如何显示(远程托管的)GeoJSON 图层?而且,理想情况下,如何在叠加时使其不透明度达到 30%?

这是我的代码:

<div id="mapid" style="width: 75%; height: 600px;"></div>
<script>

    var mymap = L.map('mapid').setView([31.807, -99.040], 50);

  // loading GeoJSON file - Here my html and usa_adm.geojson file resides in same folder
$.getJSON("https://www.mywebsite.com/testing/testmap1.geojson",function(data){
// L.geoJson function is used to parse geojson file and load on to map
L.geoJson(data).addTo(mymap);
});

    L.tileLayer('https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token=pk.eythisisthekey', {
        maxZoom: 13,
        attribution: 'Map data &copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, ' +
            '<a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, ' +
            'Imagery © <a href="http://mapbox.com">Mapbox</a>',
        id: 'mapbox.streets'
    }).addTo(mymap);

</script>

【问题讨论】:

  • 代码中 GeoJSON 文件的名称和您评论中的名称不同 - 不过,不知道这是否导致了问题,因为您没有说出问题所在。控制台中是否有任何错误? GeoJSON 检索成功了吗?
  • 啊,评论是我最初基于我的代码的人工制品。 GeoJSON 没有出现,我不知道如何测试获取 .geojson 文件的查询是否有效。
  • 您问题中的代码看起来不错,如果没有有关您的问题的更多详细信息,就无法为您提供帮助。例如。你能分享一个你的 GeoJSON 数据样本吗?

标签: leaflet gis geojson


【解决方案1】:

这是一个简单的解决方案,L.geoJsononEachFeature https://leafletjs.com/examples/geojson/

var myGeojson; // Your layer will be stored here
$.getJSON("https://www.mywebsite.com/testing/testmap1.geojson",function(data){
    myGeojson = L.geoJson(data, {
        onEachFeature: function (feature, layer) {
            // Loop inside each features of your geojson file
            layer.name = 'If you want to add a custom name';
            //creation of the popup
            var popup = L.popup().setContent('Your popup content');
            layer.bindPopup(popup);

            // Set default layer style
            layer.setStyle({
                fillColor: black,
                opacity: 1,
                fillOpacity: 1,
                color: black,
            });

            // When layer hovered
            layer.on('mouseover', function () {
                layer.setStyle({
                    opacity: 0.3,
                    fillOpacity: 0.3,
                });
            });

            // Then when your mouse is out change back
            layer.on('mouseout', function () {
                layer.setStyle({
                    opacity: 1,
                    fillOpacity: 1,
                });
            });
        }
    });
    // If you want to add a custom property/name
    myGeojson['layer_name'] = 'Custom name';
    // Add to your map
    myGeojson.addTo(mymap);
});

【讨论】:

  • 谢谢你,但我如何添加多个图层? (例如,在我的代码中分配为 L.tileLayer() 的 OpenStreetMap 图层?
  • 你只需要addTo(mymap),这就是你所做的,不是吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-20
  • 2020-01-04
  • 2022-07-06
  • 1970-01-01
  • 1970-01-01
  • 2020-02-23
  • 1970-01-01
相关资源
最近更新 更多