百度地图上显示数据库数据

毕设遇到的问题,实现把数据库中的数据在地图上显示。(经纬度的定位和数据显示)
在这里插入图片描述

  1. 数据库

id 编号   lgn 经度  lat 纬度  date 时间   temp 温度   humi 湿度   ph   Uid  游标设备编号
id 编号
lgn 经度
lat 纬度
date 时间
temp 温度
humi 湿度
ph
Uid 游标设备编号

  1. 创建地图
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=Lo4Wo614TE4gK2lBqLwAQvnfeTynevnB"></script>
<script type="text/javascript">
    var map; // 创建地图全局实例
    var ls_youbiao = '<%=lsyoubiao%>';
 //创建和初始化地图
    function load_map() {
        //从数据库查询数据,json格式
        map = new BMap.Map("main");
        var point = new BMap.Point(120.308228,31.510325);//无锡
        map.centerAndZoom(point, 12); //初始化地图,设置中心点坐标和地图级别。
        map.enableScrollWheelZoom(true); //启用滚轮放大缩小
        map.addControl(new BMap.NavigationControl());//向地图中添加缩放控件
        var ctrlSca = new window.BMap.ScaleControl({  
            anchor: BMAP_ANCHOR_BOTTOM_LEFT  
        });  
        map.addControl(ctrlSca);//比例尺  
        //地图、卫星、混合模式切换
        map.addControl(new BMap.MapTypeControl({mapTypes: [BMAP_NORMAL_MAP, BMAP_SATELLITE_MAP, BMAP_HYBRID_MAP]}));
    }
  1. 连接mysql数据库并以JSON格式保存数据(选择数据库里最新的一条数据)
String driverName = "com.mysql.jdbc.Driver";
   String url = "jdbc:mysql://localhost:3306/sa";
   String username = "root";
   String password = "";
   String lsyoubiao = "";
   Connection dbConn;
   Class.forName(driverName);
   dbConn = DriverManager.getConnection(url, username, password);
   Statement stmt = dbConn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
   String sql = "select temp,humi,ph,Uid,date,lgn,lat,max(date) from datas group by Uid";
   ResultSet rs = stmt.executeQuery(sql);
   JSONObject json = new JSONObject();
   JSONArray jsonMembers = new JSONArray();
   while (rs.next()) {
    JSONObject youbiao = new JSONObject();
    youbiao.put("temp", rs.getString(1));
    youbiao.put("humi", rs.getString(2));
    youbiao.put("ph", rs.getString(3));  
    youbiao.put("uid", rs.getString(4));
    youbiao.put("date", rs.getString(5));
    youbiao.put("lgn", rs.getString(6));
    youbiao.put("lat", rs.getString(7));
    jsonMembers.put(youbiao);
   }
   json.put("youbiao", jsonMembers);
   lsyoubiao =jsonMembers.toString();
   rs.close();
   stmt.close();
   dbConn.close();
  1. 地图显示数据
function map_tag() {
     map.clearOverlays();
        var objRecords = eval("(" + ls_youbiao + ")");//后台得到的数据包含经纬度,json格式的
        var points = new Array();//存放标注点经纬信息的数组
        for ( var i = 0; i < objRecords.length; i++) {
            var json = objRecords[i];
            var p0 = json.lat;
            var p1 = json.lgn;
            var point = new BMap.Point(p0,p1);//循环生成新的地图点
            var marker = new BMap.Marker(point);//按照地图点坐标生成标记
            marker.setAnimation(BMAP_ANIMATION_BOUNCE); //跳动的动画
            //var iw = createInfoWindow(i);//创建信息窗口对象
               
            }
    
            map.addOverlay(points[i]);//把标记的点添加到地图上
          //添加点击事件
            (function(){
       var _json = json;
       var _iw = createInfoWindow(_json);
       var _marker = marker;
       _marker.addEventListener("mouseover",function(){
        this.openInfoWindow(_iw);
          });
      })() 
        }        
   
    }
  1. 完整代码
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page import="java.sql.*"%>
<%@ page import="org.json.*"%>
<%
     String path = request.getContextPath();
   String basePath = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort()+ path + "/";
 %>
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <%
      String driverName = "com.mysql.jdbc.Driver";
   String url = "jdbc:mysql://localhost:3306/sa";
   String username = "root";
   String password = "";
   String lsyoubiao = "";
   Connection dbConn;
   Class.forName(driverName);
   dbConn = DriverManager.getConnection(url, username, password);
   Statement stmt = dbConn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
   String sql = "select temp,humi,ph,Uid,date,lgn,lat,max(date) from datas group by Uid";
   ResultSet rs = stmt.executeQuery(sql);
   JSONObject json = new JSONObject();
   JSONArray jsonMembers = new JSONArray();
   while (rs.next()) {
    JSONObject youbiao = new JSONObject();
    youbiao.put("temp", rs.getString(1));
    youbiao.put("humi", rs.getString(2));
    youbiao.put("ph", rs.getString(3));  
    youbiao.put("uid", rs.getString(4));
    youbiao.put("date", rs.getString(5));
    youbiao.put("lgn", rs.getString(6));
    youbiao.put("lat", rs.getString(7));
    jsonMembers.put(youbiao);
   }
   json.put("youbiao", jsonMembers);
   lsyoubiao =jsonMembers.toString();
   rs.close();
   stmt.close();
   dbConn.close();
%>
<html>
<head>
 <link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/4.2.1/css/bootstrap.min.css">
    <link rel="stylesheet" href="css/style.default.css" id="theme-stylesheet">
<base href="<%=basePath%>">
<title>地图展示</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css">
html {
 height: 100%
}
 body {
 font: 100%/1.4 Verdana, Arial, Helvetica, sans-serif;
 height: 100%;
 margin: 0px;
 padding: 0px;
}
#menu {
 padding: 5px 0px 0px 0px;
 width: 100%;
 height: 7%;
}
#main {
 width: 100%;
 float: left;
 position: fixed;
 height: 87%;
}
</style>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=Lo4Wo614TE4gK2lBqLwAQvnfeTynevnB"></script>
<script type="text/javascript">
    var map; // 创建地图全局实例
    var ls_youbiao = '<%=lsyoubiao%>';
 //创建和初始化地图
    function load_map() {
        //从数据库查询数据,json格式
        map = new BMap.Map("main");
        var point = new BMap.Point(120.308228,31.510325);//无锡
        map.centerAndZoom(point, 12); //初始化地图,设置中心点坐标和地图级别。
        map.enableScrollWheelZoom(true); //启用滚轮放大缩小
        map.addControl(new BMap.NavigationControl());//向地图中添加缩放控件
        var ctrlSca = new window.BMap.ScaleControl({  
            anchor: BMAP_ANCHOR_BOTTOM_LEFT  
        });  
        map.addControl(ctrlSca);//比例尺  
        //地图、卫星、混合模式切换
        map.addControl(new BMap.MapTypeControl({mapTypes: [BMAP_NORMAL_MAP, BMAP_SATELLITE_MAP, BMAP_HYBRID_MAP]}));
    }
    function map_tag() {
     map.clearOverlays();
        var objRecords = eval("(" + ls_youbiao + ")");//后台得到的数据包含经纬度,json格式的
        var points = new Array();//存放标注点经纬信息的数组
        for ( var i = 0; i < objRecords.length; i++) {
            var json = objRecords[i];
            var p0 = json.lat;
            var p1 = json.lgn;
            var point = new BMap.Point(p0,p1);//循环生成新的地图点
            var marker = new BMap.Marker(point);//按照地图点坐标生成标记
            marker.setAnimation(BMAP_ANIMATION_BOUNCE); //跳动的动画
            //var iw = createInfoWindow(i);//创建信息窗口对象
            if(json.temp<17){
            var label = new window.BMap.Label("温度异常", { offset: new window.BMap.Size(20, -10) });
            marker.setLabel(label);//显示marker的title
            }
            points.push(marker);
            map.addOverlay(points[i]);//把标记的点添加到地图上
          //添加点击事件
            (function(){
       var _json = json;
       var _iw = createInfoWindow(_json);
       var _marker = marker;
       _marker.addEventListener("mouseover",function(){
        this.openInfoWindow(_iw);
          });
      })() 
        }        
    }
//创建InfoWindow
    function createInfoWindow(json){
     var opts1 = {title : '<span style="font-size:20px;color:#0A8021">游标信息</span>'};
        var iw = new BMap.InfoWindow("<div style='line-height:1.8em;font-size:12px;'><b>游标编号: </b>"+ json.uid+ "</br><b>温度(℃): </b>"+ json.temp+ "</br><b>湿度(%):</b>"+json.humi+"</br><b>PH值: </b>"+json.ph+"</br></a></div>", opts1);
        return iw;
    }
  //异步调用百度js
    function map_load() {
        var load = document.createElement("script");
        load.src = "http://api.map.baidu.com/api?v=1.4&callback=load_map";
        document.body.appendChild(load);
    }
    window.onload = map_load;
</script>   
</head>
<body onLoad="load_map()">
 <div id="menu">
  <input name="button1" class="btn btn-primary" type="button" id="button1" onClick="map_tag();"
   value="游标显示"
   style="width: 150px; height: 40px; margin: 0px 0px 0px 5px">
   <input name="button2" class="btn btn-primary" type="button" id="button2" onClick="window.location.href='/Bishe_Demo/A001.jsp ';"
   value="游标A001"
   style="width: 150px; height: 40px;margin: 0px 0px 0px 5px">
   <input name="button3" class="btn btn-primary" type="button" id="button3" onClick="window.location.href='/Bishe_Demo/A002.jsp ';"
   value="游标A002"
   style="width: 150px; height: 40px;margin: 0px 0px 0px 5px">
   <input name="button4" class="btn btn-primary"  type="button" id="button4" onClick="window.location.href='/Bishe_Demo/A003.jsp ';"
   value="游标A003"
   style="width: 150px; height: 40px;margin: 0px 0px 0px 5px">  
 </div>
 <hr>
 <div id="main"></div>
</body>
</html>

代码仅供参考!!!

  • 5
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 要实现这个功能,需要以下步骤: 1. 在数据库中存储经纬度信息,可以使用MySQL等关系型数据库或者MongoDB等文档型数据库。 2. 在JSP页面中编写Java代码,通过JDBC连接数据库,查询经纬度信息,并将其存储在Java对象中。 3. 使用百度地图API,在JSP页面中嵌入地图,并将Java对象中的经纬度信息传递给地图API,绘制路径轨迹。 4. 可以使用JavaScript或者jQuery等前端技术,对地图进行交互操作,比如缩放、拖拽等。 需要注意的是,百度地图API需要申请密钥才能使用,具体申请方法可以参考百度地图开发者中心的文档。同时,为了保证数据的安全性,需要对数据库连接进行安全设置,比如使用SSL加密等。 ### 回答2: JSP 作为 Java 服务器页面,可以调用后端的 Java 代码来从数据库中获取经纬度的信息,并将这些信息传递给百度地图 JavaScript API,以在页面上绘制路径轨迹。 首先,需要在后端编写 Java 代码来执行数据库查询操作,获取经纬度信息并将其转换为 JSON 格式或其他格式的数据,以便在前端使用。可以使用 JDBC 连接数据库,执行 SELECT 查询语句,将结果集转换为 JSON 对象或其他 Java 对象。 然后,在前端页面的 JSP 文件中引入百度地图 JavaScript API,通过 API 中提供的绘制轨迹的方法将从数据库中获取到的经纬度信息绘制在地图上。可以创建一个 JavaScript 函数,在页面加载完成后从后端获取经纬度信息,然后使用 API 中的 Polyline 对象绘制路径轨迹。Polyline 对象可以接受一个数组参数,数组中包含多个经纬度坐标点,即路径的两个端点和中途经过的点。 在绘制路径轨迹的过程中,还可以根据需要添加其他功能,例如显示标记点、调整地图缩放级别、添加控件等等。此外,在获取经纬度信息的过程中,还需要考虑如何处理异常情况,例如数据库连接失败、查询结果为空等等。 总之,通过使用 JSP百度地图 JavaScript API,可以方便地将从数据库中获取的经纬度信息在网页上展示为路径轨迹,具有一定的实用价值。 ### 回答3: JSP可以通过数据库调用经纬度,在百度地图显示路径轨迹,具体步骤如下: 1.准备工作 在JSP页面中,需要引用百度地图API的相关库文件,包括: ``` <script type="text/javascript" src="http://api.map.baidu.com/api?v=3.0&ak=您的密钥"></script> <script type="text/javascript" src="http://api.map.baidu.com/library/MarkerClusterer/1.2/src/MarkerClusterer_min.js"></script> ``` 其中`ak`是您在百度地图开放平台申请的密钥,`MarkerClusterer`是用于对多个标记进行聚合显示的组件库。 2.获取数据 使用JDBC连接数据库,并执行相应的SQL语句获取经纬度数据,存储到一个Java List中: ``` List<LatLng> path = new ArrayList<LatLng>(); // 使用JDBC连接数据库,查询经纬度数据并存储到path中 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password"); String sql = "SELECT latitude, longitude FROM track ORDER BY timestamp"; Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql); while (rs.next()) { double lat = rs.getDouble("latitude"); double lng = rs.getDouble("longitude"); LatLng point = new LatLng(lat, lng); path.add(point); } ``` 这里假设数据库中存储的是轨迹数据,包括纬度、经度和时间戳。根据时间戳排序,保证轨迹按照时间顺序绘制。 3.绘制轨迹 将获取到的经纬度数据,使用`Polyline`对象在地图上绘制轨迹: ``` // 创建轨迹线条对象 PolylineOptions polylineOptions = new PolylineOptions(); // 遍历经纬度数据,添加到轨迹线条中 for (LatLng point : path) { polylineOptions.add(point); } // 设置轨迹线条样式 polylineOptions.color(Color.BLUE); polylineOptions.width(5); // 将轨迹线条添加到地图上 Polyline polyline = (Polyline) map.addOverlay(polylineOptions); ``` 在上述代码中,`PolylineOptions`是用于设置轨迹线条样式的类,`color`和`width`分别表示线条颜色和宽度,`map`是`BaiduMap`对象,可通过初始化时返回的`Map`对象获取。 4.聚合标记 如果轨迹点较多,会导致地图上标记过于密集,影响视觉效果。这时可以使用`MarkerClusterer`对标记进行聚合显示: ``` // 创建聚合标记对象 MarkerClusterer clusterer = new MarkerClusterer(map); // 创建轨迹点标记,并添加到聚合标记对象中 for (int i = 0; i < path.size(); i++) { LatLng point = path.get(i); MarkerOptions markerOptions = new MarkerOptions().position(point) .icon(BitmapDescriptorFactory.fromResource(R.drawable.icon_gcoding)) .zIndex(i); Marker marker = (Marker) map.addOverlay(markerOptions); clusterer.addMarker(marker); } // 设置聚合样式 clusterer.setClusterClickable(true); clusterer.setClusterCheckable(false); ``` 在上述代码中,`MarkerOptions`是用于设置标记样式的类,`icon`表示标记图标。`zIndex`属性用于设置标记在同一个位置时的叠放顺序,保证最新的轨迹点可以在前面显示。 以上是通过JSP数据库调用经纬度,在百度地图显示路径轨迹的完整流程。可以根据具体的业务需求,进行相应的修改和扩展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值