android - 计算距我当前位置的最短距离地点并使用android中的谷歌地图上的标记标记最短距离地点

标签 android google-maps google-maps-markers google-maps-android-api-2 latitude-longitude

我手里有服务器中几个地方的纬度和经度值。这些纬度和经度值从服务器发送并在 Android 手机上成功接收。现在我需要获取我的Android手机的当前位置并计算离我当前位置最近的位置并将其标记在谷歌地图上。我知道如何在谷歌地图上标记一个地方,但我不知道如何使用纬度和经度计算从我当前位置到其他位置的距离,并找到距我位置最短距离的地方。另外我不知道如何使用编码从 Android 设备获取我当前的位置。我听说可以通过两种方式找到位置,例如 1)使用最后已知的位置和 2)使用更改的位置。使用最后已知位置方法的当前位置不适合我的应用程序。所以我需要使用 onlocation 更改当前的纬度和经度。如果不可用,则从纬度和经度获取位置坐标。

这是我在应用程序中打开谷歌地图并使用纬度和经度标记地点的代码。

public class Map extends Activity {

private GoogleMap googleMap;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_map);
    try {
        // Loading map
        initilizeMap();

    } catch (Exception e) {
        e.printStackTrace();
    }
    double latitude =9.887262 ;
    double longitude = 76.731675;

    // create marker
    MarkerOptions marker = new MarkerOptions().position(new LatLng(latitude, longitude)).title("Hello Maps ");

    // adding marker
    googleMap.addMarker(marker);
    CameraPosition cameraPosition = new CameraPosition.Builder().target(
            new LatLng(latitude, longitude)).zoom(12).build();

googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));


}

private void initilizeMap() {
    if (googleMap == null) {
        googleMap = ((MapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap();

        // check if map is created successfully or not
        if (googleMap == null) {
            Toast.makeText(getApplicationContext(),
                    "Sorry! unable to create maps", Toast.LENGTH_SHORT)
                    .show();
        }
    }
}

@Override
protected void onResume() {
    super.onResume();
    initilizeMap();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.map, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}
}

这是它的布局文件..

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<fragment
    android:id="@+id/map"
    android:name="com.google.android.gms.maps.MapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>


</RelativeLayout>

最佳答案

使用以下方法计算距离

    private double distance(double lat1, double lon1, double lat2, double lon2) {
      double theta = lon1 - lon2;
      double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2)) + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.cos(deg2rad(theta));
      dist = Math.acos(dist);
      dist = rad2deg(dist);
      dist = dist * 60 * 1.1515;
       return (dist);
    }

   private double deg2rad(double deg) {
      return (deg * Math.PI / 180.0);
    }
   private double rad2deg(double rad) {
      return (rad * 180.0 / Math.PI);
    }

关于android - 计算距我当前位置的最短距离地点并使用android中的谷歌地图上的标记标记最短距离地点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25945330/

相关文章:

java - eclipse.ini 已更改,但 eclipse 不会在 Ubuntu 14.04 中更新

函数调用中的 javascript 作用域问题

javascript - 谷歌地图 : How to add HTML elements to specific coordinates?

java - 谷歌地图聚类不适用于少量坐标

java - 这是否可能只显示实时 Firebase 数据库的某些特定子值的 ListView

android - 全屏 TYPE_SYSTEM_ALERT [无状态和导航栏]

java - Eclipse Android SDK : Can't access layouts after adding 2nd activity

android - 具有与 Google map 相同分辨率的 map 的 MapView

javascript - 检索 JSON 会引发错误 : Unexpected token :

google-maps - 谷歌地图 - 带数字的自定义标记