我试图找出如何采取一组坐标(例如:35.7410435,-78.721417)和' round'它们或简化它们到一组坐标,这是一组围绕给定点直径为1km的坐标。
基本上,我尝试做的是从用户那里获取地理定位数据'在应用程序中并发回与其位置相对应的数据。但是为了使缓存有效,我需要将接收到的坐标简化为特定数量的小数位,这样彼此相距1000英尺的人将获得相同的数据,但是当你离得足够远时(我认为1km足够了) ),我们会发送新的'数据
我不确定将收到的坐标四舍五入到最接近的2位小数是准确的还是正确的。我认为它比这更重要。我已经找到了不同的答案来计算点到点之间的距离,但是找不到围绕某个点1公里的圆的坐标。
答案 0 :(得分:0)
public LatLng onePointFromCircle(LatLng centre, double radius) {
Log.d(TAG + "one point", radius + "");
ArrayList<LatLng> points = new ArrayList<LatLng>();
double EARTH_RADIUS = 6378100.0;
// Convert to radians.
double lat = centre.latitude * Math.PI / 180.0;
double lon = centre.longitude * Math.PI / 180.0;
for (double t = 0; t <= Math.PI * 2; t += 0.3) {
// y
double latPoint = lat + (radius / EARTH_RADIUS) * Math.sin(t)/ Math.cos(lat);
// x
double lonPoint = lon + (radius / EARTH_RADIUS) * Math.cos(t)/ Math.cos(lat);
// d=acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon1-lon2))
Log.d("latpoint",latPoint+"");
Log.d("lonPoint",lonPoint+"");
// saving the location on circle as a LatLng point
LatLng point = new LatLng(latPoint * 180.0 / Math.PI, lonPoint
* 180.0 / Math.PI);
// here mMap is my GoogleMap object
// mMap.addMarker(new MarkerOptions().position(point));
// now here note that same point(lat/lng) is used for marker as well
// as saved in the ArrayList
points.add(point);
}
return points.get(1);
}