前端添加一个搜索框,在搜索框中搜索野生动物的名字,通过后端访问数据库,查询野生动物对应的省份名称数据,获得json类型的列表数据,省份名称是中文,返回到前端, 前端使用高德api将获得的省份名称转为位置信息,并在地图上添加标记,代码怎么写
时间: 2023-10-05 12:12:41 浏览: 84
mapguide空间数据搜索
前端代码:
HTML部分:
```html
<input type="text" id="search-input" placeholder="输入野生动物名称">
<button id="search-btn">搜索</button>
<div id="map-container"></div>
```
JS部分:
```javascript
// 初始化地图
var map = new AMap.Map("map-container", {
resizeEnable: true,
zoom: 4,
center: [108.953098, 34.2778] // 默认中心点坐标
});
// 绑定搜索按钮点击事件
document.querySelector("#search-btn").addEventListener("click", function() {
var keyword = document.querySelector("#search-input").value;
if (keyword) {
// 发送搜索请求
fetch("/search?keyword=" + keyword)
.then(function(response) {
return response.json();
})
.then(function(data) {
// 处理搜索结果
if (data && data.length) {
// 遍历搜索结果,添加标记
data.forEach(function(item) {
var lnglat = item.location.split(",");
var marker = new AMap.Marker({
position: lnglat,
title: item.province
});
marker.setMap(map);
});
// 调整地图视野,显示所有标记
map.setFitView();
} else {
alert("没有找到对应的省份信息");
}
})
.catch(function(error) {
console.log(error);
alert("搜索出错");
});
} else {
alert("请输入野生动物名称");
}
});
```
后端代码:
```python
from flask import Flask, request, jsonify
import pymysql
app = Flask(__name__)
# 数据库连接信息
db_config = {
"host": "localhost",
"user": "root",
"password": "123456",
"database": "wildlife"
}
# 处理搜索请求
@app.route("/search")
def search():
keyword = request.args.get("keyword")
if not keyword:
return jsonify([])
# 连接数据库
conn = pymysql.connect(**db_config)
cursor = conn.cursor()
# 查询省份名称对应的位置信息
cursor.execute("SELECT * FROM wildlife WHERE name LIKE %s", ("%" + keyword + "%",))
result = cursor.fetchall()
# 关闭数据库连接
cursor.close()
conn.close()
# 处理搜索结果
data = []
for item in result:
data.append({
"province": item[0],
"location": item[1]
})
return jsonify(data)
if __name__ == "__main__":
app.run()
```
需要注意的是,这里使用了高德地图API,需要在HTML页面中引入高德地图的JS库,在后端使用pymysql库连接MySQL数据库。同时,为了简化起见,这里的搜索是模糊匹配,直接在SQL语句中使用LIKE关键字,实际应用中可能需要更复杂的逻辑。
阅读全文