代码之家  ›  专栏  ›  技术社区  ›  Damn Vegetables

谷歌地图,计算距离屏幕上指定经度一厘米的纬度?

  •  1
  • Damn Vegetables  · 技术社区  · 6 年前

    假设标记的经度为124.4567。如何计算距离屏幕左侧1厘米的经度?它将根据屏幕密度和缩放级别而变化。有没有内置的方法来计算经度?


    对不起,是“经度”。我总是被这两者弄糊涂。我已经编辑了这个问题。

    我不是在计算两个标记之间的地质距离。基本上,我想知道1厘米的经度是多少 在屏幕上 (不是1厘米的实际土地)的装置。我的意思是,如果我在手机上缩小屏幕,屏幕上的1厘米可能是30度的经度差,但如果你放大屏幕,屏幕上的1厘米可能是你手机上的1度经度。

    3 回复  |  直到 6 年前
        1
  •  0
  •   Nguyễn Gia Lá»    6 年前

    从这里可以计算出两个协调器之间的距离:

    Distance betwee n coordinator

    你有目的地长,源长,源纬度,距离只要找出目的地纬度。

    关于缩放级别,这里有谷歌地图的比例:

    Google map scale ratio

        2
  •  0
  •   shukshin.ivan    6 年前

    “往左边”是指西方方向。实际上,纬度在-90到90度之间变化,所以没有纬度124。

    如果你有任何观点 LatLng ,你可以通过简单的数学找到左边1米处的点。

    平行环的半径为 r = R * cos(latitude_in_radians) ,因此1米需要 360 / r 经度的。

    因此,您可以按如下方式计算您的点,而无需任何库。

    var EarthR = 6378137;
    var point = {lat: 45, lng: 124};
    var point2 = {lat: point.lat, lng: point.lng - 360 / ( EarthR * Math.cos(point.lat * Math.PI / 180))};
    console.log(point2);
        3
  •  0
  •   Damn Vegetables    6 年前

    经过大量的谷歌搜索,我找到了这个 How to access Google Maps API v3 marker's DIV and its pixel position? . The answer showed how to convert screen locations to lat/lng coordinates . 所以我对它做了一点修改,以获得左侧1厘米的位置,无论缩放级别如何。

    我在左侧放置了一个标记,以便在单击标记时进行可视化调试。这是代码。我希望它能对未来的人们有所帮助。

    var dpi = resources.displayMetrics.densityDpi;
    var pixelsInCm = (dpi/2.54).toInt();
    
    var existingPoint = mMap!!.projection.toScreenLocation(marker.position);
    var leftPoint = Point(existingPoint.x - pixelsInCm, existingPoint.y);
    var leftLatLng = mMap!!.projection.fromScreenLocation(leftPoint);
    
    //The code below is only for visual test. Not necessary.
    var leftMarker = MarkerOptions()
    leftMarker.position(leftLatLng);
    leftMarker.title("1cm to the left");
    mMap!!.addMarker(leftMarker);