2012-07-28 81 views
0

由于一些计算,我必须将GeoPoint转换为屏幕坐标,请对它们进行一些操作,然后将它们转换回GeoPoint。Android:MapView投影不准确

不幸的是,经过这些转换之后,新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 

有没有办法来improove这种不准确性。

+1

这可能是一个解决问题? (即覆盖许多地点的一个像素)。要测试,请采用'after'地点,并通过相同的流程运行。如果这是一个解决问题,它应该没有变化。如果它在投影中出现错误,那么它应该以相同的边距出现。 – 2012-09-23 13:44:39

+0

你说得对。它保持不变。这是否意味着没有办法改进它? – anonymous 2012-09-23 15:13:52

+0

您应该可以提高地图的分辨率(可能通过放大)。您只需要充分展开,每个经纬度地理坐标就可以单独解析为不同的像素。 – 2012-09-23 21:12:54

回答

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` 
0

我没有尝试这样做,但你转换的GeoPoint之前以像素为单位,这样当你四舍五入到E6你将有一个更小的错误,你可以用10或100尝试多。 我希望它能帮助你。

+0

我会在接下来的几天尝试这个... – anonymous 2012-09-30 20:40:16