聚类结果为{"y":115.9053400,"x":29.1660400,"label":0}格式的json文件,flask读取json文件用leaflet绘制轨迹聚类图
时间: 2023-11-05 13:01:30 浏览: 155
以下是一个简单的示例代码,用于读取包含聚类结果的JSON文件,并使用Flask和Leaflet JS库绘制轨迹聚类图。
```python
from flask import Flask, render_template, jsonify
app = Flask(__name__)
# 定义路由,用于渲染地图页面
@app.route('/')
def index():
return render_template('map.html')
# 定义API接口,用于获取聚类结果数据
@app.route('/data')
def get_data():
# 从文件中读取JSON数据
with open('cluster_data.json', 'r') as f:
data = f.read()
# 将JSON数据转换为Python对象
data = json.loads(data)
# 返回JSON数据
return jsonify(data)
if __name__ == '__main__':
app.run(debug=True)
```
在上面的代码中,我们定义了两个路由:一个用于渲染地图页面,另一个用于获取聚类结果数据。我们将聚类结果存储在名为“cluster_data.json”的文件中,并在“/data”路由中读取该文件,并将其转换为JSON格式的响应。
在我们的HTML模板中,我们使用Leaflet JS库来绘制地图和轨迹聚类图。以下是一个简单的HTML模板示例,用于渲染地图页面:
```html
<!DOCTYPE html>
<html>
<head>
<title>Leaflet Map</title>
<!-- 引入Leaflet JS库 -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/leaflet.min.css" integrity="sha512-q5e6Q5y4q3b6Uwz6U5oI4+9r7V3gBZKp8Vv0FgbRl7mO+gRkW8Vv2Qwj+XZGQdQ0FO0tVJfKjGpN+uNtFJkzTg==" crossorigin="anonymous" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/leaflet.min.js" integrity="sha512-P9q7SLu1+ZKk8iLrP0fVdRJwRcUnV1hKQGg9mZ5O5L6lHmFv2Q4j3q6bOKU6I5z6v+U9LZc0/BZfy6Y0+eNz1Q==" crossorigin="anonymous"></script>
<!-- 定义地图容器的CSS样式 -->
<style>
#map {
height: 100vh;
}
</style>
</head>
<body>
<!-- 定义地图容器 -->
<div id="map"></div>
<script>
// 在页面加载完毕后执行以下代码
window.onload = function() {
// 定义地图容器
var map = L.map('map').setView([29.1660400, 115.9053400], 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>',
maxZoom: 18
}).addTo(map);
// 发起API请求,获取聚类结果数据
fetch('/data')
.then(response => response.json())
.then(data => {
// 将数据转换为图层组
var layers = {};
for (var i = 0; i < data.length; i++) {
var label = data[i].label;
if (!(label in layers)) {
layers[label] = L.layerGroup();
}
var marker = L.marker([data[i].x, data[i].y]);
layers[label].addLayer(marker);
}
// 将图层组添加到地图中
for (var label in layers) {
layers[label].addTo(map);
}
});
};
</script>
</body>
</html>
```
在上面的HTML模板中,我们首先引入了Leaflet JS库,并定义了一个地图容器。接下来,我们使用JavaScript代码定义了一个地图对象,并将OpenStreetMap图层添加到地图中。
在`window.onload`回调函数中,我们发起了一个API请求,以获取聚类结果数据。在收到响应后,我们使用`L.layerGroup()`和`L.marker()`函数将数据转换为一个图层组,并将其添加到地图中。最后,我们将每个图层组添加到地图中,以显示轨迹聚类图。
要运行这个示例代码,您需要将它保存为一个Python文件,并在您的本地计算机上安装Flask和Leaflet JS库。然后,您可以在终端中执行以下命令来启动Flask应用程序:
```
$ export FLASK_APP=app.py
$ flask run
```
在启动应用程序后,您可以在浏览器中访问`http://localhost:5000`,以查看地图和轨迹聚类图。
阅读全文