如何从 JSON 数据中删除地图上的标记?
How to delete markers on map from JSON data?
我有 json 这样的数据:
[
{
"id": 1,
"name": "name",
"login": "login",
"lat": "43.854891",
"lng": "73.536660"
},
{
"id": 2,
"name": "name",
"login": "login",
"lat": "53.954891",
"lng": "73.536660"
}
]
我从json获取所有数据并显示它们,但是当位置改变时,如果不删除旧位置就无法显示新数据。还有一个当前位置,显示并删除旧位置。这是我的代码:
private static final String REQUEST_URL = "http://192.168.1.103:8080/";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
checkPermission();
buildGoogleApiClient();
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
LocationSearchTask locationSearchTask = new LocationSearchTask();
locationSearchTask.execute(REQUEST_URL);
}
@Override
public void onLocationChanged(Location location) {
Log.i(TAG, location.toString());
latitude = location.getLatitude();
longitude = location.getLongitude();
LatLng latLng = new LatLng(latitude, longitude);
if (currentMarker != null) {
currentMarker.remove();
}
displayLocation(latLng, 15f, location);
updateOtherLocations();
}
public void updateOtherLocations() {
LocationSearchTask locationSearchTask = new LocationSearchTask();
locationSearchTask.execute(REQUEST_URL);
}
class LocationSearchTask extends AsyncTask<String, Void, List<User>> {
@Override
protected List<User> doInBackground(String... urls) {
try {
if (urls.length < 1 || urls[0] == null) {
return null;
}
List<User> result = QueryData.fetchUsersData(urls[0]);
return result;
} catch (Exception e) {
Toast.makeText(MapsActivity.this, "Error: " + e.getMessage(), Toast.LENGTH_SHORT).show();
return null;
}
}
@Override
protected void onPostExecute(List<User> users) {
try {
for (User user : users) {
LatLng position = new LatLng(user.getLat(), user.getLng());
// add marker
otherMarkers = mMap.addMarker(new MarkerOptions()
.position(position)
.title(user.getFirstName())
.icon(bitmapDescriptorFromVector(getApplicationContext(), R.mipmap.ic_navigation))
.snippet(user.getEmail()));
}
} catch (Exception e) {
Toast.makeText(MapsActivity.this, "Sorry other locations are unavailable! Error: " + e.getMessage(), Toast.LENGTH_SHORT).show();
}
}
如何删除 ** otherLocations ** 并显示新位置?
我知道这是一个糟糕的代码,如果你能向我推荐还有什么值得改变的。提前谢谢你。
您可以使用 mMap.clear()
从地图上删除所有标记。
如果你想更新一个标记位置(在当前标记的情况下),然后按住之前添加的标记,然后像 marker.setPosition(new LatLng(50,5));
标记上有一个现有字段可以使它们可见或不可见
在标记文档中查看可见
我有 json 这样的数据:
[
{
"id": 1,
"name": "name",
"login": "login",
"lat": "43.854891",
"lng": "73.536660"
},
{
"id": 2,
"name": "name",
"login": "login",
"lat": "53.954891",
"lng": "73.536660"
}
]
我从json获取所有数据并显示它们,但是当位置改变时,如果不删除旧位置就无法显示新数据。还有一个当前位置,显示并删除旧位置。这是我的代码:
private static final String REQUEST_URL = "http://192.168.1.103:8080/";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
checkPermission();
buildGoogleApiClient();
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
LocationSearchTask locationSearchTask = new LocationSearchTask();
locationSearchTask.execute(REQUEST_URL);
}
@Override
public void onLocationChanged(Location location) {
Log.i(TAG, location.toString());
latitude = location.getLatitude();
longitude = location.getLongitude();
LatLng latLng = new LatLng(latitude, longitude);
if (currentMarker != null) {
currentMarker.remove();
}
displayLocation(latLng, 15f, location);
updateOtherLocations();
}
public void updateOtherLocations() {
LocationSearchTask locationSearchTask = new LocationSearchTask();
locationSearchTask.execute(REQUEST_URL);
}
class LocationSearchTask extends AsyncTask<String, Void, List<User>> {
@Override
protected List<User> doInBackground(String... urls) {
try {
if (urls.length < 1 || urls[0] == null) {
return null;
}
List<User> result = QueryData.fetchUsersData(urls[0]);
return result;
} catch (Exception e) {
Toast.makeText(MapsActivity.this, "Error: " + e.getMessage(), Toast.LENGTH_SHORT).show();
return null;
}
}
@Override
protected void onPostExecute(List<User> users) {
try {
for (User user : users) {
LatLng position = new LatLng(user.getLat(), user.getLng());
// add marker
otherMarkers = mMap.addMarker(new MarkerOptions()
.position(position)
.title(user.getFirstName())
.icon(bitmapDescriptorFromVector(getApplicationContext(), R.mipmap.ic_navigation))
.snippet(user.getEmail()));
}
} catch (Exception e) {
Toast.makeText(MapsActivity.this, "Sorry other locations are unavailable! Error: " + e.getMessage(), Toast.LENGTH_SHORT).show();
}
}
如何删除 ** otherLocations ** 并显示新位置? 我知道这是一个糟糕的代码,如果你能向我推荐还有什么值得改变的。提前谢谢你。
您可以使用 mMap.clear()
从地图上删除所有标记。
如果你想更新一个标记位置(在当前标记的情况下),然后按住之前添加的标记,然后像 marker.setPosition(new LatLng(50,5));
标记上有一个现有字段可以使它们可见或不可见 在标记文档中查看可见