Java WGS84 转百度坐标并纠偏 - 示例代码
以下是 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方法中进行了简单的测试。
如何使用:
- 申请百度地图 API 密钥: https://lbsyun.baidu.com/apiconsole/key
- 将 API 密钥替换代码中的
BAIDU_API_KEY变量。 - 运行代码,即可完成坐标转换和纠偏。
注意:
- 代码示例仅供参考,实际使用中可能需要根据具体情况进行调整。
- 使用百度地图 API 需要遵守相关协议和条款。
- 坐标转换和纠偏可能会存在误差,建议参考官方文档和示例进行调试和优化。
- 为了保证代码的安全性,请将 API 密钥保密。
原文地址: https://www.cveoy.top/t/topic/lHia 著作权归作者所有。请勿转载和采集!