gpt4 book ai didi

javascript - 无法在Leaflet map 上绘制从geoJson获取的点

转载 作者:行者123 更新时间:2023-11-28 04:33:27 25 4
gpt4 key购买 nike

我必须实现一个 Android 应用程序,它在带有 Leaflet 的 WebView 中显示 map ,并使用 JSON 中的数据来绘制一些点。

这是在 WebView 中加载的 HTML 代码:

<title>Leaflet example</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="shortcut icon" type="image/x-icon" href="docs/images/favicon.ico" />
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.0.3/dist/leaflet.css" integrity="sha512-07I2e+7D8p6he1SIM+1twR5TIrhUQn9+I6yjqD53JQjFiMf8EtC93ty0/5vJTZGF8aAocvHYNEDJajGdNx1IsQ==" crossorigin=""/>
<script src="https://unpkg.com/leaflet@1.0.3/dist/leaflet.js" integrity="sha512-A7vV8IFfih/D732iSSKi20u/ooOfj/AGehOKq0f4vLT1Zr2Y+RX7C+w8A1gaSasGtRUZpF/NZgzSAu4/Gc41Lg==" crossorigin=""></script>

<style>
#map {
width: 600px;
height: 400px;
}
</style>

</head>
<body>

<div id='map'></div>
<script src="file:///android_asset/provaquake.js" type="text/javascript">
</script>
<script src="file:///android_asset/map.js"></script>

</body>

这是用Leaflet调用 map 并画线进行测试的javascript文件:

var map = L.map('map').setView([39.74739, -105], 13);

L.tileLayer('https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token=pk.eyJ1IjoibWFwYm94IiwiYSI6ImNpejY4NXVycTA2emYycXBndHRqcmZ3N3gifQ.rJcFIG214AriISLbB6B5aw', {
maxZoom: 18,
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.light'
}).addTo(map);

var myLines = [{
"type": "LineString",
"coordinates": [[-105, 40], [-110, 45], [-115, 55]]
}];

var myStyle = {
"color": "#ff7800",
"weight": 5,
"opacity": 0.65
};

L.geoJSON(myLines, {
style: myStyle
}).addTo(map);

provaquake.js 是一个文件,其中包含使用以下 geoJson 初始化的名为“quake”的变量: https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_hour.geojson

我编写了这段代码来将每次地震的位置添加到 map 上:

L.geoJSON(quake, {
style: function (feature) {
return feature.properties && feature.properties.style;
},
pointToLayer: function (feature, latlng) {
return L.circleMarker(latlng, {
radius: 8,
fillColor: "#ff7800",
color: "#000",
weight: 1,
opacity: 1,
fillOpacity: 0.8
});
}
}).addTo(map);

但似乎不起作用。

除了最后一条关于点的指令之外,所有代码都运行良好,我对 Leaflet 完全陌生,我不知道为什么它不绘制它们

最佳答案

这是一个工作示例。我对您的代码所做的唯一更改是将 fetch 添加到 quake json 并将演示的 map 缩放设置为 3 。仔细检查您的 quake 变量是否正确填充了 quake FeatureCollection 数据。

var map = L.map('map').setView([39.74739, -105], 3);

L.tileLayer('https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token=pk.eyJ1IjoibWFwYm94IiwiYSI6ImNpejY4NXVycTA2emYycXBndHRqcmZ3N3gifQ.rJcFIG214AriISLbB6B5aw', {
maxZoom: 18,
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.light'
}).addTo(map);

var myLines = [{
"type": "LineString",
"coordinates": [
[-105, 40],
[-110, 45],
[-115, 55]
]
}];

var myStyle = {
"color": "#ff7800",
"weight": 5,
"opacity": 0.65
};

L.geoJSON(myLines, {
style: myStyle
}).addTo(map);

fetch('https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_hour.geojson')
.then(function(res) {
if (res.ok === true) {
return res.json();
} else {
alert('Geojson request failed.');
}
})
.then(function(quake) {
L.geoJSON(quake, {
style: function(feature) {
return feature.properties && feature.properties.style;
},
pointToLayer: function(feature, latlng) {
return L.circleMarker(latlng, {
radius: 8,
fillColor: "#ff7800",
color: "#000",
weight: 1,
opacity: 1,
fillOpacity: 0.8
});
}
}).addTo(map);
});
<title>Leaflet example</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="shortcut icon" type="image/x-icon" href="docs/images/favicon.ico" />
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.0.3/dist/leaflet.css" integrity="sha512-07I2e+7D8p6he1SIM+1twR5TIrhUQn9+I6yjqD53JQjFiMf8EtC93ty0/5vJTZGF8aAocvHYNEDJajGdNx1IsQ==" crossorigin="" />
<script src="https://unpkg.com/leaflet@1.0.3/dist/leaflet.js" integrity="sha512-A7vV8IFfih/D732iSSKi20u/ooOfj/AGehOKq0f4vLT1Zr2Y+RX7C+w8A1gaSasGtRUZpF/NZgzSAu4/Gc41Lg==" crossorigin=""></script>

<style>
#map {
width: 600px;
height: 400px;
}
</style>

</head>

<body>

<div id='map'></div>
<script src="file:///android_asset/provaquake.js" type="text/javascript">
</script>
<script src="file:///android_asset/map.js"></script>

</body>

关于javascript - 无法在Leaflet map 上绘制从geoJson获取的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44432591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com