以下是 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方法中进行了简单的测试。

如何使用:

  1. 申请百度地图 API 密钥: https://lbsyun.baidu.com/apiconsole/key
  2. 将 API 密钥替换代码中的 BAIDU_API_KEY 变量。
  3. 运行代码,即可完成坐标转换和纠偏。

注意:

  • 代码示例仅供参考,实际使用中可能需要根据具体情况进行调整。
  • 使用百度地图 API 需要遵守相关协议和条款。
  • 坐标转换和纠偏可能会存在误差,建议参考官方文档和示例进行调试和优化。
  • 为了保证代码的安全性,请将 API 密钥保密。

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

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