大数据应用 快速生成百度地图大数据覆盖物的方法研究
沉沙 2018-10-11 来源 : 阅读 917 评论 0

摘要:本篇教程介绍了大数据应用 快速生成百度地图大数据覆盖物的方法研究,希望阅读本篇文章以后大家有所收获,帮助大家对大数据云计算大数据应用的理解更加深入。

本篇教程介绍了大数据应用 快速生成百度地图大数据覆盖物的方法研究,希望阅读本篇文章以后大家有所收获,帮助大家对大数据云计算大数据应用的理解更加深入。

<

 由于必须大批量的加载覆盖物,要求必须要秒级,在看了百度提供的mapv大数据展示,有所启发,地址://mapv.baidu.com/gallery.html
因为之前数据都存在数据库,通过下载demo里面的文件,发现他们加载的基本都是csv或者json文件,我就想如果对于静态数据,将我所有多的数据放到文件里面直接加载再好不过,于是我就进行了代码的编写,首先是生成能够解析的文件,对照文件格式分别生成了画线段和面的方法,代码大概如下:
package usi.product.showfile;

import java.io.IOException;
import java.nio.charset.Charset;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.csvreader.CsvWriter;

/**
 * 
 * @author Rawirm
 *这个类用来生成csv文件,该文件用来加载的是道路的信息,道路信息一条占一行进行存储的
 */
public class ProduceBuildingFile {

    public static void main(String[] args) throws IOException {
        List  list=getDBData();
        List  list2=dealGroupMsg2(list);
        writeFile(list2,"H://移动大数据//测试数据等//buidingString.csv");
        System.out.println("文件已经生成!");
    }

    public static List  dealGroupMsg2(List rs){
        List list=new ArrayList();
        Map<String, List> result = null;
        if(rs.size() > 0){
            result=new HashMap<String, List>(); 
           for (int i=0;i<rs.size();i++) {
            String key=rs.get(i).getGroupid();  
            String value="["+rs.get(i).getLongitude()+","+rs.get(i).getLatitude()+"]";
            if(result.containsKey(key)){
                result.get(key).add(value);     
           }else{
               List valueList = new ArrayList();
               valueList.add(value);
               result.put(key, valueList);

           }
         }
     }
         Set s = result.keySet();
          for(String key : s){
              JsonString js=new JsonString();
                js.setGroupid(key);
                js.setCoordinate(result.get(key));
                list.add(js);
          }
         return list;
        }

    /**
     * 连接数据库的方法
     */
    public static List  getDBData(){
            List list =new ArrayList();
            Connection con = null;// 创建一个数据库连接
            PreparedStatement pre = null;// 创建预编译语句对象,一般都是用这个而不用Statement
            ResultSet rs = null;// 创建一个结果集对象
            try
            {
                Class.forName("oracle.jdbc.driver.OracleDriver");// 加载Oracle驱动程序
                System.out.println("开始尝试连接数据库!");
                String url = "jdbc:oracle:" + "thin:@localhost:1521:test";// 127.0.0.1是本机地址,XE是精简版Oracle的默认数据库名
                String user = "****";// 用户名,系统默认的账户名
                String password = "****";// 你安装时选设置的密码
                con = DriverManager.getConnection(url, user, password);// 获取连接
                System.out.println("连接成功!");                            
                String sql = "select t.pointid,t.groupid,t.longitude,t.latitude from road_building_msg_test t where t.groupid like ‘b%‘   order by t.pointid ";// 预编译语句,“?”代表参数
                pre = con.prepareStatement(sql);// 实例化预编译语句
                rs = pre.executeQuery();// 执行查询,注意括号中不需要再加参数                
            while (rs.next()){
                Transform transform =new Transform();
                Point  point=transform.wgs84tobd09(rs.getString("longitude"),rs.getString("latitude"));
                BuildingCover buildingCover=new BuildingCover();
                buildingCover.setPointid(rs.getString("pointid"));
                buildingCover.setGroupid(rs.getString("groupid"));
                buildingCover.setLongitude(point.getLng()+"");
                buildingCover.setLatitude(point.getLat()+"");     
                list.add(buildingCover);  
            }
            }catch (Exception e){
                e.printStackTrace();
            }finally{
                try
                {
                    // 逐一将上面的几个对象关闭,因为不关闭的话会影响性能、并且占用资源
                    // 注意关闭的顺序,最后使用的最先关闭
                    if (rs != null)
                        rs.close();
                    if (pre != null)
                        pre.close();
                    if (con != null)
                        con.close();
                    System.out.println("数据库连接已关闭!");
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
            }
            return list;
    }
    /**
     * 写csv文件的方法
     * @throws IOException 
     */
    public static void  writeFile(List  str,String outputPath) throws IOException{
         //取出数据循环写进一张新的表
         CsvWriter wr =new CsvWriter(outputPath,‘,‘,Charset.forName("GBK"));
         String[] headers = {"geometry"};                    
         wr.writeRecord(headers);   
         for(int i=0;i<str.size();i++){
             String[] data={"{\"type\": \"Polygon\", \"coordinates\":["+str.get(i).getCoordinate()+"]}"};
             wr.writeRecord(data);   
         }   
         wr.close();
    }


里面有其他的方法注释了,用到就用,不用拉到,自己改!!!最终1秒立马点都有了,现在不多大概几万个-----
   

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标大数据云计算大数据应用频道!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程