由于一些计算,我必须将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
有没有办法改善这种不准确性。
答案 0 :(得分: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`
答案 1 :(得分:0)
我还没试过这个,但是你可以尝试在转换地理点之前以10或100倍数,这样你在转向E6时会有更少的错误。 我希望它会对你有所帮助。