2016-01-23 71 views
0

我想在地图上绘制自定义标记。如何组织许多标记的显示。SQlite在Google地图上添加多个标记

public class DatabaseHelper extends SQLiteOpenHelper { 

static final String TABLE = "geotable"; 

public DatabaseHelper(Context context) { 
    super(context, "myDB", null, 1); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL("create table geotable (" 
      + "id integer primary key autoincrement," 
      + "image text," 
      + "lng text," 
      + "lat text" + ");"); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("DROP TABLE IF EXISTS "+TABLE); 
    onCreate(db); 
} 

在第一堂课我用db创建表。然后把信息在这张表

case R.id.saveToBD: 

      cv.put("image", tex); 
      cv.put("lng", lng); 
      cv.put("lat", ltd); 
      break; 

然后我需要显示所有标记从数据库映射。但我在地图上只看到一个(最后一个)标记。我如何组织一个循环?

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { 

DatabaseHelper sqlHelper; 
SQLiteDatabase db; 
Cursor userCursor; 

private GoogleMap googleMap; 
private String imageTest; 
double lngTest, ltdTest; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_maps); 
    // Obtain the SupportMapFragment and get notified when the map is ready to be used. 
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
      .findFragmentById(R.id.map); 
    mapFragment.getMapAsync(this); 
    sqlHelper = new DatabaseHelper(getApplicationContext()); 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    db = sqlHelper.getReadableDatabase(); 

    userCursor = db.query("geotable", null, null, null, null, null, null); 

    if (userCursor.moveToFirst()) { 

     int imageColIndex = userCursor.getColumnIndex("image"); 
     int lngColIndex = userCursor.getColumnIndex("lng"); 
     int latlColIndex = userCursor.getColumnIndex("lat"); 

     do { 

     imageTest = userCursor.getString(imageColIndex); 
     lngTest = userCursor.getDouble(lngColIndex); 
     ltdTest = userCursor.getDouble(latlColIndex); 

     } 
      while (userCursor.moveToNext()); 
    } 

    else 
userCursor.close(); 

} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    db.close(); 
    userCursor.close(); 
} 

@Override 
public void onMapReady(GoogleMap googleMap) { 
    googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(
      new LatLng(ltdTest, lngTest), 16)); 

    // You can customize the marker image using images bundled with 
    // your app, or dynamically generated bitmaps. 

     googleMap.addMarker(new MarkerOptions() 
       .icon(BitmapDescriptorFactory.fromPath(imageTest)) 
       .anchor(0.0f, 1.0f) // Anchors the marker on the bottom left 
       .position(new LatLng(ltdTest, lngTest))); 

} 

加ArrayList中,

 if (userCursor.moveToFirst()) { 

     int imageColIndex = userCursor.getColumnIndex("image"); 
     int lngColIndex = userCursor.getColumnIndex("lng"); 
     int latlColIndex = userCursor.getColumnIndex("lat"); 

     do { 

     imageTest = userCursor.getString(imageColIndex); 
     lngTest = userCursor.getDouble(lngColIndex); 
     ltdTest = userCursor.getDouble(latlColIndex); 

      geoList.add(imageTest); 
      geoList.add(lngTest); 
      geoList.add(ltdTest); 

     } 
      while (userCursor.moveToNext()); 
    } 

然后显示与周期标记

 for (int i = 0; i < geoList.size(); i=i+3) { 

     googleMap.addMarker(new MarkerOptions() 
       .icon(BitmapDescriptorFactory.fromPath((String) geoList.get(i))) 
       .anchor(0.0f, 1.0f) // Anchors the marker on the bottom left 
       .position(new LatLng((Double) geoList.get(i+2), (Double) geoList.get(i+1)))); 

    } 

在地图上只显示最后添加到DB标志,我'加2-10标志但见只有最后。

回答

0

您是从整型变量的geotableonResume()读取数据:在onMapReady(GoogleMap googleMap)

imageTest = userCursor.getString(imageColIndex); 
lngTest = userCursor.getDouble(lngColIndex); 
ltdTest = userCursor.getDouble(latlColIndex); 

然后您添加使用上述变量的值,其中包含的只有最后一排数据标记您的geotable

googleMap.addMarker(new MarkerOptions() 
    .icon(BitmapDescriptorFactory.fromPath(imageTest)) 
    .anchor(0.0f, 1.0f) // Anchors the marker on the bottom left 
    .position(new LatLng(ltdTest, lngTest))); 

您应该使用ArrayList从geotable获取数据并在onMapReady(GoogleMap googleMap)的循环内添加多个标记。

+0

请给我更多关于aloop坐标的信息 – YAndrii

+0

我没有正确的把数据放到数据库中,所有的标记都设置为table,其中id = 0; – YAndrii

相关问题