从当前位置获取最近的标记(Android,Google地图)

时间:2017-02-05 10:58:32

标签: android google-maps

我检索到一个JSON数组,其中包含不同的商店分支经度和纬度。我把它放在一个列表中:

        @Override
        protected void onPostExecute(Object o) {
            super.onPostExecute(o);
            try {
                Intent mapsIntent = getIntent();
                String jSonArray = mapsIntent.getStringExtra("jsonArray");
                jsonArray = new JSONArray(jSonArray);

                for(int i = 0; i < jsonArray.length(); i++) {
                    Markers branch = new Markers();
                    branch.latitude = Float.parseFloat(jsonArray.getJSONObject(i).getString("latitude"));
                    branch.longitude = Float.parseFloat(jsonArray.getJSONObject(i).getString("longitude"));

                    marker.add(branch);
                }

            } catch (Exception ex) {
                Log.d("Error", ex.toString());
            }
        }

这是我的Markers课程:

 private class Markers {
    public float latitude;
    public float longitude;
}

现在,我可以使用Google maps api v2

检索当前的位置坐标
    LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
    MarkerOptions markerOptions = new MarkerOptions();
    markerOptions.position(latLng);
    markerOptions.title("Current Location");
    markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA));
    mCurrLocationMarker = mMap.addMarker(markerOptions);

现在我想知道,我有我的商店分店位置列表和我当前的位置,那么如何从当前位置获取最近的商店分支并在其上放置标记?我不明白我见过的一些实现,如果有人教我如何实现这一点,那将会有很大的帮助。干杯!

1 个答案:

答案 0 :(得分:2)

一种方法是对标记进行排序并使用排序数组中的第一个元素:

Collections.sort(marker, new Comparator<Markers>() {

    @Override
    public int compare(Markers a, Markers b) {
         Location locationA = new Location("point A");     
         locationA.setLatitude(a.latitude); 
         locationA.setLongitude(a.longitude);
         Location locationB = new Location("point B");
         locationB.setLatitude(b.latitude); 
         locationB.setLongitude(b.longitude);
         float distanceOne = location.distanceTo(locationA);
         float distanceTwo = location.distanceTo(locationB);   
         return Float.compare(distanceOne, distanceTwo);
     }
}

然后,您根据与当前位置的距离对标记进行了排序。 之后,使用marker-Array中的第一个元素并将其添加到mMap实例。