【问题标题】:Get nearest marker from current location (Android, Google maps)从当前位置获取最近的标记(Android、谷歌地图)
【发布时间】:2017-02-05 19:10:26
【问题描述】:

我检索了一个 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);

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

【问题讨论】:

    标签: android google-maps


    【解决方案1】:

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

    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 实例中。

    【讨论】:

    • 我是否将其放在 onPostExecute 方法中的 for 循环之后?我已经为此工作了大约一个小时,它仍然返回一个空值......
    • 在你的 for-each 东西之后,是的。你从哪里得到一个空值?
    • 好吧,问题不在于排序本身......结果我的位置列表中得到了空值。谢谢你的回答。如果你有兴趣,我的另一个问题是:link
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 2016-03-07
    • 1970-01-01
    相关资源
    最近更新 更多