首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >半径为1 1km的‘'Rounding’经度/经度坐标

半径为1 1km的‘'Rounding’经度/经度坐标
EN

Stack Overflow用户
提问于 2015-07-29 03:55:43
回答 1查看 926关注 0票数 2

我正在尝试弄清楚如何获取一组坐标(例如: 35.7410435,-78.721417)并将它们“舍入”,或将它们简化为一组坐标,即围绕给定点直径为1公里的一组坐标。

本质上,我试图做的是从用户的应用程序中获取地理位置数据,并发送回与他们的位置相对应的数据。但是,为了使缓存有效,我需要将接收到的坐标简化为特定的小数位数,这样相距1000英尺的人们将获得相同的数据,但当你走得足够远时(我认为1公里就足够了),我们将向他们发送“新”数据。

我不确定仅仅将接收到的坐标四舍五入到最接近的2个小数是准确的还是正确的。我想这是一个比这更复杂的事情。我已经找到了不同的答案来计算to点之间的距离,但没有找到任何方法来获得围绕某一点的1 1km的圆的坐标。

EN

回答 1

Stack Overflow用户

发布于 2015-09-11 17:21:11

代码语言:javascript
复制
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);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31685888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档