`
ylzyd12345
  • 浏览: 121612 次
  • 性别: Icon_minigender_1
  • 来自: 江苏
博客专栏
713488f4-d0a9-3f35-997f-199fb0cb3563
玩懂Log,打开Andro...
浏览量:10579
社区版块
存档分类
最新评论

Google Maps API 应用;读取xml文件,实现轨迹回放

阅读更多

前台页面,两个功能一个是定位,一个是轨迹回放。定位的功能是实时访问数据库,每隔6秒访问一次,功能还没有完成,查询出来的数据不是实时更新的,模拟的时候是返回好几条数据,所以定位就会显示几个位置。不看也罢;轨迹回放则访问的是服务器上的XML文件,很好的实现了:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
    <head>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
        <title>Google 地图 API 示例: GGeoXml KML 叠加层</title>
        <script src="http://ditu.google.cn/maps?file=api&amp;v=2&amp;key=ABQIAAAAzr2EBOXUKnm_jVnk0OJI7xSosDVG8KKPE1-m51RBrvYughuyMxQ-i1QfUnH94QxWIa6N4U6MouMmBA&hl=zh-CN" type="text/javascript">
        </script>
        <script type="text/javascript">
            
            var map;
            var geoXml;
            var status = "running";
            var TruckIcon = new GIcon(G_DEFAULT_ICON);
	        TruckIcon.image = "truck.png";
	        TruckIcon.iconSize = new GSize(32, 22);
	        markerOptions = {
	            icon: TruckIcon
	        };
            function initialize(){
                if (GBrowserIsCompatible()) {
                    map = new GMap2(document.getElementById("map_canvas"));
                    map.setCenter(new GLatLng(24.414333333333, 120.726366666667), 12);
                    map.addControl(new GMapTypeControl());
                    map.addControl(new GLargeMapControl());
                    map.enableScrollWheelZoom();
                }
            }
            
            // Stops and starts the tracking function
            function toggleStatus(){
                if (status == "stopped") {
                    status = "running";
                    document.getElementById("statusLink").value = "Running";
                }
                else {
                    status = "stopped";
                    document.getElementById("statusLink").value = "Stopped";
                }
            }
            
            // Refresh map function
            function refreshMap(map){
                if (status == "stopped") {
                    window.setTimeout(function(){
                        refreshMap(map)
                    }, 6000);
                    return;
                }
                var point;
                // AJAX XML Data Download and marker placement, straight 
                // from Google API documentation
                var request = GXmlHttp.create();
                request.open("POST", "http://localhost:8080/GPS/getdate", true);
                request.onreadystatechange = function(){
                    if (request.readyState == 4) {
						map.clearOverlays();
                        var xmlDoc = request.responseXML;
                        var markers = xmlDoc.documentElement.getElementsByTagName("mark");
                        for (var i = 0; i < markers.length; i++) {
                            point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
                            var marker = new GMarker(point,markerOptions);
                            map.addOverlay(marker);
                        }
						var startPoint = new GLatLng(parseFloat(markers[0].getAttribute("lat")), parseFloat(markers[0].getAttribute("lng")));
						map.openInfoWindowHtml(startPoint,"Start Place");
						map.setCenter(point);
                    }
                }
                request.send(null);
                // Reloads map every 6 seconds    
                window.setTimeout(function(){
                    refreshMap(map)
                }, 6000);
            }
			
			function guiji(){
				var point;
                // AJAX XML Data Download and marker placement, straight 
                // from Google API documentation
                var request = GXmlHttp.create();
                request.open("POST", "http://localhost:8080/GPS/getdate?method='guiji'", true);
                request.onreadystatechange = function(){
                    if (request.readyState == 4) {
						map.clearOverlays();
                        var xmlDoc = request.responseXML;
                        var markers = xmlDoc.documentElement.getElementsByTagName("mark");
                        for (var i = 0; i < markers.length; i++) {
                            point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
                            var marker = new GMarker(point,markerOptions);
                            map.addOverlay(marker);
                        }
						var startPoint = new GLatLng(parseFloat(markers[0].getAttribute("lat")), parseFloat(markers[0].getAttribute("lng")));
						map.openInfoWindowHtml(startPoint,"车辆开始的位置");
						map.setCenter(point);
                    }
                }
                request.send(null);
			}
        </script>
    </head>
    <body onload="initialize();">
        <b><a href="#" onclick="refreshMap(map)();">定位</a></b>:
		<input type="submit" value="开始" onclick="toggleStatus();"><input type="submit" value="结束" onclick="toggleStatus();"><input type="text" value="Running" id="statusLink" size="10">
        <br>
		<b><a href="#" onclick="guiji();">轨迹</a></b>
        <div id="map_canvas" style="width: 100%; height: 650px; float:left; border: 1px solid black;">
        </div>
    </body>
</html>

后台:

  • 写连接mysql的配置文件
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/gmaptracker
user=root
password=root
characterEncoding=UTF-8
  •  一个连接mysql的工具类。不知道写的对不对,感觉写的不好,有错误的地方请大虾们指出
package util;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class JdbcMySql {
	static Properties props = null;

	private JdbcMySql() {
	}

	static {
		props = getProperties();
	}

	public static Connection getConn() {
		Connection conn = null;
		if (props != null) {
			// 读取出属性文件里面的内容
			String driver = props.getProperty("driver");
			String url = props.getProperty("url");
			String user = props.getProperty("user");
			String password = props.getProperty("password");
			String characterEncoding = props.getProperty("characterEncoding");
			try {
				Class.forName("com.mysql.jdbc.Driver");
				Class.forName(driver);// 加载驱动
			} catch (ClassNotFoundException e1) {
				System.out.println("驱动没有找到");
				e1.printStackTrace();
			}
			
			try {
				conn = DriverManager.getConnection(url + "?characterEncoding="
						+ characterEncoding, user, password);
			} catch (SQLException e) {
				System.out.println("建立连接出错");
				e.printStackTrace();
			}// 建立连接
		}
		return conn;
	}

	public static void free(ResultSet rs, Statement st, Connection conn) {
		try {

			if (rs != null)
				rs.close();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if (st != null)
					st.close();
			} catch (SQLException e) {
				e.printStackTrace();
			} finally {

				try {
					if (conn != null)
						conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}

	}

	public static Properties getProperties() {
		Properties props = new Properties();
		InputStream is = null;
		try {
			is = JdbcMySql.class.getResourceAsStream("/jdbc_mysql.properties");
			props.load(is);
		} catch (Exception ex) {
			ex.printStackTrace();
			return null;
		} finally {
			if (is != null)
				try {
					is.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
		}
		return props;
	}

}
  •  读写XML文件工具类
package util;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class XMLUtil {
	public static Document getDocument() {
		Connection conn = null;
		Statement st = null;
		ResultSet rs = null;
		String sql = "select * from gmaptracker";
		
		Document document = null;
		Element root = null;
        Element category = null;
        Element latElement = null;
        Element lngElement = null;
        double lat = 0.0;
        double lng = 0.0;
		
		try {
			conn = JdbcMySql.getConn();
			st = conn.createStatement();
			rs = st.executeQuery(sql);

			document = DocumentHelper.createDocument();   
	        //生成一个接点   
	        root = document.addElement("marks");
	        
	       /*
    			 * <?xml version="1.0" encoding="UTF-8"?>    
    				<marks>   
    				  	<mark id="xx" lat="xx" lng="xx"/>   
    				</marks> 
    			 */
			while (rs.next()) {
				category = root.addElement("mark");
				lat = rs.getDouble(4);
				latElement = category.addElement("lat");   
		        latElement.addText(Double.toString(lat));
				lng = rs.getDouble(5);
		        lngElement = category.addElement("lng");   
		        lngElement.addText(Double.toString(lng));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JdbcMySql.free(rs, st, conn);
		}
		return document;
	}
	
	 /**  
     * 写入xml文件地址  
     * @param document 所属要写入的内容  
     * @param outFile 文件存放的地址  
     */  
    public static void writeDocument(Document document, String outFile){   
        try{   
            //读取文件   
            FileWriter fileWriter = new FileWriter(outFile);   
            //设置文件编码   
            OutputFormat xmlFormat = new OutputFormat();   
            xmlFormat.setEncoding("UTF-8");   
            //创建写文件方法   
            XMLWriter xmlWriter = new XMLWriter(fileWriter,xmlFormat);   
            //写入文件   
            xmlWriter.write(document);   
            //关闭   
            xmlWriter.close();   
        }catch(IOException e){   
            System.out.println("文件没有找到");   
            e.printStackTrace();   
        }   
    }
    public static Document readDocument(String outFile){
    	Document document = null;
        try{   
        	SAXReader reader = new SAXReader();   
            document = reader.read(new File(outFile));
        }catch (DocumentException e) {
			e.printStackTrace();
			System.out.println("文件读取出错");
		}
		return document;   
    }
}
  •  一个servlet,相应前台ajax请求,返回xml数据。
package gps.demo;

import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

import util.JdbcMySql;
import util.XMLUtil;

/**
 * Servlet implementation class Gps
 */
public class Gps extends HttpServlet {
	private static final long serialVersionUID = 1L;

	@Override
	public void init() throws ServletException {
		// TODO Auto-generated method stub
		super.init();
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doPost(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		Connection conn = null;
		Statement st = null;
		ResultSet rs = null;
		String sql = "select * from gmaptracker";
		
		Document document = null;
		Element root = null;
        Element category = null;
        int id = 0;
        double lat = 0.0;
        double lng = 0.0;
        String carOwner = null;
		String method = request.getParameter("method");
        System.out.print(method);
        
        if(method.equals("guiji")) {
        	//测试,先在D盘写入车辆轨迹坐标
        	XMLUtil.writeDocument(XMLUtil.getDocument(), "D:\\a.xml");
        	//读取XML
        	document = XMLUtil.readDocument("D:\\a.xml");
        	response.setContentType("text/xml");
			response.getWriter().write(document.asXML());
        } else {

    		try {
    			conn = JdbcMySql.getConn();
    			st = conn.createStatement();
    			rs = st.executeQuery(sql);

    			document = DocumentHelper.createDocument();   
    	        //生成一个接点   
    	        root = document.addElement("marks");
    	        
    	        /*
    			 * <?xml version="1.0" encoding="UTF-8"?>    
    				<marks>   
    				  	<mark id="xx" lat="xx" lng="xx"/>   
    				</marks> 
    			 */
    			while (rs.next()) {
    				category = root.addElement("mark");
    				carOwner = rs.getString(3);
    				category.addAttribute("owner", carOwner);
    				id = rs.getInt(1);
    				category.addAttribute("id",Integer.toString(id));
    				lat = rs.getDouble(4);
    				category.addAttribute("lat", Double.toString(lat)); 
    				lng = rs.getDouble(5);
    		        category.addAttribute("lng", Double.toString(lng));  
    			}
    			System.out.println(document.asXML());
    			//这一句,必须加上
    			response.setContentType("text/xml");
    			response.getWriter().write(document.asXML());
    		} catch (SQLException e) {
    			e.printStackTrace();
    		} finally {
    			JdbcMySql.free(rs, st, conn);
    		}
		}
        
	}
}
  •  web.xml配置servlet
<servlet>
    <servlet-name>Gps</servlet-name>
    <servlet-class>gps.demo.Gps</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Gps</servlet-name>
    <url-pattern>/getdate</url-pattern>
  </servlet-mapping>
  •  附件内容:xml的的操作使用的dom4J,所以要导入包;前台页面中标注图片truck.png放在和html文件同一目录下;数据库表的sql语句。
5
0
分享到:
评论

相关推荐

    Google map 轨迹回放

    利用google map实现轨迹回放利用google map实现轨迹回放

    ArcGIS for JavaScript 车辆轨迹回放

    为了实现回放功能,我们需要对轨迹数据进行处理,包括读取数据源(可能是JSON、KML、GPX等格式),解析出每个位置点的经纬度和时间戳。然后,我们可以创建一个时间轴控件,用于控制轨迹的播放速度和方向。JavaScript...

    google maps api (读取png,jpg,xml)画箭形(初学必看)

    通过这个实践项目,你可以学习到Web开发中的文件读取、数据解析、图像处理以及地图API应用等多个方面的知识。这将有助于提升你的前端开发技能,特别是在地理信息系统(GIS)相关的项目中。记得在实际操作时,遵循...

    Google Maps API编程资源大全

    Google Maps API是Google提供的一项强大的服务,允许开发者在自己的应用程序中集成地图功能,进行地理位置相关的开发。这个"Google Maps API编程资源大全"包含了丰富的资料,帮助开发者深入理解和使用这一技术。 ...

    图书Google Maps API开发大全的各章源码

    2. **事件**:Google Maps API提供了丰富的事件监听器,如点击地图、拖动地图、缩放地图等,开发者可以据此响应用户的交互行为,实现动态的地图应用。 3. **控件**:API支持添加自定义或预定义的控件,如缩放控件、...

    google地图的轨迹回放

    要实现轨迹回放,需要使用Google Maps JavaScript API,特别是其Marker和Polyline对象。Marker用于表示单个位置点,而Polyline则用于连接多个点形成轨迹线。开发者需要动态创建和更新这两个对象,以反映轨迹的变化。...

    Google Maps API开发大全

    Google Maps API是Google提供的一项强大服务,允许开发者将地图功能集成到自己的网站或应用程序中,实现地图展示、定位、路线规划等多种功能。下面我们将详细探讨这个API的一些核心知识点。 一、Google Maps API...

    Google Maps API V3 中文参考文档(JavaScript)

    Google Maps API V3 是 Google Maps 提供的一款强大的地图应用程序接口,允许开发者在网站或应用程序中轻松嵌入谷歌地图。该 API 的 JavaScript 版本提供了丰富的功能和灵活的配置选项,帮助开发者快速构建复杂的...

    Google Maps API开发大全code

    Google Maps API是Google提供的一项服务,允许开发者将地图功能集成到自己的网站或应用程序中,实现自定义地图、定位、导航、地理编码等多种功能。 在压缩包文件"Google Maps API开发大全code.rar"中,你可能会找到...

    Google Maps API v3 (3.16.2) 离线开发包

    Google Maps API(应用程序编程接口)是Google提供的一项服务,允许开发者在自己的网页或应用中嵌入交互式地图。版本3,也称为V3,是Google Maps API的最新版本,它带来了许多改进和优化,包括性能提升、简化接口...

    C#GMap地图开发--轨迹回放功能

    总的来说,C# GMap地图开发提供了一套全面的工具,可以实现复杂的地图应用,包括轨迹回放、自定义图标和线路颜色等功能。开发者需要掌握文件解析、数据结构转换、地图服务接口调用以及UI交互设计等多方面技能,以...

    基于Google Maps API的网络地图服务系统的研究与应用.pdf

    "基于Google Maps API的网络地图服务系统的研究与应用" 摘要:本文研究了基于Google Maps API的网络地图服务系统的设计与实现。Google Maps API是一种开放式、低成本和易用的API,能够快速构建小型的WebGIS服务。...

    java实现google maps api

    Java 实现 Google Maps API 是一个将谷歌地图服务集成到Java应用程序中的过程,它允许开发者利用谷歌地图的强大功能,如定位、路线规划、地理编码、覆盖图层等。本篇文章将深入探讨如何通过Java来调用Google Maps ...

    Google Maps API Android and Javascript Demo

    Google Maps API android demo Eciplse project source code and javacript version Google Maps API and Place Search example html.

    获取Google Maps APIKey

    获取 Google Maps API Key 在 Android 开发中,获取 Google Maps API Key 是一个重要的步骤,特别是...通过获取证书指纹(SHA1)和创建 Google Maps API Key,可以成功地将 Google Maps 集成到 Android 应用程序中。

    Google_Maps_API_V3.rar_Google Maps api v3_谷歌地图

    Google Maps API V3 是谷歌为开发者提供的一个强大工具,用于在网站或应用程序中集成交互式地图功能。这个API允许开发人员自定义地图显示的内容、样式以及交互方式,从而构建出各种基于地理位置的应用。在Google ...

    Google Maps API.pdf

    除了基础功能之外,Google Maps API 还提供了更高级的功能,让开发者可以实现更加复杂的应用场景。 **异步 HTTP 通信:** - **GXmlHttp 和 GDownloadUrl:** 这两个工具可以用于发起异步 HTTP 请求,获取远程服务器...

    Google API开发详解:Google Maps部分

    在《Google API开发详解:Google Maps与Google Earth双剑合璧》这本书中,不仅会介绍这些基础知识,还会探讨如何将Google Maps API与Google Earth API结合使用,创建更具视觉冲击力的3D地图应用。Google Earth API...

Global site tag (gtag.js) - Google Analytics