android - 如何使用 JSON 数据在 Android 中的 Google Maps Activity 上找到最近的标记?

标签 android json maps

我正在使用此示例在 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 数组,因为您已经在 J​​SONArray 中拥有了数据。

只需遍历 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();
}

注意 如果您需要帮助获取 currentlatcurrentlong 的当前位置,请参见此处: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/

相关文章:

javascript - Google 可视化 map 选择事件未触发

android - 应用程序崩溃时退出

java - Android中的开/关音乐

android - 在 Android 中创建 sqlite 表时出错

php - 创建一个简单的 AJAX/jQuery/PHP SELECT */JSON

flutter - Android模拟器谷歌地图显示错误的位置

java - 使用 Retrofit 从 json 获取计时信息

json - 在 Excel 中使用 VBA 时 Firebase REST API 不解析 JSON

java - 如何在 Java 中只关注 JSON 文件中的某些类型的数据?

javascript - Openlayers 2 + HERE 切片缓存