(转载)java 实现地址到经纬度坐标的转化

原博文地址  http://blog.csdn.net/bailin0007/article/details/11973401



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

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

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


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

以下为具体步骤

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

2、代码实现

实体类

[java]  view plain copy
  1. public class ShopInfo {  
  2.     private String name;  
  3.     private String scope;  
  4.     private String address;  
  5.     private String mobile;//手机  
  6.     private String phone;//座机  
  7.     private String description;  
  8.     private String lat;//经度  
  9.     private String lng;//纬度  
  10.       
  11.     public ShopInfo() {  
  12.       
  13.     }  
  14. //....get和set方法  

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

[java]  view plain copy
  1. /* 
  2.  * 管理数据库连接的类 
  3.  */  
  4. public class DbManager{  
  5.       
  6.     private Connection con = null ;  
  7.     private Statement sta = null ;  
  8.     private ResultSet rs = null ;  
  9.     private PreparedStatement ps = null ;  
  10.       
  11.       
  12.     private Connection cons = null ;  
  13.     private Statement stas = null ;  
  14.     private ResultSet rss = null ;  
  15.     private PreparedStatement pss = null ;  
  16.       
  17.       
  18.       
  19.       
  20.     //连接本地mysql参数 ?后面的参数是解决中文乱码的  
  21.     private String MYSQLDRIVER="com.mysql.jdbc.Driver" ;  
  22.     private String CONTENT="jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8";  
  23.     private String UN="***";  
  24.     private String UP="****";  
  25.       
  26.     //连接服务器mysql参数  
  27.     private String MYSQLDRIVER1="com.mysql.jdbc.Driver" ;  
  28.     private String CONTENT1="jdbc:mysql://***********:3306/test?useUnicode=true&characterEncoding=utf8";  
  29.     private String UN1="*******";  
  30.     private String UP1="****";  
  31.       
  32.   
  33.     public DbManager()  
  34.     {  
  35.         try {  
  36.               
  37.             Class.forName(MYSQLDRIVER);  
  38.             System.out.println("加载MySQL驱动...");  
  39.             con = DriverManager.getConnection(CONTENT,UN,UP);  
  40.             sta = con.createStatement();  
  41.             System.out.println("连接本地数据库成功!!");  
  42.             Class.forName(MYSQLDRIVER1);  
  43.             System.out.println("加载MySQL驱动...");  
  44.             cons = DriverManager.getConnection(CONTENT1,UN1,UP1);  
  45.             stas = cons.createStatement();  
  46.             System.out.println("连接服务器成功!!");  
  47.               
  48.         } catch (Exception e) {  
  49.             e.printStackTrace();      
  50.         }  
  51.       
  52.     }  
  53.       
  54.   
  55.     public ArrayList<ShopInfo> getAll(String tablename) throws SQLException{  
  56.         ArrayList<ShopInfo> allShops=new ArrayList();  
  57.         ShopInfo si;  
  58.       
  59.         String sql="select * from "+tablename;  
  60.         System.out.println(sql);  
  61.         rs=sta.executeQuery(sql);  
  62.         while(rs.next()){  
  63.             si=new ShopInfo();  
  64.             si.setAddress(rs.getString("address"));  
  65.             si.setDescription(rs.getString("names")+"欢迎您的光临");  
  66.             si.setMobile(rs.getString("keeperphone"));  
  67.             si.setScope(tablename);  
  68.             si.setPhone(rs.getString("shoptel"));  
  69.             getPoint(si);  
  70.             allShops.add(si);  
  71.             System.out.println("经度:"+si.getLat()+"  纬度:"+si.getLng());  
  72.         }  
  73.           
  74.         return allShops;  
  75.     }  
  76.     //-------------------------》关键代码根据地址获得坐标《--------------------------------  
  77.     public void getPoint(ShopInfo shop){  
  78.          try {    
  79.                 String sCurrentLine;    
  80.                 String sTotalString;    
  81.                 sCurrentLine = "";    
  82.                 sTotalString = "";    
  83.                 java.io.InputStream l_urlStream;    
  84.                   
  85.                 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");    
  86.                 java.net.HttpURLConnection l_connection = (java.net.HttpURLConnection) l_url.openConnection();    
  87.                 l_connection.connect();    
  88.                 l_urlStream = l_connection.getInputStream();    
  89.                 java.io.BufferedReader l_reader = new java.io.BufferedReader(new java.io.InputStreamReader(l_urlStream));     
  90.                 String str=l_reader.readLine();  
  91.                 //用经度分割返回的网页代码  
  92.                 String s=","+"\""+"lat"+"\""+":";  
  93.                 String strs[]=str.split(s, 2);  
  94.                 String s1="\""+"lng"+"\""+":";  
  95.                String a[]=strs[0].split(s1, 2);  
  96.                shop.setLng(a[1]);  
  97.                s1="}"+","+"\"";  
  98.               String a1[]=strs[1].split(s1, 2);  
  99.                shop.setLat(a1[0]);  
  100.             } catch (Exception e) {    
  101.                 e.printStackTrace();    
  102.             }    
  103.           
  104.     }  
  105.     //存入数据库  
  106.     public void inputAll(ArrayList<ShopInfo> allShops){  
  107.         System.out.println("开始向服务器中写入");  
  108.         String sql2="insert into test.dc_shop (name,scope,address,phone,description,image,createtime,lat,lng) values (?,?,?,?,?,?,?,?,?)";  
  109.         try {  
  110.             pss=cons.prepareStatement(sql2);  
  111.             System.out.println("-------------------------等待写入数据条数: "+allShops.size());  
  112.             for(int i=0;i<allShops.size();i++){  
  113.                    pss.setString(1,allShops.get(i).getName());  
  114.                 pss.setString(2, allShops.get(i).getScope());  
  115.                 pss.setString(3, allShops.get(i).getAddress());  
  116.                 pss.setString(4, allShops.get(i).getPhone());  
  117.                 pss.setString(5, allShops.get(i).getDescription());  
  118.                 pss.setString(6null);//图片路径  
  119.                 pss.setString(7, allShops.get(i).getMobile());  
  120.                 pss.setString(8, allShops.get(i).getLat());  
  121.                 pss.setString(9, allShops.get(i).getLng());  
  122.                   
  123.                 pss.executeUpdate();  
  124.             }  
  125.             pss.close();  
  126.             cons.close();  
  127.               
  128.             System.out.println("--->OK");  
  129.         } catch (SQLException e) {  
  130.             // TODO Auto-generated catch block  
  131.             System.out.println("向mysql中更新数据时发生异常!");  
  132.             e.printStackTrace();      
  133.         }  
  134.     }  

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值