2013-03-07 91 views
0

我有一个应用程序,可以从我的数据库中获取经度和纬度,并且想要在MapView中显示它。我能够显示最近存储的那个,但我认为在for循环中需要一些数组才能将其添加到叠加层中。我不知道如何实现它。从数据库中检索位置并在MapView中显示它

这是我buttonClick,并会获取纬度/长,显示它MapView

buttonShowMarkers = (Button) findViewById(R.id.button_SHOW_MARKERS); 

buttonShowMarkers.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     try { 
      db = openOrCreateDatabase("LocationFetch.db", MODE_PRIVATE , null); 
      cursor = db.rawQuery("SELECT * FROM user" , null); 
      cursor.moveToFirst(); 
      do { 
       int dataID = cursor.getColumnIndex("id"); 
       String dataString = cursor.getString(0); 
       Log.d("ID DATA FROM DATABASE---->" , dataString); 

       String dataNAME = cursor.getString(1).toString().trim(); 
       Log.d("NAME DATA FROM DATABASE---->", dataNAME); 

       String dataLAT = cursor.getString(2).toString().trim(); 
       Log.d("LAT DATA FROM DATABASE----->" , dataLAT); 
       int latitude = cursor.getColumnIndex("latitude"); 

       String dataLON = cursor.getString(3).toString().trim(); 
       Log.d("LON DATA FROM DATABASE----->" , dataLON); 
       int longitude = cursor.getColumnIndex("longitude"); 

       showLatLon(latitude , longitude , dataNAME); 
       // ArrayList<OverlayItem> items = new ArrayList<OverlayItem>(); 
       /* List<Overlay> ListOverlays = mapView.getOverlays(); 
       * OverlayItem[] markerItem = {new OverlayItem(new GeoPoint(latitude, longitude) , ""+dataNAME , ""+dataString)}; 
       * OverlayItem markerItem = new OverlayItem(new GeoPoint((int)(latitude *1E6), (int)(longitude *1E6)) , ""+dataNAME , ""+dataString); 
       * drawableOne = getResources().getDrawable(R.drawable.location_blue);   
       * helloItemizedOverlay = new HelloItemizedOverlay(drawableOne); 
       * helloItemizedOverlay.addOverlayItem(markerItem); 
       * mapView.getOverlays().add(helloItemizedOverlay); 
       * ListOverlays.add(myItemizedOverlay);*/ 

       //for(int i = dataID ;) 
      } while (cursor.moveToNext()); 

      /*String[] arrLat = new String[]{LATdata}; 
       String[] arrLon = new String[]{LONdata};*/ 

      //showLatLon(dataLAT , dataLON);      
      cursor.moveToNext(); 
     } catch(SQLException e) { 
      e.printStackTrace(); 
     } finally { 
      cursor.close(); 
     } 
     db.close(); 
    }   

    private void showLatLon(int latitude , int longitude , String nAMEdata) { 
     // GeoPoint point = new GeoPoint((latitude) , (latitude)); 

     List<Overlay> ListOverlays = mapView.getOverlays(); 

     //OverlayItem[] markerItem = {new OverlayItem(new GeoPoint(latitude, longitude) , ""+dataNAME , ""+dataString)}; 
     OverlayItem markerItem = new OverlayItem(new GeoPoint(latitude,latitude) , ""+nAMEdata , null); 
     drawableOne = getResources().getDrawable(R.drawable.location_blue); 

     helloItemizedOverlay = new HelloItemizedOverlay(drawableOne);   
     helloItemizedOverlay.addOverlayItem(markerItem); 

     mapView.getOverlays().add(helloItemizedOverlay); 

     ListOverlays.add(myItemizedOverlay); 
    }   
}); 
+0

MapView?您有没有使用Android Gmaps API v2的原因? – yarian 2013-03-07 07:52:12

+0

谷歌地图Android API版本1自2012年12月3日起正式弃用。鼓励开发者使用Google Maps Android API v2。 – Anukool 2013-03-07 08:09:01

+0

我正在使用姜饼 – ayansinha 2013-03-07 09:44:00

回答

0

您可以尝试使用该解决方案 -

  1. 创建一个类名为LatLonPoint - 这基本上是从latlon转换到GeoPoint -


public class LatLonPoint extends GeoPoint { 
public LatLonPoint(double latitude, double longitude) { 
    super((int) (latitude * 1E6), (int) (longitude * 1E6)); 
} 
} 


创建一个分项覆盖 - 在主要活动


public class HelloItemizedOverlay extends ItemizedOverlay<OverlayItem> { 
private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>(); 
private Context mContext; 

public HelloItemizedOverlay(Drawable defaultMarker, Context context) { 
    super(boundCenterBottom(defaultMarker)); 
    mContext = context; 
} 

public void addOverlay(OverlayItem overlay) { 
    mOverlays.add(overlay); 
    populate(); 
} 

@Override 
protected OverlayItem createItem(int i) { 
    return mOverlays.get(i); 
} 

@Override 
public int size() { 
    return mOverlays.size(); 
} 

@Override 
protected boolean onTap(int index) { 
    OverlayItem item = mOverlays.get(index); 
    AlertDialog.Builder dialog = new AlertDialog.Builder(mContext); 
    dialog.setTitle(item.getTitle()); 
    dialog.setMessage(item.getSnippet()); 
    dialog.show(); 
    return true; 
} 

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event, MapView mapView) { 

    if (keyCode == KeyEvent.KEYCODE_BACK) { 

    } 
    return super.onKeyDown(keyCode, event, mapView); 
} 

}

现在 -

try { 
      db = openOrCreateDatabase("LocationFetch.db", MODE_PRIVATE , null); 
      cursor = db.rawQuery("SELECT * FROM user" , null); 
      cursor.moveToFirst(); 

      do { 
       int dataID = cursor.getColumnIndex("id"); 
       String dataString = cursor.getString(0); 
       Log.d("ID DATA FROM DATABASE---->" , dataString); 

       String dataNAME = cursor.getString(1).toString().trim(); 
       Log.d("NAME DATA FROM DATABASE---->", dataNAME); 

       String dataLAT = cursor.getString(2).toString().trim(); 
       Log.d("LAT DATA FROM DATABASE----->" , dataLAT); 
       int latitude = cursor.getColumnIndex("latitude"); 

       String dataLON = cursor.getString(3).toString().trim(); 
       Log.d("LON DATA FROM DATABASE----->" , dataLON); 
       int longitude = cursor.getColumnIndex("longitude"); 

        // Add the item here -- 
       itemizedoverlay.addOverlay(new OverlayItem(new LatLonPoint(latitude, longitude), dataNAME, null)); 


       //showLatLon(latitude , longitude , dataNAME); 
       // ArrayList<OverlayItem> items = new ArrayList<OverlayItem>(); 
       /* List<Overlay> ListOverlays = mapView.getOverlays(); 
       * OverlayItem[] markerItem = {new OverlayItem(new GeoPoint(latitude, longitude) , ""+dataNAME , ""+dataString)}; 
       * OverlayItem markerItem = new OverlayItem(new GeoPoint((int)(latitude *1E6), (int)(longitude *1E6)) , ""+dataNAME , ""+dataString); 
       * drawableOne = getResources().getDrawable(R.drawable.location_blue);   
       * helloItemizedOverlay = new HelloItemizedOverlay(drawableOne); 
       * helloItemizedOverlay.addOverlayItem(markerItem); 
       * mapView.getOverlays().add(helloItemizedOverlay); 
       * ListOverlays.add(myItemizedOverlay);*/ 

       //for(int i = dataID ;) 
      } while (cursor.moveToNext()); 

       // Add all itemized overlay here 
      mapOverlays.add(itemizedoverlay); 


      /*String[] arrLat = new String[]{LATdata}; 
       String[] arrLon = new String[]{LONdata};*/ 

      //showLatLon(dataLAT , dataLON);      
      //cursor.moveToNext(); 
     } catch(SQLException e) { 
      e.printStackTrace(); 
     } finally { 
      cursor.close(); 
     } 

对于你必须初始化这两个项目beffore的做上述块。虽然 -

List<Overlay> mapOverlays = mMapView.getOverlays(); 


HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(
      drawable, this); 

EDIT--添加迭代游标部分 -

Drawable drawable = this.getResources().getDrawable(
        R.drawable.ic_launcher); 
      List<Overlay> mapOverlays = mMapView.getOverlays(); 
      HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(
        drawable, this); 
      while(cursor.moveToNext()) 
      { 
       // get the values -- 
       int dataID = cursor.getColumnIndex("id"); 

       String dataString = cursor.getString(0); 
       Log.d("ID DATA FROM DATABASE---->" , dataString); 

       String dataNAME = cursor.getString(1).toString().trim(); 
       Log.d("NAME DATA FROM DATABASE---->", dataNAME); 

       String dataLAT = cursor.getString(2).toString().trim(); 
       Log.d("LAT DATA FROM DATABASE----->" , dataLAT); 

       int latitude = cursor.getColumnIndex("latitude"); 
       String dataLON = cursor.getString(3).toString().trim(); 
       Log.d("LON DATA FROM DATABASE----->" , dataLON); 
       int longitude = cursor.getColumnIndex("longitude"); 

       // Assuming your logic for retrieving values is correct 
       // Add into the itemized Overlay here 
       itemizedoverlay.addOverlay(new OverlayItem(new LatLonPoint(latitude, longitude), dataNAME, null)); 

      } 
      mapOverlays.add(itemizedoverlay); 
+0

@Ankool它不工作亲爱的,它给我错误光标OutOfBoundException。即使我在外圈写字,我将如何获得经度和纬度,再次帮助我SOS。 – ayansinha 2013-03-07 09:42:43

+0

不知何故,我认为第二个cursor.moveToNext()不是必需的。尝试评论一个。检查编辑。 – Anukool 2013-03-07 09:54:24

+0

嗯,我已经调试了这个异常,但现在只能获取我输入数据库的最后一个值,即最近的数据。以及如何在地图视图中显示所有文件和长文件。 – ayansinha 2013-03-07 10:01:05

相关问题