用于搜索标记的搜索框(Google 地图)
Search box to search marker (Google Map)
我想问一下我在应用程序中使用 google 地图开发的 android 应用程序。我已经在我的地图上做了多个标记(1323 个数据,所以 1323 个标记)。所以问题是:
我想制作搜索框以在我的地图上查找特定标记。我不知道如何找到。是否可以在 marker
中使用 title 或 snippet 找到
c = myDbHelper.query("Landslide", null, null, null, null,null, null);
if(c.moveToFirst()) {
do {
String loc = c.getString(3);
Double lat = c.getDouble(4);
Double lng = c.getDouble(5);
String date = c.getString(1);
//Integer death = c.getInt(6);
mMap.addMarker(new MarkerOptions()
.position(new LatLng(lat, lng))
.title(loc + "")
.snippet("Latitude:" + lat + " " + "Longitude:" + lng + " " + "Date:" + date + "")
.icon(BitmapDescriptorFactory.fromResource(R.drawable.red1)));
} while (c.moveToNext());
}
}
在此先感谢帮助我的人,
问候,
哈菲祖尔礼萨
创建全局 List/Map/Array 个标记:
private HashMap<String, Marker> markers = new HashMap<String,Marker>();
并用标记填充:
//...
Marker marker = mMap.addMarker(new MarkerOptions()
.position(new LatLng(lat, lng))
.title(loc + "")
.snippet("Latitude:" + lat + " " + "Longitude:" + lng + " " + "Date:" + date + "")
.icon(BitmapDescriptorFactory.fromResource(R.drawable.red1)));
markers.put("Name1", marker);
//add more and more markers
现在您可以轻松找到并获取任何标记:
Marker marker = markers.get("Name1");
作为 markers HashMap 的第一个参数,您可以将 Marker title/snippet/coordinates/... .
我猜你的标记数据存储在你设备上的 SQLite 中。
您可以尝试在您的布局中添加一个搜索框,例如 EditText xml :
<EditText android:id="@+id/edit_textt_d" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
然后执行 onChange :
yourEditText = (EditText) findViewById(R.id.yourEditTextId);
yourEditTextaddTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
changeMarker(s)
}
});
在每次更改时,您应该:
删除地图的当前标记,
仅查询与搜索框值匹配的标记:
public void changeMarker(String searchString) {
...
myGoogleMap.clear();
c=myDbHelper.getReadableDatabase().rawQuery("SELECT * FROM marker WHERE marker.name LIKE '"+searchString+"%'");
...
}
然后像您在问题中所做的那样将您的标记重新添加到地图上。希望这有助于...
我想问一下我在应用程序中使用 google 地图开发的 android 应用程序。我已经在我的地图上做了多个标记(1323 个数据,所以 1323 个标记)。所以问题是:
我想制作搜索框以在我的地图上查找特定标记。我不知道如何找到。是否可以在 marker
中使用 title 或 snippet 找到c = myDbHelper.query("Landslide", null, null, null, null,null, null);
if(c.moveToFirst()) {
do {
String loc = c.getString(3);
Double lat = c.getDouble(4);
Double lng = c.getDouble(5);
String date = c.getString(1);
//Integer death = c.getInt(6);
mMap.addMarker(new MarkerOptions()
.position(new LatLng(lat, lng))
.title(loc + "")
.snippet("Latitude:" + lat + " " + "Longitude:" + lng + " " + "Date:" + date + "")
.icon(BitmapDescriptorFactory.fromResource(R.drawable.red1)));
} while (c.moveToNext());
}
}
在此先感谢帮助我的人, 问候, 哈菲祖尔礼萨
创建全局 List/Map/Array 个标记:
private HashMap<String, Marker> markers = new HashMap<String,Marker>();
并用标记填充:
//...
Marker marker = mMap.addMarker(new MarkerOptions()
.position(new LatLng(lat, lng))
.title(loc + "")
.snippet("Latitude:" + lat + " " + "Longitude:" + lng + " " + "Date:" + date + "")
.icon(BitmapDescriptorFactory.fromResource(R.drawable.red1)));
markers.put("Name1", marker);
//add more and more markers
现在您可以轻松找到并获取任何标记:
Marker marker = markers.get("Name1");
作为 markers HashMap 的第一个参数,您可以将 Marker title/snippet/coordinates/... .
我猜你的标记数据存储在你设备上的 SQLite 中。 您可以尝试在您的布局中添加一个搜索框,例如 EditText xml :
<EditText android:id="@+id/edit_textt_d" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
然后执行 onChange :
yourEditText = (EditText) findViewById(R.id.yourEditTextId);
yourEditTextaddTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
changeMarker(s)
}
});
在每次更改时,您应该: 删除地图的当前标记, 仅查询与搜索框值匹配的标记:
public void changeMarker(String searchString) {
...
myGoogleMap.clear();
c=myDbHelper.getReadableDatabase().rawQuery("SELECT * FROM marker WHERE marker.name LIKE '"+searchString+"%'");
...
}
然后像您在问题中所做的那样将您的标记重新添加到地图上。希望这有助于...