zoukankan      html  css  js  c++  java
  • 如何根据普通ip地址获取当前地理位置

    此文转载自:https://blog.csdn.net/tangthh123/article/details/106176769

    前言:

    我们现在需要做的功能是根据ip地址获取当前地理位置,是Web 服务API,获取后的位置信息一般是城市级别的,不是很精确的那种获取。

    (1)开发者需要做的准备工作:

    需要登录百度地图的api,点击web 服务API.

    开发文档的地址:http://lbsyun.baidu.com/index.php?title=webapi/ip-api

    请求的URL 有俩个,

    http://api.map.baidu.com/location/ip?ak=您的AK&ip=您的IP&coor=bd09ll //HTTP协议 
    
    https://api.map.baidu.com/location/ip?ak=您的AK&ip=您的IP&coor=bd09ll //HTTPS协议

    请求的参数

    其中需要注意的是: ak 是必填的,其他几个参数可选。

    (2)如何申请AK

    地址:http://lbsyun.baidu.com/apiconsole/key#/home

    首先需要点到我的应用里面,新建应用,我这下面是已经建好了。

    点击确定即可。

    需要注意的是:ip白名单不建议使用 0.0.0.0/0  可以使用具体的ip名称。

    (3)代码调用

    获取到的json 我把他复制出来,看一下怎么解析这个json.  我这里用的是阿里巴巴下的jsonObject ,所以需要引用jar 包。

    {
    	"address": "CN|上海|上海|None|CHINANET|0|0",
    	"content": {
    		"address_detail": {
    			"province": "上海市",
    			"city": "上海市",
    			"street": "",
    			"district": "",
    			"street_number": "",
    			"city_code": 289
    		},
    		"address": "上海市",
    		"point": {
    			"x": "13524118.26",
    			"y": "3642780.37"
    		}
    	},
    	"status": 0
    }

    (4)代码

    package com.bos.test;
    
    import com.alibaba.fastjson.JSONObject;
    import com.bos.util.SendRequest;
    
    
    public class MenuTest {
    
        public static void main(String[] args) {
            String url = "http://api.map.baidu.com/location/ip?&ak=lGhonqkkoUGZurajdlpL1QqciA215kkq";
            JSONObject jsonObject = SendRequest.sendGet2(url);
            System.out.println(jsonObject);
            //获取content中的值
            JSONObject contentJsonObject = jsonObject.getJSONObject("content");
            System.out.println("contentJsonObject-------"+contentJsonObject);
            //获取详细地址数据
            JSONObject addressDetailJsonObject = contentJsonObject.getJSONObject("address_detail");
            String address = addressDetailJsonObject.getString("province");
            String city = addressDetailJsonObject.getString("city");
            System.out.println("address_detail-------"+addressDetailJsonObject);
            System.out.println("address-------"+address);
            System.out.println("city-------"+city);
    
            String address2 = contentJsonObject.getString("address");
            System.out.println("address2-----"+address2);
    
            JSONObject pointJsonObject = contentJsonObject.getJSONObject("point");
            String x = pointJsonObject.getString("x");
            String y = pointJsonObject.getString("y");
            System.out.println("x----"+x);
            System.out.println("y----"+y);
        }
    
    
    }
    
     /**
         * 发送get 请求,比如定时任务调用的就是请求
         * @param url
         * @return
         */
        public static JSONObject sendGet2(String url) {
            JSONObject jsonObject = null;
            StringBuffer sb = new StringBuffer();
            BufferedReader in = null;
            try {
                String urlName = url;
                URL realUrl = new URL(urlName);
                // 打开和URL之间的连接
                URLConnection conn = realUrl.openConnection();
                // 设置通用的请求属性
                conn.setRequestProperty("accept", "*/*");
                conn.setRequestProperty("connection", "Keep-Alive");
                conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
                conn.setConnectTimeout(10000);
                // 建立实际的连接
                conn.connect();
                // 定义BufferedReader输入流来读取URL的响应
                in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
                String line;
                while ((line = in.readLine()) != null) {
                    sb.append(line);
                }
                jsonObject = JSON.parseObject(sb.toString());
            } catch (Exception e) {
                System.out.println("发送GET请求出现异常!" + e);
                // 使用finally块来关闭输入流
            } finally {
                try {
                    if (in != null) {
                        in.close();
                    }
                } catch (IOException ex) {
                    System.out.println("关闭流异常");
                }
            }
            return jsonObject;
        }

    做到上面其实就可以了,但是如果调用次数太多的话也会报异常。这个时候就需要申请开发者资质认证,我这边先申请一下个人开发者。

    番外加赠:

    上面的文档可以获取到当前城市的中心点,比如我在上海 ,获取的就是上海市等。 如果想要精确信息,可以根据返回的经纬度做一步查询。

    文档地址:http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding-abroad

    其中需要注意的就是要查询自己是否有逆地理编码权限,具体操作图在下面。、

    查询应用是否有逆地理编码的权限。像我的话,没有,点击申请权限。

    点击申请权限往下做下去,我这边就不做了

      

       

    更多内容详见微信公众号:Python测试和开发

    Python测试和开发

  • 相关阅读:
    HDU 5835 Danganronpa 贪心
    HDU 5842 Lweb and String 水题
    HDU 5832 A water problem 水题
    Codeforces Beta Round #14 (Div. 2) A. Letter 水题
    Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem K. UTF-8 Decoder 模拟题
    Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem I. Alien Rectangles 数学
    Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem H. Parallel Worlds 计算几何
    Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem F. Turning Grille 暴力
    Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem C. Cargo Transportation 暴力
    Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem G. k-palindrome dp
  • 原文地址:https://www.cnblogs.com/phyger/p/14073021.html
Copyright © 2011-2022 走看看