文档章节

查询公交线路绘制到supermap上

少侠-你的剑掉了
 少侠-你的剑掉了
发布于 2016/03/23 18:41
字数 945
阅读 43
收藏 0

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

  1. 先说思路

先拿元数据测试,

a.所有公交线路信息,  allbuslines.json

b.所有公交站点信息    allstation.json

c.实时公交站点信息GPS 数据返回

先读取两个json  文件  

然后以key value的形式存在map中


把数据放到map中保存,是因为接口取数据有点慢,特别是这种数据不经常变动的数据。

因为公交线路可能有变动,那就设置个定时器,每天更新一次或者每周更新一次就行,调用初始化方法


下面是测试数据

测试代码   

package com.zte.base.home.util;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import wsdl.taffic.service.ChargePileServicePortTypeProxy;

import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.reflect.TypeToken;
import com.zte.base.home.data.bean.Points;
/**
 * 
 * @author emode
 *
 */

public class TafficCacheManager {
	private static final Logger logger = LoggerFactory.getLogger(TafficCacheManager.class);
	//公交线路
	private static HashMap<String, Object> busLineCacheMap = new HashMap<String, Object>();
	//公交站点
	private static HashMap<String, Object> busStationCacheMap = new HashMap<String, Object>();
	private static String LINENAME = "allbusline.json";
	private static String STATIONNAME = "allstation.json";
	private static String savePath = ConfigReadUtil.getTrafficConfigAsProperties("savePath");
	private TafficCacheManager(){
		init();
	}
	//初始化写入文件
	public static void init(){
		/*savePath = ConfigReadUtil.getTrafficConfigAsProperties("savePath"); 
		putJsonFile("1001",LINENAME);
		putJsonFile("1002",STATIONNAME);*/
		initdata();
	}
	//初始化数据
	public static void initdata(){
		String bus_line_data =getBusInfo("1001");
		String bus_station_data = getBusInfo("1002");
		Gson gson = new Gson();  
		if(bus_line_data==null||bus_station_data==null){
			
		}
		JsonObject bus_line_json = (JsonObject) new JsonParser().parse(bus_line_data);
		JsonObject bus_station_json = (JsonObject) new JsonParser().parse(bus_station_data);
		if(bus_line_json.isJsonNull()||bus_station_json.isJsonNull()){
			logger.info("数据为空!");
		}else{
			JsonArray lineArray = bus_line_json.get("DATA").getAsJsonArray();
			JsonArray stationArray = bus_station_json.get("DATA").getAsJsonArray();
			for(int i=0;i<lineArray.size();i++){ 
				Map<String, Object> map = new HashMap<String, Object>();
				JsonObject jobj = lineArray.get(i).getAsJsonObject();
				map.put("LINE_NO", jobj.get("LINE_NO").getAsString());
				map.put("LINE_NAME", jobj.get("LINE_NAME").getAsString());
				//上行线路
				List<Points> up_list = new ArrayList<Points>();  
				JsonElement up_array = jobj.get("UP_POINT");  //获取上行线路、
				up_list =  gson.fromJson(up_array,new TypeToken<ArrayList<Points>>() {}.getType());
				Collections.sort(up_list, new Comparator<Points>() {
			            public int compare(Points arg0, Points arg1) {
			                return arg0.getP_NO().compareTo(arg1.getP_NO());  //正序
			            }
			        });
				//下行线路
				List<Points> down_list = new ArrayList<Points>();  
				JsonElement down_array = jobj.get("DOWN_POINT");  //获取下行线路
				down_list =  gson.fromJson(down_array,new TypeToken<ArrayList<Points>>() {}.getType());
				Collections.sort(down_list, new Comparator<Points>() {
					public int compare(Points arg0, Points arg1) {
						return arg0.getP_NO().compareTo(arg1.getP_NO());  //正序
					}
				});
				
				map.put("UP_POINT",gson.toJson(up_list));
				map.put("DOWN_POINT", gson.toJson(down_list));
				busLineCacheMap.put(jobj.get("LINE_NAME").getAsString(), map);
			}
			for(int i=0;i<stationArray.size();i++){
				Map<String, Object> map = new HashMap<String, Object>();
				JsonObject jobj = stationArray.get(i).getAsJsonObject();
				map.put("LINE_NO", jobj.get("LINE_NO").getAsString());
				map.put("UP_STATION", gson.toJson(jobj.get("UP_STATION")));
				map.put("DOWN_STATION", gson.toJson(jobj.get("DOWN_STATION")));
				busStationCacheMap.put(jobj.get("LINE_NO").getAsString(), map);
			}
		}
	}
	
	
	//返回消息  
	public static String getBusInfo(String msg){
		ChargePileServicePortTypeProxy proxy = new ChargePileServicePortTypeProxy();
		Map<String , Object> map = new HashMap<String, Object>();
		map.put("MSG_NO", msg);
		String message = null;
		try {
			message = proxy.handleMessage(map.toString());
			return message;
		} catch (RemoteException e) {
			logger.info("网络访问失败! network connection failed");
			//e.printStackTrace();
		}
		return message;
	}
	
	//保存json文件  
	public static void putJsonFile(String msg,String filename){
		ChargePileServicePortTypeProxy proxy = new ChargePileServicePortTypeProxy();
		Map<String , Object> map = new HashMap<String, Object>();
		map.put("MSG_NO", msg);
		String message;
		try {
			message = proxy.handleMessage(map.toString());
			File file = new File(savePath+filename);
			// if file doesnt exists, then create it
			if (!file.exists()) {
				file.createNewFile();
			}
			
			FileWriter fw = new FileWriter(file.getAbsoluteFile());
			BufferedWriter bw = new BufferedWriter(fw);
			bw.write(message);
			bw.close();
		} catch (RemoteException e) {
			logger.info("网络访问失败! network connection failed");
		} catch (IOException e) {
			logger.info("不能写入文件!can not create file!");
			e.printStackTrace();
		}
	}
	
	//通过key值获取  数据
	public static Object getbusLineValueByKey(String key){
		//当数据为空值时,读取数据一遍
		if(busLineCacheMap==null||busLineCacheMap.size()<=0){
			initdata();
		}
		Iterator<Entry<String, Object>> it  = busLineCacheMap.entrySet().iterator();
		while(it.hasNext()){
			Map.Entry<String, Object> entry = it.next();
			if(key.equals(entry.getKey())){
				return entry.getValue();
			}
		}
		return null;
		
	}
	//通过key值获取  公交站点数据
	public static Object getbusStationValueByKey(String key){
		if(busStationCacheMap==null||busStationCacheMap.size()<=0){
			initdata();
		}
		Iterator<Entry<String, Object>> it  = busStationCacheMap.entrySet().iterator();
		while(it.hasNext()){
			Map.Entry<String, Object> entry = it.next();
			if(key.equals(entry.getKey())){
				return entry.getValue();
			}
		}
		return null;
		
	}
	//读取文件
	public static String ReadFile(String path) {  
        File file = new File(path);  
        BufferedReader reader = null;  
        String laststr = "";  
        try {  
        	 reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));  
            String tempString = null;  
            while ((tempString = reader.readLine()) != null) {  
            	 laststr = laststr + new String(tempString.getBytes(),"GBK");  
            }  
            reader.close();  
        } catch (IOException e) {  
            e.printStackTrace();  
        } finally {  
            if (reader != null) {  
                try {  
                    reader.close();  
                } catch (IOException e1) {  
                }  
            }  
        }  
        return laststr;  
    }  

}


这种数据返回到前端需要重新编码才能绘制到supermap上,具体情况根据服务商提供都数据从而采用什么编码




© 著作权归作者所有

下一篇: jsoup 爬小说
少侠-你的剑掉了
粉丝 3
博文 10
码字总数 4963
作品 0
深圳
程序员
私信 提问
SuperMap/SuperMap iDesktop Cross

产品介绍 SuperMap iDesktop Cross 是一款支持跨平台、全开源的桌面GIS应用与开发平台系统,可在 Windows 和 Linux 系统上运行,是国内首款可在 Linux操作系统上运行的桌面GIS系统,实现了G...

SuperMap
2016/05/03
0
0
Android上的Google Map 开发总结

1. 地图和线的绘制 本章设计到的源码请从下面的位置下载, 源码下载时, 请注意修改API Key, 否则地图无法使用 源码下载 1.1 地图上绘制一个Logo 1.2 实现动态的位置回放的功能【动态更新GPS位...

晨曦之光
2012/03/07
585
0
Android上的Google Map 开发总结

1. 地图和线的绘制 本章设计到的源码请从下面的位置下载, 源码下载时, 请注意修改API Key, 否则地图无法使用 源码下载 1.1 地图上绘制一个Logo 1.2 实现动态的位置回放的功能【动态更新GPS位...

晨曦之光
2012/03/09
130
0
数据库查询性能优化之利器—索引(一)

  数据库查询性能优化之利器—索引(一)   最近在做基于Android的公交查询系统的过程中,遇到一个很棘手的问题:换乘算法效率低。在直达查询和一次换乘查询的时候,问题体现的还不是很明...

eddie小英俊
2015/01/02
0
0
sql 高级查询,请各位指教

公交线路(BusRoute) 字段名 字段类型 约束 含义 BRNo NVarhar(4) 主键 公交线路号 Stations Nvarchar(15) 主键 公交站名 Description Nvarchar(100) 公交站描述 如果要查询任意一个站,到...

yiguangtia
2013/12/04
156
7

没有更多内容

加载失败,请刷新页面

加载更多

阿里云视频云正式支持AV1编码格式 为视频编码服务降本提效

今天我们要说的 AV1 可不是我们平时说的 .AVI 文件格式,它是由AOM(Alliance for Open Media,开放媒体联盟)制定的一个开源、免版权费的视频编码格式,可以解决H.265昂贵的专利费用和复杂的...

一肥仔
16分钟前
8
0
软件缺陷静态分析 CodeSonar 5.2 新版发布

对于使用C和C++构建安全关键软件的开发团队而言,CodeSonar一直是首选的静态分析解决方案。在近期发行的版本中,CodeSonar通过使用开放标准来扩展其语言覆盖范围,并增加了对Java、C#、Obj...

旋极科技
16分钟前
5
0
数据迁移

1. insert into values 或 insert into select批量插入时,都满足事务的原子性与一致性,但要注意insert into select的加锁问题。 2. replace into与insert into on duplicate key update都可...

qiang123
23分钟前
6
0
Linux装Windows系统后还不会激活?3招教你搞定

     相信大家已经发现荣耀MagicBook科技尝鲜版有多“香”了,不但可以轻松的将Linux系统装回Windows系统,还足足省下了300大洋!但是装回系统就万事大吉了吗?NoNoNo,我们还需要去激活...

梅丽莎好
25分钟前
6
0
Tomcat8源码分析-请求处理过程

上一篇:Tomcat8源码分析-启动流程-start方法 此篇主要讲Tomcat8从接收请求到处理请求的时序图画出来,并用文字描述一下主要流程 时序图 说明 文字描述流程之前先提示如下两点: 1.Acceptor...

特拉仔
27分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部