Java百度地圖、高德地圖、ArcGIS地圖逆地理編碼


百度地圖和高德地圖用戶獲取國內地址,區別在於高德地圖的精確度比百度地圖要高一點,而高德地圖不支持國外地址,根據需求選擇,ArcGIS地圖獲取國外地址

1、根據需求選擇地圖,申請自己的key

高德地圖:https://lbs.amap.com/api/webservice/guide/api/georegeo

申請完key后,在我的應用中添加一個應用

 

 

 

 

百度地圖:http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding

 

申請完AK后,創建應用

 

 

 

 

 

 

 

 

 

2、創建GetAdreesByLatAndLong類用於調用API,進行逆地理編碼

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

public class GetAdreesByLatAndLong {

    /**
     * <p>
     * Title: GetLocationMsg
     * </p>
     * <p>
     * Description:高德地圖API
     * </p>
     *
     * @param longitude
     * @param latitude
     * @return
     */
    public static String GetLocationMsg(double longitude, double latitude) {

        String message = "";

        String address = "";

        // 高德地圖逆地理編碼API

        String url = String.format(
                "https://restapi.amap.com/v3/geocode/regeo?output=JSON&key=你的key&radius=1000&extensions=all&batch=false&roadlevel=0&location=%s,%s",
                longitude, latitude);

        URL myURL = null;

        URLConnection httpsConn = null;

        try {

            myURL = new URL(url);

        } catch (MalformedURLException e) {

            e.printStackTrace();

        }

        try {

            httpsConn = (URLConnection) myURL.openConnection();
            httpsConn.setConnectTimeout(100000);
            if (httpsConn != null) {

                InputStreamReader insr = new InputStreamReader(

                        httpsConn.getInputStream(), "UTF-8");

                BufferedReader br = new BufferedReader(insr);

                String data = null;

                while ((data = br.readLine()) != null) {

                    message = message + data;
                }

                JsonParser jp = new JsonParser();
                //將json字符串轉化成json對象
                JsonObject jo = jp.parse(message).getAsJsonObject();

                String status = jo.get("status").getAsString();

                String addressJsonEle = jo.get("regeocode").getAsJsonObject().get("formatted_address").toString();

                if (addressJsonEle.equals("[]")) {
                    address = null;

                } else {


                    if (jo.get("regeocode").getAsJsonObject().get("pois").getAsJsonArray().size() <= 0) {
                        String detail = jo.get("regeocode").getAsJsonObject().get("addressComponent").getAsJsonObject().get("streetNumber").getAsJsonObject().get("street").getAsString() + jo.get("regeocode").getAsJsonObject().get("addressComponent").getAsJsonObject().get("streetNumber").getAsJsonObject().get("number").getAsString();

                        if (status.equals("1") && !addressJsonEle.equals("[]")) {
                            address = addressJsonEle + " " + detail;

                        }

                    } else {
                        String detail = jo.get("regeocode").getAsJsonObject().get("pois").getAsJsonArray().get(0).getAsJsonObject().get("name").getAsString();

                        String detailDistance = jo.get("regeocode").getAsJsonObject().get("pois").getAsJsonArray().get(0).getAsJsonObject().get("distance").getAsString();


                        if (status.equals("1") && !addressJsonEle.equals("[]")) {
                            address = addressJsonEle + " " + detail + " " + detailDistance.substring(0, detailDistance.lastIndexOf(".")) + "米";

                        }
                    }
                }

                insr.close();

            }

        } catch (

                IOException e) {

            e.printStackTrace();

        }

        return address;

    }

    /**
     * <p>
     * Title: GetLocationMsgs
     * </p>
     * <p>
     * Description:百度地圖aPI
     * </p>
     *
     * @param longitude
     * @param latitude
     * @return
     */
    public static String GetLocationMsgs(double latitude, double longitude) {

        String message = "";

        String address = "";

        // 百度地圖逆地理編碼API
        String url = String.format(
                "http://api.map.baidu.com/reverse_geocoding/v3/?ak=你的ak&extensions_poi=1&radius=1000&output=json&coordtype=bd09ll&location=%s,%s",
                latitude, longitude);

        URL myURL = null;

        URLConnection httpsConn = null;

        try {

            myURL = new URL(url);

        } catch (MalformedURLException e) {

            e.printStackTrace();

        }

        try {

            httpsConn = (URLConnection) myURL.openConnection();

            if (httpsConn != null) {

                InputStreamReader insr = new InputStreamReader(

                        httpsConn.getInputStream(), "UTF-8");

                BufferedReader br = new BufferedReader(insr);

                String data = null;

                while ((data = br.readLine()) != null) {

                    message = message + data;

                }

                JsonParser jp = new JsonParser();
                //將json字符串轉化成json對象
                JsonObject jo = jp.parse(message).getAsJsonObject();

                String status = jo.get("status").getAsString();

                if (jo.get("result").getAsJsonObject().get("pois").getAsJsonArray().size() <= 0) {
                    String adds = jo.get("result").getAsJsonObject().get("formatted_address").getAsString();
                    address = adds;

                } else {
                    JsonElement addressJsonEle = jo.get("result").getAsJsonObject().get("addressComponent");

                    String adds = jo.get("result").getAsJsonObject().get("formatted_address").getAsString();

                    String details = jo.get("result").getAsJsonObject().get("pois").getAsJsonArray().get(0).getAsJsonObject().get("name").getAsString() + " " +
                            jo.get("result").getAsJsonObject().get("pois").getAsJsonArray().get(0).getAsJsonObject().get("distance").getAsString() + "米";

                    if (status.equals("0")) {
                        address = adds + " " + details;
                    }
                }
                
                insr.close();

            }

        } catch (IOException e) {

            e.printStackTrace();

        }

        return address;

    }

    /**
     * <p>
     * Title: GetLocationMsgForForeign
     * </p>
     * <p>
     * Description: ArcGIS地圖
     * </p>
     *
     * @param longitude
     * @param latitude
     * @return
     */
    public static String GetLocationMsgForForeign(double longitude, double latitude) {

        String message = "";

        String address = "";

        // 高德地圖逆地理編碼API

        String url = String.format(
                "http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer/reverseGeocode?f=pjson&langCode=EN&featureTypes=&location=%s,%s",
                longitude, latitude);

        URL myURL = null;

        URLConnection httpsConn = null;

        try {

            myURL = new URL(url);

        } catch (MalformedURLException e) {

            e.printStackTrace();

        }

        try {

            httpsConn = (URLConnection) myURL.openConnection();
            httpsConn.setConnectTimeout(100000);
            if (httpsConn != null) {

                InputStreamReader insr = new InputStreamReader(

                        httpsConn.getInputStream(), "UTF-8");

                BufferedReader br = new BufferedReader(insr);

                String data = null;

                while ((data = br.readLine()) != null) {

                    message = message + data;

                }

                JsonParser jp = new JsonParser();
                //將json字符串轉化成json對象
                JsonObject jo = jp.parse(message).getAsJsonObject();

                if (!jo.has("error")) {
                    address = jo.get("address").getAsJsonObject().get("LongLabel").getAsString();

                }
                    
            
                insr.close();

            }

        } catch (IOException e) {

            e.printStackTrace();

        }

        return address;

    }

    public final static void main(String[] args) {
        // 百度經緯度和高德地圖經緯度,位置相反
        //114.196517, 22.380436
        String gaodeResult = GetLocationMsg(114.065240, 25.189741);
        String baiduResult = GetLocationMsgs(25.189741, 114.065240);
        String result = GetLocationMsgForForeign(114.065240, 25.189741);
        System.out.println("高德地址===" + gaodeResult);
        System.out.println("百度地址===" + baiduResult);
        System.out.println("國際地址===" + result);

    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM