使用Flask框架创建一个Web应用程序,将聚类结果作为API接口返回给前端。在前端使用Leaflet地图库绘制地图,并通过AJAX请求调用Flask API接口获取聚类结果。 将聚类结果中的每个聚类点作为一个标记点添加到地图上,并根据聚类结果给出不同的颜色。
时间: 2024-05-28 17:15:29 浏览: 133
以下是一个简单的示例代码:
Flask后端代码:
```python
from flask import Flask, jsonify
from sklearn.cluster import KMeans
app = Flask(__name__)
@app.route('/api/clustering')
def clustering():
# 假设已经有了一些数据点,存储在data中
data = [[34.56, -118.23], [34.57, -118.24], [34.58, -118.25], [34.59, -118.26], [34.60, -118.27], [34.61, -118.28], [34.62, -118.29], [34.63, -118.30]]
# 使用KMeans算法进行聚类
kmeans = KMeans(n_clusters=3).fit(data)
labels = kmeans.labels_
centers = kmeans.cluster_centers_
# 将聚类结果以JSON格式返回给前端
result = {'labels': labels.tolist(), 'centers': centers.tolist()}
return jsonify(result)
if __name__ == '__main__':
app.run(debug=True)
```
前端代码:
```html
<!DOCTYPE html>
<html>
<head>
<title>Leaflet Clustering Demo</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" integrity="sha512-4J2Q4QyLc0AcGkCJvTfW7X8+aYuhZD7Bh1NpJWqxN8gLfJyOj6zrgeOeLlE9YhRf5g5CwE5+1M6m1b6j3U6e5g==" crossorigin="" />
<style>
#mapid { height: 600px; }
</style>
</head>
<body>
<div id="mapid"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.7.1/leaflet.js" integrity="sha512-6dWkEkpF1/3z3j+bsG8/3ZCfLz0oJQxu+eX8W1C4ZJi25D7N4d4Q8VQJHlP4/OGtT9TtXjB7uZJYsZ7D4KvB8Q==" crossorigin=""></script>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
$(document).ready(function() {
// 创建地图
var mymap = L.map('mapid').setView([34.58, -118.25], 11);
// 添加地图图层
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 18,
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>',
id: 'mapbox/streets-v11',
tileSize: 512,
zoomOffset: -1
}).addTo(mymap);
// 发送AJAX请求获取聚类结果
$.getJSON('/api/clustering', function(result) {
var labels = result.labels;
var centers = result.centers;
// 绘制聚类点
for (var i = 0; i < centers.length; i++) {
var center = centers[i];
var label = labels[i];
var marker = L.marker(center);
if (label == 0) {
marker.addTo(mymap).bindPopup('Cluster 1').openPopup();
} else if (label == 1) {
marker.addTo(mymap).bindPopup('Cluster 2');
} else if (label == 2) {
marker.addTo(mymap).bindPopup('Cluster 3');
}
}
});
});
</script>
</body>
</html>
```
在这个示例中,我们使用了Leaflet地图库来绘制地图,并使用了AJAX请求调用Flask API接口获取聚类结果。在获取到聚类结果之后,我们将聚类点作为标记点添加到地图上,并根据聚类结果给出不同的颜色。您可以根据自己的需求对这个示例进行修改和扩展。
阅读全文