Java实现根据地理位置获取经纬度 您所在的位置:网站首页 威宁县地理位置经纬度 Java实现根据地理位置获取经纬度

Java实现根据地理位置获取经纬度

2024-04-07 04:12| 来源: 网络整理| 查看: 265

根据数据库中的地理位置信息,批量生成坐标信息,并插入新的表中。

import com.alibaba.fastjson.JSONObject; import com.github.pagehelper.PageInfo; import org.apache.ibatis.annotations.Param; import org.omg.CORBA.Request; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.web.bind.annotation.*; import java.io.IOException; import java.net.*; import java.text.DecimalFormat; import java.util.*; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.util.List; @GetMapping("/tabmapperdictMapper") public void tabmapperdictMapper() throws IOException { //获取地理信息表数据 List tab_farms = tabmapper.selectPigGmcDataAll(); //获取地理坐标表的数据(初始为空) List Coordtransid=tabmapper.selectTabFarmCoordtransid(); //遍历地理信息表数据 for (int i = 0; i < tab_farms.size(); i++) { tab_farm s =tab_farms.get(i); int transid=s.getTransid(); String licnum=s.getLicnum(); String unitaddr=s.getUnitaddr(); String Strtransid= Integer.toString(transid); //判断数据库是否存在此条数据 if (exist(Coordtransid, Strtransid)) { // System.out.println("数据库存在此条数据:"+Strtransid); } else { System.out.println("数据库存不在此条数据:"+Strtransid); String coordinate = getCoordinate(unitaddr); String[] result = coordinate.split(","); if (result != null && !"".equals(result)) { String Slng=result[0]; String Slat=result[1]; double lng=Double.parseDouble(Slng); double lat=Double.parseDouble(Slat); if(lng == 0){ System.out.println("配额超标×××××××××××××××××××××××××××××运行结束"); return; }else if(lng == 1){ System.out.println("未找到地理位置信息*******************插入继续"); tabmapper.insertTab_farmCoord(transid,licnum,unitaddr,lng,lat); }else{ System.out.println("成功插入地理位置信息√√√√√√√√√√√√√√√√√√√√√√√√√√√插入继续"); tabmapper.insertTab_farmCoord(transid,licnum,unitaddr,lng,lat); } } } } };

 获取对应地址的坐标

public static String getCoordinate(String Stringunitaddr) { System.out.println("要查询的地名:"+Stringunitaddr); //去掉中文地址中的空白字符 String unitaddr=Stringunitaddr.replaceAll("\\s*", ""); String url = "http://api.map.baidu.com/geocoder/v2/?output=json&ak=xxxxxx&address=" + unitaddr; //String url = "http://api.map.baidu.com/geocoder/v2/?output=json&ak=xxxxxx&address=" + unitaddr; String json = loadJSON(url); System.out.println("开始执行百度接口:"+url); System.out.println("百度返回的json:"+json); if (json != null && !"".equals(json)) { //先把String对象转换成json对象 JSONObject obj= JSONObject.parseObject(json); if ("0".equals(obj .getString("status"))) { //查询成功情况 System.out.println("成功返回的信息:"+obj); double lng = obj .getJSONObject("result").getJSONObject("location").getDouble("lng"); // 经度 double lat = obj .getJSONObject("result").getJSONObject("location").getDouble("lat"); // 纬度 DecimalFormat df = new DecimalFormat("#.######"); System.out.println(df.format(lng) + "," + df.format(lat)); return df.format(lng)+","+df.format(lat); }else { //查询失败情况 if ("1".equals(obj .getString("status"))) { //未找到地理位置信息 System.out.println("未找到地理位置返回的信息:"+obj); return '1'+","+'1'; }else if("302".equals(obj .getString("status"))){ System.out.println("配额超限返回的信息:"+obj); //每天配额超标的情况 return '0'+","+'0'; } } } return '1'+","+'1'; }

 根据百度地图api路径,返回相关参数

public static String loadJSON(String url) { StringBuilder json = new StringBuilder(); try { URL oracle = new URL(url); URLConnection yc = oracle.openConnection(); BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream(), "UTF-8")); String inputLine = null; while ((inputLine = in.readLine()) != null) { json.append(inputLine); } in.close(); } catch (MalformedURLException e) {} catch (IOException e) {} return json.toString(); }

判断id是否存在

public static boolean exist(List arr, String key) { for (int z = 0; z < arr.size();z++) { String qqq =arr.get(z); String www =key; if ( qqq.equals(www)) { return true; } } return false; }

下面是一些demo  

http://api.map.baidu.com/geocoder/v2/?output=json&ak=xxxxxxxxxxxxx&address=找不到地理位置信息情况

{"status":1,"msg":"Internal Service Error:无相关结果","results":[]}

http://api.map.baidu.com/geocoder/v2/?output=json&ak=xxxxxxxxxxxxx&address=成功返回位置信息情况

{"status":0,"result":{"location":{"lng":119.39791832517085,"lat":30.112109268949444},"precise":1,"confidence":75,"comprehension":100,"level":"宾馆"}}

http://api.map.baidu.com/geocoder/v2/?output=json&ak=xxxxxxxxxxxxx&address=配额超标情况

{"status":302,"message":"天配额超限,限制访问"}

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有