"y":123.2885100,"x":42.7373900,"label":8}格式且名为label.json的json文件用flask连接前端leaflet绘制聚类图
时间: 2023-11-05 17:30:10 浏览: 141
首先,在Flask中,可以使用`jsonify`函数将Python对象转换为JSON格式。接着,可以使用`send_from_directory`函数将JSON文件发送给前端。在前端,可以使用Leaflet的`L.markerClusterGroup`和`L.geoJSON`函数来绘制聚类图。
以下是一个示例代码:
Flask代码:
```python
from flask import Flask, jsonify, send_from_directory
app = Flask(__name__)
@app.route('/')
def index():
return app.send_static_file('index.html')
@app.route('/label.json')
def label():
return send_from_directory('static', 'label.json')
if __name__ == '__main__':
app.run(debug=True)
```
上面的代码创建了一个Flask应用,将`/`路径映射到`index.html`文件。`/label.json`路径将返回`static/label.json`文件。
前端代码:
```html
<!DOCTYPE html>
<html>
<head>
<title>Leaflet Cluster Map</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/leaflet.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/leaflet.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet.markercluster/1.4.1/leaflet.markercluster.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet.markercluster/1.4.1/MarkerCluster.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet.markercluster/1.4.1/MarkerCluster.Default.css" />
</head>
<body>
<div id="map" style="height: 500px;"></div>
<script>
var map = L.map('map').setView([42.7373900, 123.2885100], 13);
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: 'Map data © <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors, ' +
'<a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, ' +
'Imagery © <a href="https://www.mapbox.com/">Mapbox</a>',
maxZoom: 18
}).addTo(map);
var markers = L.markerClusterGroup();
fetch('/label.json')
.then(response => response.json())
.then(data => {
L.geoJSON(data, {
onEachFeature: function(feature, layer) {
var label = feature.properties.label;
layer.bindPopup("Label: " + label);
},
pointToLayer: function(feature, latlng) {
return L.marker(latlng);
}
}).addTo(markers);
markers.addTo(map);
});
</script>
</body>
</html>
```
上面的代码创建了一个Leaflet地图,并在地图上绘制了聚类图。`L.markerClusterGroup`函数创建了一个聚类组,可以将多个标记添加到其中。在`fetch('/label.json')`中,使用`fetch`函数获取JSON文件。获取到的数据传递给`L.geoJSON`函数,该函数将数据解析为地理JSON对象,并在地图上绘制标记。`onEachFeature`函数用于绑定弹出窗口,`pointToLayer`函数用于绘制标记。最后,将聚类组添加到地图上。
阅读全文