有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

google maps Geoppoint类中的java丢失精度

我想把谷歌地图上的地理位置数据输入数据库。但通过一个地球点物体,我似乎失去了很多精度

作为onActivityResult响应的结果,我得到了一个意图,意图是一个地质点的额外数据:

@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/财务活动(1653):原始lat/lng 42234412:-70999749 03-08 10:28:16.164:D/财务活动(1653):地质点lat/lng 42234412:-70999749

看起来不错!地质点lat/lng与输入值相同

m_数据。因此,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

我猜幕后正在进行某种转换/推广。。。但代码非常简单

有没有关于精度的猜测


共 (1) 个答案

  1. # 1 楼答案

    您的addMarker调用使用的是m_gp,而不是oi.getPoint(),因此它根本没有使用相同的值

    也许这不是真正的问题,但你可能只需要:

    m_data.addMarker(oi.getPoint(), data.getIntExtra("MARK_ID", R.drawable.tile5));