地址到经纬度坐标转化的JAVA代码

任务:有1000多条门店信息(放在excel中,包括地址,店名,电话等,但是没有经纬度坐标),老大让我用地址通过百度地图拾取坐标系统找到相应的坐标,然后加上坐标后更新到公司的数据库。

失败的方案:1、使用按键精灵,按键精灵是一个模仿键盘鼠标操作的软件,用来写动作脚本的,由于时间紧,没怎么研究,因为整套动作太复杂了按键精灵尝试了下不行就放弃了。

2、表单填充工具(就是把exel表格批量提交到网页),什么风越、乌溜漆(特别是这乌溜漆,还要钱,坑货)都尝试了下,结果都不满意。因为我要把excel中的内容提交到网页还要从网页获得相应的内容,所以这些用于批量注册的软件用不上。

解决方案:最后还是干起了我本行---写代码,把问题解决了。思路是:通过传入地址作为参数拼接url调用百度地图,然后解析返回的页面,提取经纬度坐标。

以下为具体步骤

1、修改excel表中的属性名(方便后面用查询读取)然后倒入到数据库。

2、代码实现

实体类

代码如下:

public class ShopInfo { 
    private String name; 
    private String scope; 
    private String address; 
    private String mobile;//手机  
    private String phone;//座机  
    private String description; 
    private String lat;//经度  
    private String lng;//纬度

public ShopInfo() {


//....get和set方法

关键代码  模拟http和解析返回的数据:

代码如下:

/*
 * 管理数据库连接的类
 */ 
public class DbManager{

private Connection con = null ; 
    private Statement sta = null ; 
    private ResultSet rs = null ; 
    private PreparedStatement ps = null ;

private Connection cons = null ; 
    private Statement stas = null ; 
    private ResultSet rss = null ; 
    private PreparedStatement pss = null ;

//连接本地mysql参数 ?后面的参数是解决中文乱码的  
    private String MYSQLDRIVER="com.mysql.jdbc.Driver" ; 
    private String CONTENT="jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8"; 
    private String UN="***"; 
    private String UP="****";

//连接服务器mysql参数  
    private String MYSQLDRIVER1="com.mysql.jdbc.Driver" ; 
    private String CONTENT1="jdbc:mysql://***********:3306/test?useUnicode=true&characterEncoding=utf8"; 
    private String UN1="*******"; 
    private String UP1="****";

public DbManager() 
    { 
        try {

Class.forName(MYSQLDRIVER); 
            System.out.println("加载MySQL驱动..."); 
            con = DriverManager.getConnection(CONTENT,UN,UP); 
            sta = con.createStatement(); 
            System.out.println("连接本地数据库成功!!"); 
            Class.forName(MYSQLDRIVER1); 
            System.out.println("加载MySQL驱动..."); 
            cons = DriverManager.getConnection(CONTENT1,UN1,UP1); 
            stas = cons.createStatement(); 
            System.out.println("连接服务器成功!!");

} catch (Exception e) { 
            e.printStackTrace();     
        }

}

public ArrayList<ShopInfo> getAll(String tablename) throws SQLException{ 
        ArrayList<ShopInfo> allShops=new ArrayList(); 
        ShopInfo si;

String sql="select * from "+tablename; 
        System.out.println(sql); 
        rs=sta.executeQuery(sql); 
        while(rs.next()){ 
            si=new ShopInfo(); 
            si.setAddress(rs.getString("address")); 
            si.setDescription(rs.getString("names")+"欢迎您的光临"); 
            si.setMobile(rs.getString("keeperphone")); 
            si.setScope(tablename); 
            si.setPhone(rs.getString("shoptel")); 
            getPoint(si); 
            allShops.add(si); 
            System.out.println("经度:"+si.getLat()+"  纬度:"+si.getLng()); 
        }

return allShops; 
    } 
    //-------------------------》关键代码根据地址获得坐标《--------------------------------  
    public void getPoint(ShopInfo shop){ 
         try {   
                String sCurrentLine;   
                String sTotalString;   
                sCurrentLine = "";   
                sTotalString = "";   
                java.io.InputStream l_urlStream;

java.net.URL l_url = new java.net.URL("http://api.map.baidu.com/geocoder/v2/?address="+shop.getAddress().replaceAll(" ", "")+"&output=json&ak=702632E1add3d4953d0f105f27c294b9&callback=showLocation");   
                java.net.HttpURLConnection l_connection = (java.net.HttpURLConnection) l_url.openConnection();   
                l_connection.connect();   
                l_urlStream = l_connection.getInputStream();   
                java.io.BufferedReader l_reader = new java.io.BufferedReader(new java.io.InputStreamReader(l_urlStream));    
                String str=l_reader.readLine(); 
                //用经度分割返回的网页代码  
                String s=","+"\""+"lat"+"\""+":"; 
                String strs[]=str.split(s, 2); 
                String s1="\""+"lng"+"\""+":"; 
               String a[]=strs[0].split(s1, 2); 
               shop.setLng(a[1]); 
               s1="}"+","+"\""; 
              String a1[]=strs[1].split(s1, 2); 
               shop.setLat(a1[0]); 
            } catch (Exception e) {   
                e.printStackTrace();   
            }


    //存入数据库  
    public void inputAll(ArrayList<ShopInfo> allShops){ 
        System.out.println("开始向服务器中写入"); 
        String sql2="insert into test.dc_shop (name,scope,address,phone,description,image,createtime,lat,lng) values (?,?,?,?,?,?,?,?,?)"; 
        try { 
            pss=cons.prepareStatement(sql2); 
            System.out.println("-------------------------等待写入数据条数: "+allShops.size()); 
            for(int i=0;i<allShops.size();i++){ 
                   pss.setString(1,allShops.get(i).getName()); 
                pss.setString(2, allShops.get(i).getScope()); 
                pss.setString(3, allShops.get(i).getAddress()); 
                pss.setString(4, allShops.get(i).getPhone()); 
                pss.setString(5, allShops.get(i).getDescription()); 
                pss.setString(6, null);//图片路径  
                pss.setString(7, allShops.get(i).getMobile()); 
                pss.setString(8, allShops.get(i).getLat()); 
                pss.setString(9, allShops.get(i).getLng());

pss.executeUpdate(); 
            } 
            pss.close(); 
            cons.close();

System.out.println("--->OK"); 
        } catch (SQLException e) { 
            // TODO Auto-generated catch block  
            System.out.println("向mysql中更新数据时发生异常!"); 
            e.printStackTrace();     
        } 
    }

在搞个main函数调用就ok了。

(0)

相关推荐

  • java 根据经纬度获取地址实现代码

     java 根据经纬度获取地址实现代码 实现代码: public class GetLocation { public static void main(String[] args) { // lat 39.97646 //log 116.3039 String add = getAdd("116.3039", "39.97646"); JSONObject jsonObject = JSONObject.fromObject(add); JSONArray jso

  • 地址到经纬度坐标转化的JAVA代码

    任务:有1000多条门店信息(放在excel中,包括地址,店名,电话等,但是没有经纬度坐标),老大让我用地址通过百度地图拾取坐标系统找到相应的坐标,然后加上坐标后更新到公司的数据库. 失败的方案:1.使用按键精灵,按键精灵是一个模仿键盘鼠标操作的软件,用来写动作脚本的,由于时间紧,没怎么研究,因为整套动作太复杂了按键精灵尝试了下不行就放弃了. 2.表单填充工具(就是把exel表格批量提交到网页),什么风越.乌溜漆(特别是这乌溜漆,还要钱,坑货)都尝试了下,结果都不满意.因为我要把excel中的内

  • JS使用百度地图API自动获取地址和经纬度操作示例

    本文实例讲述了JS使用百度地图API自动获取地址和经纬度操作.分享给大家供大家参考,具体如下: 在实际工作中我们经常会遇到这样的问题,但是当我们去看百度API的时候往往又达不到我们的要求. 故此,本篇博文讲述如何使用百度地图API自动获取地址和经纬度: 1.HTML代码如下 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xht

  • Java将GeoHash转化为对应的经纬度坐标实例代码

    本文实例介绍了JAVA实现将GeoHash转化为对应的经纬度坐标的详细代码,分享给大家供大家参考,具体内容如下 package com.lulei.geo; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import com.lulei.geo.bean.LocationBean; import com.lulei.util.JsonUti

  • Java通过经纬度坐标获取两个点之间的直线距离的示例

    前言 现在很多App都需要附带着附近人列表功能,所以我在这里实现2个点之间的距离计算 经纬度的获取需要第三方来支持,高德地图.百度地图.... 附近人功能具体的实现逻辑: 1.获取每个人的经纬度坐标,存库记录 2.通过SQL获取指定距离范围内的用户列表(文章的 "二.MySQL中通过经纬度,获取范围内的用户") 3.通过获取到的用户列表,计算自己与用户之间度距离(文章的 "一.JAVA代码实现计算AB两点的直线距离") 一.JAVA代码实现计算AB两点的直线距离 我

  • java 根据坐标截取图片实例代码

    java 根据坐标截取图片 实例代码:代码中有不是注释,很好看懂! package com.json.test; import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.Iterator; import javax.imageio.

  • Qt编写地图之实现经纬度坐标纠偏

    目录 一.前言 二.功能特点 三.体验地址 四.效果图 五.相关代码 一.前言 地图应用中都涉及到一个问题就是坐标纠偏的问题,这个问题的是因为根据地方规则保密性要求不允许地图厂商使用标准的GPS坐标,而是要用国家定义的偏移标准,或者在此基础上再做算法运算,所以这就出现了三种常规的坐标标准:GPS坐标(WGS-84,国际标准,谷歌地球软件,硬件GPS模块等).中国坐标偏移标准(GCJ-02,谷歌地图.腾讯地图.高德地图等).百度坐标偏移标准(BD-09,仅仅百度地图采用).由于不允许其他坐标转换成

  • Python经纬度坐标转换为距离及角度的实现

    最近项目上有这样的需求,需要依据设备的经纬度坐标计算距离及角度.经验证后效果较好,并分享. 1 经纬度转换距离代码 #!/usr/bin/env python # -*- coding: utf-8 -*- __author__ = 'Seven' import math # 计算距离 def getDistance(latA, lonA, latB, lonB): ra = 6378140 # 赤道半径 rb = 6356755 # 极半径 flatten = (ra - rb) / ra #

  • 只用400行Java代码就能实现的飞翔的小鸟游戏

    目录 一.效果图 二.设计步骤 1.素材准备 2.预备知识及其运用 3.大体流程 三.源码 1.游戏类 2.地面类 3.小鸟类 4.柱子类 一.效果图 二.设计步骤 1.素材准备 相关的素材我放到了github仓库. github地址https://github.com/ORikkaO/BirdGame 2.预备知识及其运用 1.面向对象的封装:设计包装出小鸟.地面.柱子.游戏四个类. 2.swing和awt包:图形界面工具,绘制出游戏场景. 3.Math类:运用atan等方法辅助完成小鸟旋转角

  • springboot + mongodb 通过经纬度坐标匹配平面区域的方法

    java api 自带的mongodb实体无法满足环状多边形的区域匹配(大概是我没用对方法可能)所以我们要自定义一个空间坐标类型 废话不多说 上代码 /** * * @author cy */ @Configuration @ReadingConverter public class CustomReadGeoJsonConverter implements Converter<Document, CustomGeoJson> { @Override public CustomGeoJson

  • 分享令人目瞪口呆的 Java 代码技巧

    技术点 本文不是一个吹嘘的文章,不会讲很多高深的架构,相反,会讲解很多基础的问题和写法问题,如果读者自认为基础问题和写法问题都是不是问题,那请忽略这篇文章,节省出时间去做一些有意义的事情. 基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限.多租户.数据权限.工作流.三方登录.支付.短信.商城等功能. 项目地址:https://github.com/YunaiV/ruoyi-vue-pro 开发

随机推荐