【问题标题】:How to display markers from sqlite on OpenStreetMap如何在 OpenStreetMap 上显示来自 sqlite 的标记
【发布时间】:2017-08-14 21:38:22
【问题描述】:

我正在使用 Sqlite 数据库和 OpenStreetMap 创建应用程序。在我的数据库中,我存储了一些数据,如 id、建筑物类型、年份、功能、纬度和经度。我正在尝试显示来自 db 的 OpenStreetMap 标记和一个具有当前 GPS 位置的标记。 此时我的地图上正在显示我的位置和来自 db 的第一条记录。 如何在地图上显示所有标记? 附言我尝试使用 Google 中的各种示例来完成此操作

我的地图课

public class Mapa extends Activity implements LocationListener {
private MapView osm;
private MapController mc;
private LocationManager locationManager;
WywiadData WywiadData;
int id_marker;
Double Dlugosc;
Double Szerokosc;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.map_view);

    osm = (MapView) findViewById(R.id.mapView);
    final float scale = getBaseContext().getResources().getDisplayMetrics().density;
    final int newScale = (int) (256 * scale);
    String[] OSMSource = new String[2];
    OSMSource[0] = "http://a.tile.openstreetmap.org/";
    OSMSource[1] = "http://b.tile.openstreetmap.org/";
    XYTileSource MapSource = new XYTileSource("OSM", null, 1, 18, newScale, ".png", OSMSource);
    osm.setTileSource(MapSource);
    osm.setBuiltInZoomControls(true);
    osm.setMultiTouchControls(true);
    osm.setMaxZoomLevel(18);
    osm.setMinZoomLevel(1);
    mc = (MapController) osm.getController();
    mc.setZoom(18);
    GeoPoint center = new GeoPoint(50.2586, 19.0223);
    mc.animateTo(center);
    WywiadData = new WywiadData(this, null, null, 1);
    Cursor cursor = WywiadData.getMarkers();
    Double Dlq = cursor.getDouble(cursor.getColumnIndexOrThrow("Dlugosc"));
    Double Szr = cursor.getDouble(cursor.getColumnIndexOrThrow("Szerokosc"));
    id_marker = cursor.getInt(cursor.getColumnIndexOrThrow("_id"));
    Dlugosc = Double.valueOf(Dlq);
    Szerokosc = Double.valueOf(Szr);


    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        // TODO: Consider calling
        return;
    }
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
}

@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
public void addMarker(GeoPoint center) {
    Marker marker = new Marker(osm);
    marker.setPosition(center);
    Marker marker2 = new Marker(osm);
    marker.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM);
    GeoPoint center2 = new GeoPoint(Dlugosc, Szerokosc);
    marker2.setPosition(center2);
    marker2.setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM);
    osm.getOverlays().add(marker);
    osm.getOverlays().add(marker2);
}


@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
@Override
public void onLocationChanged(Location location) {
    GeoPoint center = new GeoPoint(location.getLatitude(), location.getLongitude());
    mc.animateTo(center);
    osm.getOverlays().clear();
    addMarker(center);
    osm.invalidate();

}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {

}

@Override
public void onProviderEnabled(String provider) {

}

@Override
public void onProviderDisabled(String provider) {

}
}

还有我的 Db 类:

public class WywiadData extends SQLiteOpenHelper {
public static final String DATA_BASE_NAME = "WYWIAD.db";
public static final int DATA_BASE_VERSION = 1;
public final static String TAG = "Wywiad Data";

public WywiadData(Context context, Object o, Object o1, int i) {
    super(context, DATA_BASE_NAME, null, DATA_BASE_VERSION);
}

public void onCreate(SQLiteDatabase db) {
    db.execSQL("CREATE TABLE " + Tabela.TABLE_NAME + " ( " + Tabela._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + Tabela.OPERATOR + " TEXT, " + Tabela.FUNKCJA + " TEXT, " + Tabela.KOD_FUNKCJI + " TEXT, " + Tabela.MATERIAL + " TEXT, " + Tabela.ROK + " INTEGER, " + Tabela.ZRODLO + " TEXT, " + Tabela.KOND_NADZ + " INTEGER, " + Tabela.KOND_PODZ + " INTEGER, " + Tabela.STATUS + " TEXT, " + Tabela.DLUGOSC + " TEXT, " + Tabela.SZEROKOSC + " TEXT, " + Tabela.DATA + " TEXT, " + Tabela.UWAGI + " TEXT" + ")");
}

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

public boolean insertData(String Operator, String Funkcja, String Kod, String Material, String Rok, String Zrodlo, String Kond_nadz, String Kond_podz, String Status, String DataDodania, Double Dlugosc, Double Szerkosc, String Uwagi) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(Tabela.OPERATOR, Operator);
    contentValues.put(Tabela.FUNKCJA, Funkcja);
    contentValues.put(Tabela.KOD_FUNKCJI, Kod);
    contentValues.put(Tabela.MATERIAL, Material);
    contentValues.put(Tabela.ROK, Rok);
    contentValues.put(Tabela.ZRODLO, Zrodlo);
    contentValues.put(Tabela.KOND_NADZ, Kond_nadz);
    contentValues.put(Tabela.KOND_PODZ, Kond_podz);
    contentValues.put(Tabela.STATUS, Status);
    contentValues.put(Tabela.DATA, DataDodania);
    contentValues.put(Tabela.DLUGOSC, Dlugosc);
    contentValues.put(Tabela.SZEROKOSC, Szerkosc);
    contentValues.put(Tabela.UWAGI, Uwagi);
    long result = db.insert(Tabela.TABLE_NAME, null, contentValues);
    if (result == -1) {
        return false;
    } else {
        return true;
    }
}

public Cursor getListContents() {
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor data = db.rawQuery(" SELECT * FROM " + Tabela.TABLE_NAME, null);
    return data;
}


public Cursor getItemID(int id) {
    SQLiteDatabase db = this.getWritableDatabase();
    String query = " SELECT * FROM " + Tabela.TABLE_NAME + " WHERE " + Tabela._ID + " = '" + id + "'";
    Cursor cursor = db.rawQuery(query, null);
    if (cursor != null) {
        cursor.moveToFirst();

    }
    Log.e("Wywiad", "zwrócono po id: " + cursor);
    return cursor;
}


public void updateData(Lista lista) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(Tabela.OPERATOR, lista.getOperator());
    contentValues.put(Tabela.FUNKCJA, lista.getfunkcja());
    contentValues.put(Tabela.KOD_FUNKCJI, lista.getKod());
    contentValues.put(Tabela.MATERIAL, lista.getmaterial());
    contentValues.put(Tabela.ROK, lista.getrok());
    contentValues.put(Tabela.ZRODLO, lista.getzrodlo());
    contentValues.put(Tabela.KOND_NADZ, lista.getKondygnacje_nad());
    contentValues.put(Tabela.KOND_PODZ, lista.getKondygnacje_pod());
    contentValues.put(Tabela.STATUS, lista.getstatus());
    contentValues.put(Tabela.UWAGI, lista.getuwagi());
    db.update(Tabela.TABLE_NAME, contentValues, Tabela._ID + "=?", new String[]{String.valueOf(lista.getIdentyfikator())});
    db.close();

}

public void deleteData(int id) {
    SQLiteDatabase db = this.getWritableDatabase();
    String query = " DELETE FROM " + Tabela.TABLE_NAME + " WHERE " + Tabela._ID + " = '" + id + "'";
    db.execSQL(query);
}

public Cursor getMarkers() {
    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(" SELECT * FROM " + Tabela.TABLE_NAME, null);
    if (cursor != null) {
        cursor.moveToFirst();

    }
    return cursor;
}
}

【问题讨论】:

    标签: android sqlite openstreetmap markers


    【解决方案1】:

    您实际上并没有创建标记,您要做的是使用 MarkerOptions 定义标记的特征,然后将其添加到地图中

    public void addMarker(GeoPoint center) {
        MarkerOptions options = new MarkerOptions();
        Marker marker = new Marker(osm);
        options.position(center);
        options.anchor( Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM);
    
        Marker marker = osm.AddMarker(options);
    }
    

    编辑 从 sqlite 添加所有内容

    try {
        while (cursor.moveToNext()) {
            GeoPoint point = new GeoPoint(cursor.getLong("lat"), cursor.getLong("lng"));
            addMarker(point);
        }
    } finally {
        cursor.close();
    }
    

    这将遍历光标中的所有对象,创建一个 GeoPoint,然后将其传递给 addMarker 方法

    【讨论】:

    • 那么如何显示来自 sqlite 的所有标记?你能给我解释一下吗?很抱歉,我刚开始编程,现在对我来说太难了。
    猜你喜欢
    • 2017-11-29
    • 2019-04-20
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    相关资源
    最近更新 更多