django不用orm只有城市的mysql数据怎么做搜索省后显示该省热力地图china.js
2条回答 默认 最新
关注让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
要实现这个问题,可以按照以下步骤进行:- 获取城市数据 在mysql中直接查询城市数据,并通过django视图返回给前端页面。例如:
import pymysql def get_cities(request): conn = pymysql.connect(host='localhost', port=3306, user='root', password='password', db='city_db') cursor = conn.cursor() cursor.execute("SELECT id, province, city, longitude, latitude FROM cities") cities = [dict(zip(('id', 'province', 'city', 'longitude', 'latitude'), row)) for row in cursor.fetchall()] cursor.close() conn.close() return render(request, 'cities.html', {'cities': cities})- 实现热力地图 在前端页面引入china.js,并通过ajax请求后端数据,最后将数据和地图渲染到页面上。示例代码:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>热力地图</title> <style type="text/css"> #map { height: 500px; width: 100%; } </style> <script src="https://cdn.bootcdn.net/ajax/libs/echarts/4.7.0/echarts-en.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/echarts/4.7.0/extension/bmap.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script> </head> <body> <div id="map"></div> <script type="text/javascript"> var myChart = echarts.init(document.getElementById('map')); myChart.showLoading(); $.ajax({ url: '/search/', type: 'POST', data: { province: '广东省' }, dataType: 'json', success: function (data) { myChart.hideLoading(); myChart.setOption(option = { bmap: { center: [113.23, 23.16], zoom: 6, roam: true }, visualMap: { min: 0, max: 100, text: ['高', '低'], calculable: true, color: ['#f5c606', '#fb3c30'], textStyle: { color: '#fff' } }, series: [ { name: '城市', type: 'heatmap', coordinateSystem: 'bmap', data: data, pointSize: 5, blurSize: 5 } ] }); } }); </script> </body> </html>- 实现搜索 在django视图中获取搜索参数,对城市数据进行筛选,返回符合条件的数据给前端页面。示例代码:
def search_city(request): if request.method == 'POST': province = request.POST.get('province') conn = pymysql.connect(host='localhost', port=3306, user='root', password='password', db='city_db') cursor = conn.cursor() cursor.execute("SELECT id, city, longitude, latitude, count(*) FROM cities WHERE province=%s GROUP BY city", [province]) cities = [dict(zip(('name', 'value'), [row[1], row[4]])) for row in cursor.fetchall()] cursor.close() conn.close() return JsonResponse(cities, safe=False)完整代码:
import pymysql from django.shortcuts import render from django.http import JsonResponse def get_cities(request): conn = pymysql.connect(host='localhost', port=3306, user='root', password='password', db='city_db') cursor = conn.cursor() cursor.execute("SELECT id, province, city, longitude, latitude FROM cities") cities = [dict(zip(('id', 'province', 'city', 'longitude', 'latitude'), row)) for row in cursor.fetchall()] cursor.close() conn.close() return render(request, 'cities.html', {'cities': cities}) def search_city(request): if request.method == 'POST': province = request.POST.get('province') conn = pymysql.connect(host='localhost', port=3306, user='root', password='password', db='city_db') cursor = conn.cursor() cursor.execute("SELECT id, city, longitude, latitude, count(*) FROM cities WHERE province=%s GROUP BY city", [province]) cities = [dict(zip(('name', 'value'), [row[1], row[4]])) for row in cursor.fetchall()] cursor.close() conn.close() return JsonResponse(cities, safe=False)cities.html:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>搜索热力图</title> <style type="text/css"> #map { height: 500px; width: 100%; } .search-box { margin-bottom: 20px; } .search-box input { width: 150px; height: 30px; line-height: 30px; } .search-box button{ width: 80px; height: 30px; margin-left: 10px; } </style> <script src="https://cdn.bootcdn.net/ajax/libs/echarts/4.7.0/echarts-en.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/echarts/4.7.0/extension/bmap.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script> </head> <body> <div class="search-box"> <input type="text" id="province" placeholder="请输入要查询的省份"> <button onclick="searchCity()">查询</button> </div> <div id="map"></div> <script type="text/javascript"> var myChart; function initMap(data) { myChart = echarts.init(document.getElementById('map')); myChart.setOption(option = { bmap: { center: [113.23, 23.16], zoom: 6, roam: true }, visualMap: { min: 0, max: 100, text: ['高', '低'], calculable: true, color: ['#f5c606', '#fb3c30'], textStyle: { color: '#fff' } }, series: [ { name: '城市', type: 'heatmap', coordinateSystem: 'bmap', data: data, pointSize: 5, blurSize: 5 } ] }); } function searchCity() { var province = $("#province").val(); $.ajax({ url: '/search/', type: 'POST', data: { province: province }, dataType: 'json', success: function (data) { if (myChart) { myChart.clear(); } initMap(data); } }); } initMap([]); </script> </body> </html>解决 无用评论 打赏 举报