mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-05-09 23:51:34 +08:00
fix bug
This commit is contained in:
parent
73da439198
commit
ed5bbe716e
@ -135,19 +135,6 @@ public class CoordinateUtil {
|
|||||||
|
|
||||||
//----------------------------------------------------------------------------------- Private methods begin
|
//----------------------------------------------------------------------------------- Private methods begin
|
||||||
|
|
||||||
/**
|
|
||||||
* 转换坐标公共核心
|
|
||||||
*
|
|
||||||
* @param lng 经度坐标
|
|
||||||
* @param lat 维度坐标
|
|
||||||
* @return 返回结果
|
|
||||||
*/
|
|
||||||
private static double transCore(final double lng, final double lat) {
|
|
||||||
double ret = (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
|
|
||||||
ret += (20.0 * Math.sin(lat * PI) + 40.0 * Math.sin(lat / 3.0 * PI)) * 2.0 / 3.0;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* WGS84 与 火星坐标系 (GCJ-02)转换的偏移算法(非精确)
|
* WGS84 与 火星坐标系 (GCJ-02)转换的偏移算法(非精确)
|
||||||
*
|
*
|
||||||
@ -179,12 +166,13 @@ public class CoordinateUtil {
|
|||||||
* 计算经度坐标
|
* 计算经度坐标
|
||||||
*
|
*
|
||||||
* @param lng 经度坐标
|
* @param lng 经度坐标
|
||||||
* @param lat 维度坐标
|
* @param lat 纬度坐标
|
||||||
* @return ret 计算完成后的
|
* @return ret 计算完成后的
|
||||||
*/
|
*/
|
||||||
private static double transLng(final double lng, final double lat) {
|
private static double transLng(final double lng, final double lat) {
|
||||||
double ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng));
|
double ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng));
|
||||||
ret += transCore(lng, lat);
|
ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
|
||||||
|
ret += (20.0 * Math.sin(lng * PI) + 40.0 * Math.sin(lng / 3.0 * PI)) * 2.0 / 3.0;
|
||||||
ret += (150.0 * Math.sin(lng / 12.0 * PI) + 300.0 * Math.sin(lng / 30.0 * PI)) * 2.0 / 3.0;
|
ret += (150.0 * Math.sin(lng / 12.0 * PI) + 300.0 * Math.sin(lng / 30.0 * PI)) * 2.0 / 3.0;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -193,12 +181,14 @@ public class CoordinateUtil {
|
|||||||
* 计算纬度坐标
|
* 计算纬度坐标
|
||||||
*
|
*
|
||||||
* @param lng 经度
|
* @param lng 经度
|
||||||
* @param lat 维度
|
* @param lat 纬度
|
||||||
* @return ret 计算完成后的
|
* @return ret 计算完成后的
|
||||||
*/
|
*/
|
||||||
private static double transLat(final double lng, final double lat) {
|
private static double transLat(final double lng, final double lat) {
|
||||||
double ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng));
|
double ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat
|
||||||
ret += transCore(lng, lat);
|
+ 0.2 * Math.sqrt(Math.abs(lng));
|
||||||
|
ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
|
||||||
|
ret += (20.0 * Math.sin(lat * PI) + 40.0 * Math.sin(lat / 3.0 * PI)) * 2.0 / 3.0;
|
||||||
ret += (160.0 * Math.sin(lat / 12.0 * PI) + 320 * Math.sin(lat * PI / 30.0)) * 2.0 / 3.0;
|
ret += (160.0 * Math.sin(lat / 12.0 * PI) + 320 * Math.sin(lat * PI / 30.0)) * 2.0 / 3.0;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -12,37 +12,38 @@ import org.junit.Test;
|
|||||||
public class CoordinateUtilTest {
|
public class CoordinateUtilTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void wgs84ToGcj02Test(){
|
public void wgs84ToGcj02Test() {
|
||||||
final CoordinateUtil.Coordinate coordinate = CoordinateUtil.wgs84ToGcj02(116.404, 39.915);
|
final CoordinateUtil.Coordinate coordinate = CoordinateUtil.wgs84ToGcj02(116.404, 39.915);
|
||||||
Assert.assertEquals(116.41033392216508D, coordinate.getLng(), 0);
|
Assert.assertEquals(116.41024449916938D, coordinate.getLng(), 0);
|
||||||
Assert.assertEquals(39.91640428150164D, coordinate.getLat(), 0);
|
Assert.assertEquals(39.91640428150164D, coordinate.getLat(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void gcj02ToWgs84Test(){
|
public void gcj02ToWgs84Test() {
|
||||||
final CoordinateUtil.Coordinate coordinate = CoordinateUtil.gcj02ToWgs84(116.404, 39.915);
|
final CoordinateUtil.Coordinate coordinate = CoordinateUtil.gcj02ToWgs84(116.404, 39.915);
|
||||||
Assert.assertEquals(116.39766607783491D, coordinate.getLng(), 0);
|
Assert.assertEquals(116.39775550083061D, coordinate.getLng(), 0);
|
||||||
Assert.assertEquals(39.91359571849836D, coordinate.getLat(), 0);
|
Assert.assertEquals(39.91359571849836D, coordinate.getLat(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void wgs84toBd09Test(){
|
public void wgs84toBd09Test() {
|
||||||
final CoordinateUtil.Coordinate coordinate = CoordinateUtil.wgs84ToBd09(116.404, 39.915);
|
final CoordinateUtil.Coordinate coordinate = CoordinateUtil.wgs84ToBd09(116.404, 39.915);
|
||||||
Assert.assertEquals(116.41671695444782D, coordinate.getLng(), 0);
|
Assert.assertEquals(116.41662724378733D, coordinate.getLng(), 0);
|
||||||
Assert.assertEquals(39.922698713521726D, coordinate.getLat(), 0);
|
Assert.assertEquals(39.922699552216216D, coordinate.getLat(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void wgs84toBd09Test2(){
|
public void wgs84toBd09Test2() {
|
||||||
final CoordinateUtil.Coordinate coordinate = CoordinateUtil.wgs84ToBd09(122.99395597, 44.99804071);
|
// https://tool.lu/coordinate/
|
||||||
|
final CoordinateUtil.Coordinate coordinate = CoordinateUtil.wgs84ToBd09(122.99395597D, 44.99804071D);
|
||||||
Assert.assertEquals(123.00636516028885D, coordinate.getLng(), 0);
|
Assert.assertEquals(123.00636516028885D, coordinate.getLng(), 0);
|
||||||
Assert.assertEquals(45.00636909189589D, coordinate.getLat(), 0);
|
Assert.assertEquals(45.0063690918959D, coordinate.getLat(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void bd09toWgs84Test(){
|
public void bd09toWgs84Test() {
|
||||||
final CoordinateUtil.Coordinate coordinate = CoordinateUtil.bd09toWgs84(116.404, 39.915);
|
final CoordinateUtil.Coordinate coordinate = CoordinateUtil.bd09toWgs84(116.404, 39.915);
|
||||||
Assert.assertEquals(116.39129143419822D, coordinate.getLng(), 0);
|
Assert.assertEquals(116.3913836995125D, coordinate.getLng(), 0);
|
||||||
Assert.assertEquals(39.907253214522164D, coordinate.getLat(), 0);
|
Assert.assertEquals(39.907253214522164D, coordinate.getLat(), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -54,7 +55,7 @@ public class CoordinateUtilTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void bd09toGcj02Test(){
|
public void bd09toGcj02Test() {
|
||||||
final CoordinateUtil.Coordinate coordinate = CoordinateUtil.bd09ToGcj02(116.404, 39.915);
|
final CoordinateUtil.Coordinate coordinate = CoordinateUtil.bd09ToGcj02(116.404, 39.915);
|
||||||
Assert.assertEquals(116.39762729119315D, coordinate.getLng(), 0);
|
Assert.assertEquals(116.39762729119315D, coordinate.getLng(), 0);
|
||||||
Assert.assertEquals(39.90865673957631D, coordinate.getLat(), 0);
|
Assert.assertEquals(39.90865673957631D, coordinate.getLat(), 0);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user