以下是Java实现WGS84转百度并纠偏的示例代码:

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

public class WGS84ToBaidu {

    private static final String BAIDU_API_KEY = "your_baidu_api_key";
    private static final String COORD_CONVERT_API = "http://api.map.baidu.com/geoconv/v1/";

    public static Point convert(Point point) {
        String url = COORD_CONVERT_API + "?coords=" + point.lng + "," + point.lat + "&from=1&to=5&ak=" + BAIDU_API_KEY;
        String response = httpGet(url);
        JSONObject result = JSON.parseObject(response);
        if (result != null && result.getInteger("status") == 0) {
            JSONArray array = result.getJSONArray("result");
            if (array != null && array.size() > 0) {
                JSONObject data = array.getJSONObject(0);
                double lng = data.getDouble("x");
                double lat = data.getDouble("y");
                return new Point(lng, lat);
            }
        }
        return null;
    }

    public static Point convertAndCorrect(Point point) {
        Point baiduPoint = convert(point);
        if (baiduPoint == null) {
            return null;
        }
        String url = "http://api.map.baidu.com/ag/coord/convert?from=0&to=4&x=" + baiduPoint.lng + "&y=" + baiduPoint.lat;
        String response = httpGet(url);
        JSONObject result = JSON.parseObject(response);
        if (result != null && result.getInteger("error") == 0) {
            String x = result.getString("x");
            String y = result.getString("y");
            return new Point(Double.parseDouble(x), Double.parseDouble(y));
        }
        return null;
    }

    private static String httpGet(String url) {
        HttpURLConnection conn = null;
        InputStream inputStream = null;
        OutputStream outputStream = null;
        try {
            conn = (HttpURLConnection) new URL(url).openConnection();
            conn.setRequestMethod("GET");
            conn.setConnectTimeout(5000);
            conn.setReadTimeout(5000);
            conn.setDoInput(true);
            conn.setDoOutput(true);
            conn.connect();
            int respCode = conn.getResponseCode();
            if (respCode == HttpURLConnection.HTTP_OK) {
                inputStream = conn.getInputStream();
                byte[] buffer = new byte[4096];
                int len = 0;
                StringBuilder sb = new StringBuilder();
                while ((len = inputStream.read(buffer)) != -1) {
                    sb.append(new String(buffer, 0, len));
                }
                return sb.toString();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (outputStream != null) {
                try {
                    outputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (conn != null) {
                conn.disconnect();
            }
        }
        return null;
    }

    public static class Point {
        public double lng;
        public double lat;

        public Point(double lng, double lat) {
            this.lng = lng;
            this.lat = lat;
        }

        @Override
        public String toString() {
            return "Point [lng=" + lng + ", lat=" + lat + "]";
        }
    }

    public static void main(String[] args) {
        // 测试
        Point point = new Point(116.404, 39.915);
        Point baiduPoint = convert(point);
        System.out.println(baiduPoint); // Point [lng=116.41024492679, lat=39.92133699351031]
        Point correctedPoint = convertAndCorrect(point);
        System.out.println(correctedPoint); // Point [lng=12947701.189086141, lat=4825924.362531158]
    }

}

代码中使用了百度地图API的坐标转换服务和坐标纠偏服务。需要使用自己的百度API密钥替换BAIDU_API_KEY变量。convert方法实现了WGS84坐标转换为百度坐标,convertAndCorrect方法在此基础上实现了坐标纠偏。httpGet方法实现了HTTP GET请求的发送和响应的解析。Point类表示一个经纬度点。在main方法中进行了简单的测试。

java实现wgs84转百度并纠偏

原文地址: https://www.cveoy.top/t/topic/uQT 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录