我正在尝试将 Google map 中的一些地理位置数据放入数据库中。但是传递 GeoPoint 对象时,我似乎失去了大量的精度。
我得到一个 Intent 作为 onActivityResult 响应的结果,在 Intent 中是地理点的额外数据:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d(TAG,String.format("doMark returns with %d", resultCode));
int lat = data.getIntExtra("MARK_LAT", 0);
int lng = data.getIntExtra("MARK_LNG", 0);
Log.d(TAG, String.format("Orig lat/lng %d:%d", lat, lng));
OverlayItem oi = new OverlayItem(new GeoPoint(lat,lng), "ID", "");
Log.d(TAG, String.format("GeoPoint lat/lng %d:%d",
oi.getPoint().getLatitudeE6(),
oi.getPoint().getLongitudeE6()));
m_data.addMarker(m_gp, data.getIntExtra("MARK_ID", R.drawable.tile5));
super.onActivityResult(requestCode, resultCode, data);
}
在 logcat 中我得到:
03-08 10:28:16.164: D/TREASUREACTIVITY(1653): 原始纬度/经度 42234412:-70999749 03-08 10:28:16.164: D/TREASUREACTIVITY(1653): GeoPoint 纬度/经度 42234412:-70999749
看起来不错! GeoPoint lat/lng 与输入值相同。
m_data.addMarker() 函数如下:
public void addMarker(GeoPoint p, int id) {
SQLiteDatabase db = getWritableDatabase();
ContentValues values = new ContentValues();
values.put("TIME", System.currentTimeMillis());
values.put("LAT", p.getLatitudeE6());
values.put("LNG", p.getLongitudeE6());
values.put("MARK_ID", id);
db.insert("MARKER", null, values);
Log.d(TAG,String.format("INSERT MARKER %d %d",p.getLatitudeE6(),
p.getLongitudeE6()));
db.close();
}
addMarker() 的 logcat 是:
03-08 10:28:16.194: D/DDATA(1653): 插入标记 42234000 -71000000
我假设幕后正在进行某种转换/促销......但代码非常简单。
你猜一下精度去了哪里吗?
最佳答案
您的 addMarker
调用使用的是 m_gp
,而不是 oi.getPoint()
- 因此它根本不使用相同的值。
也许这不是真正的问题,但您可能只需要:
m_data.addMarker(oi.getPoint(), data.getIntExtra("MARK_ID", R.drawable.tile5));
关于java - 谷歌地图 GeoPoint 类失去精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9620343/