使用百度地图api模拟实时定位页面 完整示例
效果:使用百度地图api在页面上显示车辆的实时位置,并有自动刷新和手动刷新两种方式可以选择。每次刷新后,都会在地图上显示车辆的最新位置。
示例运行效果截图:
步骤
1. 首先,我们要创建一个一个main方法,用来往一个txt文件中不断地写新的坐标,来模拟GPS设备不断获取的坐标数据。
所以我们先写一个任务,它的作用是产生一个新的位置坐标,并将其写入一个名为position.txt
的文档中。
package com.icbc.dataDisplayService.bean;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Random;
public class TimerTask extends java.util.TimerTask {
// private Position position;
@Override
public void run() {
//随机生成坐标
//lon的取值范围是121.4600-121.4800
//lat的取值范围是31.2200-31.2800
Random randomLon = new Random();
Random randomLat = new Random();
double lon = ((double)(1214600+randomLon.nextInt(200)))/10000;
double lat = ((double)(312200+randomLon.nextInt(600)))/10000;
// this.position.setLon(lon);
// this.position.setLat(lat);
//把他写到文件里
File positionFile = new File("D:\\Myapplication\\java\\GPSDataDisplayService\\src\\main\\java\\com\\icbc\\dataDisplayService\\position.txt");//文件路径
try{
FileWriter fw = new FileWriter(positionFile,true);
BufferedWriter bw = new BufferedWriter(fw);
bw.write(String.valueOf(lon)+"\n");//这里要写String类型,先写经度
bw.write(String.valueOf(lat)+"\n");//写纬度
bw.flush();
bw.close();
fw.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
注:
- 经度和纬度都是利用随机数生成的,范围最好不要波动太大
- 文件的路径最写成绝对路径,否则有可能找不到。
之后在main方法中定时执行这个任务,我这里设置的时间是5秒,也就是每隔五秒钟向txt文档中写入一个新的坐标点。
package com.icbc.dataDisplayService.bean;
import com.icbc.dataDisplayService.dao.CarDao;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.io.*;
import java.nio.Buffer;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
public class Main {
public static void main(String[] args) {
Timer timer = new Timer();
System.out.println("创建");
timer.schedule(new TimerTask(),0,5*1000);//每隔5秒将一个新点的坐标写入txt文件
}
}
别忘了创建实体类Positon
package com.icbc.dataDisplayService.bean;
public class Position {
private double lon;
private double lat;
public Position(double lon, double lat) {
this.lon = lon;
this.lat = lat;
}
public double getLon() {
return lon;
}
public void setLon(double lon) {
this.lon = lon;
}
public double getLat() {
return lat;
}
public void setLat(double lat) {
this.lat = lat;
}
@Override
public String toString() {
return "Position{" +
"lon=" + lon +
", lat=" + lat +
'}';
}
}
2.创建TestController.java
这个Controller用于和前端交互和传递数据,前端页面每发来一次请求,此Controller就去position.txt
中读取最新的一条数据并返回此坐标点。
package com.icbc.dataDisplayService.controller;
import com.icbc.dataDisplay