<tfoot id='sCY3T'></tfoot>

      <small id='sCY3T'></small><noframes id='sCY3T'>

    1. <legend id='sCY3T'><style id='sCY3T'><dir id='sCY3T'><q id='sCY3T'></q></dir></style></legend>
        <i id='sCY3T'><tr id='sCY3T'><dt id='sCY3T'><q id='sCY3T'><span id='sCY3T'><b id='sCY3T'><form id='sCY3T'><ins id='sCY3T'></ins><ul id='sCY3T'></ul><sub id='sCY3T'></sub></form><legend id='sCY3T'></legend><bdo id='sCY3T'><pre id='sCY3T'><center id='sCY3T'></center></pre></bdo></b><th id='sCY3T'></th></span></q></dt></tr></i><div id='sCY3T'><tfoot id='sCY3T'></tfoot><dl id='sCY3T'><fieldset id='sCY3T'></fieldset></dl></div>

          <bdo id='sCY3T'></bdo><ul id='sCY3T'></ul>

      1. 如何在Android中根据与当前位置的距离对地理点进

        时间:2023-09-02
        <legend id='eMpH3'><style id='eMpH3'><dir id='eMpH3'><q id='eMpH3'></q></dir></style></legend>
          <tbody id='eMpH3'></tbody>
      2. <small id='eMpH3'></small><noframes id='eMpH3'>

          • <bdo id='eMpH3'></bdo><ul id='eMpH3'></ul>
                <i id='eMpH3'><tr id='eMpH3'><dt id='eMpH3'><q id='eMpH3'><span id='eMpH3'><b id='eMpH3'><form id='eMpH3'><ins id='eMpH3'></ins><ul id='eMpH3'></ul><sub id='eMpH3'></sub></form><legend id='eMpH3'></legend><bdo id='eMpH3'><pre id='eMpH3'><center id='eMpH3'></center></pre></bdo></b><th id='eMpH3'></th></span></q></dt></tr></i><div id='eMpH3'><tfoot id='eMpH3'></tfoot><dl id='eMpH3'><fieldset id='eMpH3'></fieldset></dl></div>

                1. <tfoot id='eMpH3'></tfoot>
                  本文介绍了如何在Android中根据与当前位置的距离对地理点进行排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  我有一个Place"对象,每个对象都有一个 LatLng 坐标:

                  I have a "Place" object with a LatLng coordinate for each:

                  import com.google.android.gms.maps.model.LatLng;
                  
                  public class Place{
                      public String name;
                      public LatLng latlng;
                  
                      public Restaurant(String name, LatLng latlng) {
                          this.name = name;
                          this.latlng = latlng;
                      }
                  }
                  

                  我有这些地方的 ArrayList,如下所示:

                  and I have an ArrayList of these Places, something like this:

                      ArrayList<Place> places = new ArrayList<Place>();
                      places.add("Place 1", LatLng(90.0,90.0));
                      places.add("Place 2", LatLng(93.0,93.0));
                      places.add("Place 3", LatLng(83.0,92.0));
                      places.add("Place 4", LatLng(93.0,91.0));
                  

                  我有我的"LatLng:

                  and I have "my" LatLng:

                      LatLng myLocation = new LatLng(10.0,10.0);
                  

                  如何根据离我最近的对象对这些对象进行排序?感谢您的帮助

                  How can I sort these objects according to closest to me? Thanks for the help

                  推荐答案

                  从 this answer 来自@shieldstroy 发布的问题,它使用 大圆距离,我得到了这个例子.

                  Taking the algorithm from this answer from the question posted by @shieldstroy, that uses the Great Circle Distance, I got this example working.

                  这里是比较器:

                  public class SortPlaces implements Comparator<Place> {
                      LatLng currentLoc;
                  
                      public SortPlaces(LatLng current){
                          currentLoc = current;
                      }
                      @Override
                      public int compare(final Place place1, final Place place2) {
                          double lat1 = place1.latlng.latitude;
                          double lon1 = place1.latlng.longitude;
                          double lat2 = place2.latlng.latitude;
                          double lon2 = place2.latlng.longitude;
                  
                          double distanceToPlace1 = distance(currentLoc.latitude, currentLoc.longitude, lat1, lon1);
                          double distanceToPlace2 = distance(currentLoc.latitude, currentLoc.longitude, lat2, lon2);
                          return (int) (distanceToPlace1 - distanceToPlace2);
                      }
                  
                      public double distance(double fromLat, double fromLon, double toLat, double toLon) {
                          double radius = 6378137;   // approximate Earth radius, *in meters*
                          double deltaLat = toLat - fromLat;
                          double deltaLon = toLon - fromLon;
                          double angle = 2 * Math.asin( Math.sqrt(
                                  Math.pow(Math.sin(deltaLat/2), 2) +
                                          Math.cos(fromLat) * Math.cos(toLat) *
                                                  Math.pow(Math.sin(deltaLon/2), 2) ) );
                          return radius * angle;
                      }
                  }
                  

                  这是高级代码,我只是把它放在onCreate()中:

                  Here is the high level code, I just put this in onCreate():

                          //My location, San Francisco
                          double lat = 37.77657;
                          double lng = -122.417506;
                          LatLng latLng = new LatLng(lat, lng);
                  
                          //set up list
                          ArrayList<Place> places = new ArrayList<Place>();
                  
                          places.add(new Place("New York", new LatLng(40.571256,73.98369)));
                          places.add(new Place("Colorado", new LatLng(39.260658,-105.101615)));
                          places.add(new Place("Los Angeles", new LatLng(33.986816,118.473819)));
                  
                          for (Place p: places){
                              Log.i("Places before sorting", "Place: " + p.name);
                          }
                  
                          //sort the list, give the Comparator the current location
                          Collections.sort(places, new SortPlaces(latLng));
                  
                          for (Place p: places){
                              Log.i("Places after sorting", "Place: " + p.name);
                          }
                  

                  这是日志输出:

                  04-17 23:04:16.074  12963-12963/com.maptest.daniel.maptest I/Places before sorting﹕ Place: New York
                  04-17 23:04:16.074  12963-12963/com.maptest.daniel.maptest I/Places before sorting﹕ Place: Colorado
                  04-17 23:04:16.074  12963-12963/com.maptest.daniel.maptest I/Places before sorting﹕ Place: Los Angeles
                  04-17 23:04:16.074  12963-12963/com.maptest.daniel.maptest I/Places after sorting﹕ Place: Los Angeles
                  04-17 23:04:16.074  12963-12963/com.maptest.daniel.maptest I/Places after sorting﹕ Place: Colorado
                  04-17 23:04:16.074  12963-12963/com.maptest.daniel.maptest I/Places after sorting﹕ Place: New York
                  

                  这篇关于如何在Android中根据与当前位置的距离对地理点进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:如何使用 Phonegap 跟踪设备位置(iOS 和 Android)设备 下一篇:watchPosition() 与 getCurrentPosition() 与 setTimeout

                  相关文章

                  最新文章

                      <bdo id='dNZTF'></bdo><ul id='dNZTF'></ul>
                    <i id='dNZTF'><tr id='dNZTF'><dt id='dNZTF'><q id='dNZTF'><span id='dNZTF'><b id='dNZTF'><form id='dNZTF'><ins id='dNZTF'></ins><ul id='dNZTF'></ul><sub id='dNZTF'></sub></form><legend id='dNZTF'></legend><bdo id='dNZTF'><pre id='dNZTF'><center id='dNZTF'></center></pre></bdo></b><th id='dNZTF'></th></span></q></dt></tr></i><div id='dNZTF'><tfoot id='dNZTF'></tfoot><dl id='dNZTF'><fieldset id='dNZTF'></fieldset></dl></div>
                  1. <tfoot id='dNZTF'></tfoot>

                    1. <legend id='dNZTF'><style id='dNZTF'><dir id='dNZTF'><q id='dNZTF'></q></dir></style></legend>

                      <small id='dNZTF'></small><noframes id='dNZTF'>