【发布时间】:2013-12-16 07:08:16
【问题描述】:
我对墨卡托投影有一点问题,当我尝试在纬度上投影时,我得到了 nan 值...
我的代码来自这个问题: ConvertLATLONGTOXY
private static List<Point2D.Double> LatLongConvertionToXY(List<GeoPoint> coordinates) {
List<Point2D.Double> xys = new ArrayList<Point2D.Double>();
/*MercatorProjection projection = new MercatorProjection();*/
Log.i("LATLONG2RAD", "Nouvelle conversion");
for (GeoPoint coordinate : coordinates) {
double latitude = Double.valueOf(coordinate.getLatitudeE6());
double longitude = Double.valueOf(coordinate.getLongitudeE6());
// convert to radian
latitude = latitude * Math.PI / 180;
longitude = longitude * Math.PI / 180;
Log.i("LATLONG2RAD", String.valueOf(latitude)+" : "+String.valueOf(longitude));
/*Point2D.Double d = projection.project(longitude,latitude,
new Point2D.Double());*/
Point2D.Double d=new Point2D.Double();
double QUARTERPI = Math.PI / 4.0;
d.x = longitude;
d.y = Math.log(Math.tan(QUARTERPI + 0.5 * latitude));
Log.i("PointLATLONG YX", String.valueOf(d.y)+" : "+String.valueOf(d.x));
xys.add(d);
}
return xys;
}
这个返回值的例子: 12-15 21:42:27.165: I/LATLONG2RAD(32629): 新式转换
12-15 21:42:27.165: I/LATLONG2RAD(32629): LAT 782581.6732236275: LONG -10478.398323613315
12-15 21:42:27.165: I/LATLONG2RAD(32629): LAT 782581.6732236275: LONG -10478.398323613315
12-15 21:42:27.165: I/LATLONG2RAD(32629): LAT 782587.2931838189: LONG -10476.478461436123
12-15 21:42:27.165: I/LATLONG2RAD(32629): LAT 782571.9517396939: LONG -10476.478461436123
投影的返回值:
12-15 21:42:27.165:I/PointLATLONG YX(32629):NaN:-10478.398323613315
12-15 21:42:27.165:I/PointLATLONG YX(32629):NaN:-10478.398323613315
12-15 21:42:27.165:I/PointLATLONG YX(32629):NaN:-10476.478461436123
12-15 21:42:27.165:I/PointLATLONG YX(32629):1.7354151627839085:-10476.478461436123
【问题讨论】:
-
Math.log() 值小于 0 将返回 NaN
-
thx 我认为这个算法对我没有帮助,我使用 java 地图库中的墨卡托投影类,这也返回 nan 值,我有点迷茫,你可以在上面的代码中查看在评论中。有什么想法吗?
-
你没有使用它他在那个帖子中如何使用它他还有其他东西,例如://我们需要确定最小 X 和 Y 值的原因是因为为了绘制地图,//我们需要偏移位置,这样就不会有负的 X 和 Y 值 minXY.x = (minXY.x == -1) ? xy.x : Math.min(minXY.x, xy.x); minXY.y = (minXY.y == -1) ? xy.y : Math.min(minXY.y, xy.y);要检查,您应该返回并重新阅读他使用的代码。
标签: android google-maps map geometry openstreetmap