从数据库中取出经纬度 在百度地图上画轨迹(一条线的那种)。

通过我在博客上找寻 一直没有一个完整的从数据库中取出来然后再在百度地图上画轨迹的文章。那我就在毕设快要做完的时候写一下吧 。
数据库可以是mysql,Oracle。我用的连接池,不过连接方法都一样。
先在数据库里往外取出数据。
取数据之前先定义实体类

public class LanLat {
	private float longitude;
	private float latitude;
	public float getLongitude() {
		return longitude;
	}
	public void setLongitude(float longitude) {
		this.longitude = longitude;
	}
	public float getLatitude() {
		return latitude;
	}
	public void setLatitude(float latitude) {
		this.latitude = latitude;
	}
	@Override
	public String toString() {
		return "LanLat [longitude=" + longitude + ", latitude=" + latitude + ", getLongitude()=" + getLongitude()
				+ ", getLatitude()=" + getLatitude() + ", getClass()=" + getClass() + ", hashCode()=" + hashCode()
				+ ", toString()=" + super.toString() + "]";
	}
	

}

然后就可以用sql语句取数据了,这里用了改写了一个query取数据的工具,是我在网上找的一个视频老师讲的,我觉得用着简单。意思是就可以直接取出来放在list里面,这个是dao层

	public List<LanLat> findguiji(){
		try {
			String string="select LONGITUDE,LATITUDE from DATA ";
			return qr.query(string, new BeanListHandler<LanLat>(LanLat.class));
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}

然后服务层调用dao层,很简单;

public List<LanLat> findguiji(){
		return dataDao.findguiji();
	}

然后servlet层调用服务层,把list传过去,下面两句是把list转换成json型的,setAttribute就是把这个后面转好的数据给前面这个叫做data,传给前端。然后return就是转到这个页面的。(我同学都说我写的代码野,看不太懂)

public String guiji(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
		List<LanLat> list=carService.findguiji();
		JSONArray Js = JSONArray.fromObject(list);
        request.setAttribute("data",Js);
		return "f:/adminjsps/admin/car/lishi.jsp";
	}

前端是我网上粘贴的,我不知道出处。JSONArray这个必须要有,不然传不过来。

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="net.sf.json.JSONArray" %>
<%@ page import="net.sf.json.JSONObject" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
JSONArray jsonArray = (JSONArray)request.getAttribute("data");
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    
    <title>My JSP 'lishi.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<link rel="stylesheet" href="skin/default/datepicker.css"/>
	<style type="text/css">  
 	body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;font-family:"微软雅黑";}  
</style>  
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=E06eb9d756d0eafc722effb355657b4c"></script>
	<script type="text/javascript"  src="/js/jquery.js"></script>
	<script language="javascript"  type="text/javascript" src="/My97DatePicker/WdatePicker.js"></script>
  </head>
  <script type="text/javascript" src="WdatePicker.js"></script>
<body onload="createMap()">
	<div id="allmap"></div>
</body>
</html>
<script type="text/javascript">
	// 百度地图API功能
	var map = new BMap.Map("allmap");
	map.centerAndZoom(new BMap.Point(116.404, 39.915), 5);
	map.enableScrollWheelZoom();
	map.setMapStyle({style:'grassgreen'});
	var json = <%=jsonArray%>;
	var points = [];
		for(var i = 0 ; i <json.length ; i++ ){
			if(i <= json.length -1){
				var polyline = new BMap.Polyline([  
		                                          new BMap.Point(json[i].longitude,json[i].latitude),//起始点的经纬度  
		                                          new BMap.Point(json[i+1].longitude,json[i+1].latitude)//终止点的经纬度  
		                                          ], {strokeColor:"red",//设置颜色   
		                                          strokeWeight:5, //宽度  
		                                          strokeOpacity:0.5});//透明度  
		       map.addOverlay(polyline);  
			}
		}
	//for(var i=0,l=json.length;i<l;i++){
	//	var point = new BMap.Point(json[i].longitude, json[i].latitude);
	//	points[i]=point;
	//}
	//var polyline = new BMap.Polyline(points, {strokeColor:"red", strokeWeight:4, strokeOpacity:0.5});   //创建折线
	//map.addOverlay(polyline);   //增加折线
</script>

中间有俩小工具类,一个是query,一个是beasevrlet。想要的可以搜一下itcast。我是跟着这个视频做的。实在找不着也可以跟我要。

### 回答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从数据库调用经纬度,在百度地图上显示路径轨迹的完整流程。可以根据具体的业务需求,进行相应的修改和扩展。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值