如何在从 ListView 项获取的两个地理点之间绘制标记和路线?
Posted
技术标签:
【中文标题】如何在从 ListView 项获取的两个地理点之间绘制标记和路线?【英文标题】:How to draw Marker and route between two geo points taken from ListView item? 【发布时间】:2015-05-13 10:29:27 【问题描述】:我有任务。我必须在一项活动中在ListView
上显示来自特定手机号码的消息。这些消息包含两个位置的纬度和经度。当我单击任何列表项时,它应该在这两个位置上绘制标记,并且必须在另一个活动中在它们之间绘制路线。
我的消息格式是!+11.3326,+077.7193,08:41!+11.3326,+077.7194,08:41#
我的 MainActivity.java 是
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ListView listView = (ListView) findViewById(R.id.listView);
List<String> msgList=getSMS();
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,msgList);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener()
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
String str=(String)parent.getItemAtPosition(position);
String lat1=str.substring(2,8);
String lng1=str.substring(11,18);
String lat2=str.substring(27,33);
String lng2=str.substring(36,43);
Toast.makeText(getApplicationContext(),lat1+""+lng1+""+lat2+""+lng2,Toast.LENGTH_SHORT).show();
Intent intent=new Intent(MainActivity.this,MapsActivity.class);
startActivity(intent);
);
public List<String> getSMS()
List<String>sms=new ArrayList<String>();
final String SMS_URI_INBOX="content://sms/inbox";
try
Uri uri=Uri.parse(SMS_URI_INBOX);
String[] projection=new String[]"_id","address","person","body","date","type";
Cursor cursor=getContentResolver().query(uri,projection,"address='+918870346164'",null,null);
if (cursor.moveToFirst())
int index_Address = cursor.getColumnIndex("address");
int index_Person = cursor.getColumnIndex("person");
int index_Body = cursor.getColumnIndex("body");
int index_Date = cursor.getColumnIndex("date");
int index_Type = cursor.getColumnIndex("type");
do
String strAddress = cursor.getString(index_Address);
int intPerson = cursor.getInt(index_Person);
String strBody = cursor.getString(index_Body);
String longDate = cursor.getString(index_Date);
int intType = cursor.getInt(index_Type);
sms.add("\n"+strBody+"\n");
while (cursor.moveToNext());
if (!cursor.isClosed())
cursor.close();
cursor=null;
catch (SQLiteException e)
Log.d("SQLiteException",e.getMessage());
return sms;
我的 MapsActivity.java 是 公共类 MapsActivity 扩展 FragmentActivity
GoogleMap mMap; // Might be null if Google Play services APK is not available.
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
setUpMapIfNeeded();
mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
mMap.getUiSettings().setZoomControlsEnabled(true);
mMap.getUiSettings().setZoomGesturesEnabled(true);
mMap.getUiSettings().setMyLocationButtonEnabled(true);
addMarker();
private void addMarker()
final LatLng latLng=new LatLng(lat1,lng1);
mMap.addMarker(new MarkerOptions().position(latLng).title("My Marker"));
我已经显示了这些消息,并且可以从ListView
项目中获取输入。我不知道如何将那些lat1
、lng1
、lat2
、lng2
值传递给MapsActivity
并添加标记。请有任何解决方案。
【问题讨论】:
【参考方案1】:当您启动地图活动时,请在您的意图中传递 latlng 值。
listView.setOnItemClickListener(new AdapterView.OnItemClickListener()
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
String str=(String)parent.getItemAtPosition(position);
Intent intent=new Intent(MainActivity.this,MapsActivity.class);
intent.putExtra("locationValues",str);
startActivity(intent);
);
现在在您创建地图的活动中取回这些值。
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
setUpMapIfNeeded();
mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
mMap.getUiSettings().setZoomControlsEnabled(true);
mMap.getUiSettings().setZoomGesturesEnabled(true);
mMap.getUiSettings().setMyLocationButtonEnabled(true);
String locationString = this.getIntent().getStringExtra("locationValues","");
if(!TextUtils.isEmpty(locationString))
String lat1=str.substring(2,8);
String lng1=str.substring(11,18);
String lat2=str.substring(27,33);
String lng2=str.substring(36,43);
addMarker(lat1,lng1,lat2,lng2);
private void addMarker(String lat1,String lng1,String lat2,String lng2)
//you can use those value here then.
final LatLng latLng=new LatLng(lat1,lng1);
mMap.addMarker(new MarkerOptions().position(latLng).title("My Marker"));
【讨论】:
以上是关于如何在从 ListView 项获取的两个地理点之间绘制标记和路线?的主要内容,如果未能解决你的问题,请参考以下文章