我正在使用此示例在 Google map Activity 中显示标记。 示例:https://gist.github.com/TimPim/5902100
void createMarkersFromJson(String json) throws JSONException {
// De-serialize the JSON string into an array of city objects
JSONArray jsonArray = new JSONArray(json);
for (int i = 0; i < jsonArray.length(); i++) {
// Create a marker for each city in the JSON data.
JSONObject jsonObj = jsonArray.getJSONObject(i);
map.addMarker(new MarkerOptions()
.title(jsonObj.getString("name"))
.snippet(Integer.toString(jsonObj.getInt("population")))
.position(new LatLng(
jsonObj.getJSONArray("latlng").getDouble(0),
jsonObj.getJSONArray("latlng").getDouble(1)
))
);
}
}
我想在下面重用这段代码来检查最近的标记以获取 JSON 信息以找到最近的标记。 以下代码来自 Display title of closest marker from my current position Google Maps v2
List<MyMarkerObj> m = data.getMyMarkers();
float mindist;
int pos=0;
for (int i = 0; i < m.size(); i++) {
String[] slatlng = m.get(i).getPosition().split(" ");
LatLng lat = new LatLng(Double.valueOf(slatlng[0]), Double.valueOf(slatlng[1]));
map.addMarker(new MarkerOptions()
.title(m.get(i).getTitle())
.snippet(m.get(i).getSnippet())
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
.position(lat)
);
float[] distance = new float[1];
Location.distanceBetween(currentlat, currentlong,Double.valueOf(slatlng[0]), Double.valueOf(slatlng[1]), distance);
if(i==0) mindist=distance[0];
else if(mindist>distance[0]) {
mindist=distance[0];
pos=i;
}
}
Toast.makeText(getActivity(), "Closest Marker Distance: "+ m.get(pos).getTitle() +" "+mindist, Toast.LENGTH_LONG).show();
最佳答案
您的案例不需要 m
数组,因为您已经在 JSONArray 中拥有了数据。
只需遍历 JSONArray,跟踪当前最近的标记,循环完成后,您将获得最近标记的引用。
将您的代码与其他答案的相关部分结合起来:
Marker mClosestMarker;
float mindist;
void createMarkersFromJson(String json) throws JSONException {
// De-serialize the JSON string into an array of city objects
JSONArray jsonArray = new JSONArray(json);
for (int i = 0; i < jsonArray.length(); i++) {
// Create a marker for each city in the JSON data.
JSONObject jsonObj = jsonArray.getJSONObject(i);
double lat = jsonObj.getJSONArray("latlng").getDouble(0);
double lon = jsonObj.getJSONArray("latlng").getDouble(1);
Marker currentMarker = map.addMarker(new MarkerOptions()
.title(jsonObj.getString("name"))
.snippet(Integer.toString(jsonObj.getInt("population")))
.position(new LatLng(
lat,
lon
))
);
float[] distance = new float[1];
Location.distanceBetween(currentlat, currentlong, lat, lon, distance);
if(i==0) {
mindist = distance[0];
} else if (mindist > distance[0]) {
mindist=distance[0];
mClosestMarker = currentMarker;
}
}
Toast.makeText(MainActivity.this, "Closest Marker Distance: "+ mClosestMarker.getTitle() + " " + mindist, Toast.LENGTH_LONG).show();
}
注意
如果您需要帮助获取 currentlat
和 currentlong
的当前位置,请参见此处:How can I show current location on a Google Map on Android Marshmallow?
如果您按照那里的答案获取当前位置,并且您已经放置了“当前位置”标记,您可以简单地执行以下操作:
LatLng currentLatLng = mCurrLocationMarker.getPosition();
Location.distanceBetween(currentLatLng.latitude, currentLatLng.longitude, lat, lon, distance);
关于android - 如何使用 JSON 数据在 Android 中的 Google Maps Activity 上找到最近的标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45066201/