0

由于一些计算,我必须将 GeoPoint 转换为屏幕坐标,对它们进行处理,然后将它们转换回 GeoPoint。

可悲的是,在这些转换之后,新的 GeoPoint 总是距离我想要的点 0-2 毫米(在屏幕上)。

令人惊讶的是,以下代码行已经稍微改变了 GeoPoint。

Projection projection = map.getProjection(); 
Log.d("bevore", geoPoint.getLatitudeE6() +" "+geoPoint.getLongitudeE6());
Point pt = new Point();

projection.toPixels(geoPoint, pt);

geoPoint = projection.fromPixels(pt.x, pt.y);
Log.d("after", geoPoint.getLatitudeE6() +" | "+geoPoint.getLongitudeE6());

输出是:

 D/bevore(31252): 53106803 | 8852244
 D/after(31252): 53106802 | 8852240

有没有办法改善这种不准确性。

4

2 回答 2

0

我还没有尝试过,但是您可以在将地理点转换为像素之前尝试将其乘以 10 或 100,这样当您四舍五入到 E6 时,您的错误就会减少。我希望它会帮助你。

于 2012-09-30T12:29:48.060 回答
0

GeoPoint您可以计算一次转换前后的差异,并将其添加到fromPixels每次需要的结果中。

Projection projection = map.getProjection();
projection.toPixels(geoPointBefore, pt);
geoPointAfter = projection.fromPixels(pt.x, pt.y);

int diffLatitude  = geoPointBefore.getLatitudeE6()  - geoPointAfter.getLatitudeE6();
int diffLongitude = geoPointBefore.getLongitudeE6() - geoPointAfter.getLongitudeE6();
...
...
...
// Add the difference to GeoPoint objects after conversion `fromPixels`
于 2012-09-24T07:01:59.450 回答