我正在开发一款应用,第一次应用启动时,它会从我的服务器获取纬度和经度方面的所有位置,并根据标记在地图上显示它们。之后,我的应用程序开始通过推送机制接收坐标,我实施了Google Cloud Messaging GCM。那么现在我想要通过GCM接收我的应用程序的坐标,首先检查地图上是否已经存在相同纬度和经度的标记,如果是,则从地图中删除该标记。请指导我如何实现这一目标。
这是我第一次启动应用程序并通过服务从服务器获取坐标时的代码。
user = json.getJSONArray(TAG_GPS);
String Latitude, Longitude, Type;
LatLng latLngGps;
int a=user.length();
for(int i=0;i<a;i++){
JSONObject c=user.getJSONObject(i);
Latitude=c.getString(TAG_LAT);
Longitude=c.getString(TAG_LONG);
ID=c.getString(TAG_ID);
mGoogleMap .addMarker(new MarkerOptions().position(latLngGps).title("A").icon(BitmapDescriptorFactory.fromResource(R.drawable.red)));
}
这就是我通过GCM进行协调的方式
json = new JSONObject(message);
String lat = json.getString("lati");
String lon = json.getString("longi");
Double l1,l2;
l1 = Double.parseDouble(lat);
l2 = Double.parseDouble(lon);
LatLng newLatLong = new LatLng(l1, l2);
//Here i want to check where marker with same position already present on map or not if yes delete that maker otherwise plot a marker on map
LatLng newLatLong = new LatLng(l1, l2);
map.addMarker(new MarkerOptions().position(newLatLong)
.title("GCM"));
答案 0 :(得分:1)
您只需构建Set<LatLng>
并将初始标记位置存储在那里。然后,当您通过GCM收到新位置时,只需检查您的设置是否已包含newLatLong
。如果是,您可以将其删除,否则为地图创建标记,并将newLatLong
添加到您的设置中。
但是,根据您的数据来源,您可能最终会使用“几乎”相等但不完全相同的LatLng。如果这是一个问题,而不是简单地检查是否设置“包含”新的LatLng,你可能想要做一些更复杂的检查,看看新的LatLng是否“几乎等于”Set中的任何LatLng。
答案 1 :(得分:0)
尝试添加这样的标记,Marker m1;
m1 = map.addMarker(new MarkerOptions().position(newLatLong)
.title("GCM"));
然后检查它是否可见,
if(m1.isvisible())
{
//do something
}
通过标记获取位置,像这样使用
LatLng position = marker.getPosition();
//比较纬度和经度值,并在检查位置值
之前添加标记for(int i=0;i<arr_lat.size();i++)
{
if(arr_lat.get(i) == lat_value)
if(arr_lng.get(i) == lng_value)
//same values don't add the marker and remove marker.
else
//add the lat_value and lng_value positon in arraylist ,add the marker in map
}