代码之家  ›  专栏  ›  技术社区  ›  KalleP

将“缩放级别”设置为仅查看Xamarin表单中的3个管脚

  •  0
  • KalleP  · 技术社区  · 6 年前

    由于地图上的图钉位于不同的位置,我无法为每个位置设置一个缩放级别。我总是希望在进入页面时显示3个最近的PIN。

    我已经尝试过这些解决方案,但我正在寻找解决这个问题的方法。

     LatLng marker1LatLng = new LatLng(marker1lat, marker1lng);
     Latlng marker2LatLng = new LatLng(marker2lat, marker2lng);
    
     LatLngBounds.Builder b = new LatLngBounds.Builder()
                                        .Include(marker1LatLng)
                                        .Include(marker2LatLng);
    

    也尝试过这个,但没有成功:

    var markers = [];//some array
    var bounds = new google.maps.LatLngBounds();
    for (var i = 0; i < markers.length; i++) {
     bounds.extend(markers[i].getPosition());
    }
    
    map.fitBounds(bounds);
    

    如何根据lat&动态设置缩放级别;我想看到的3个引脚的长度。

    我在地图上每个地方总共有10个图钉,但只想显示最近的3个。一旦我缩小,我希望能看到所有的10 tho。

    1 回复  |  直到 3 年前
        1
  •  2
  •   jgoldberger - MSFT    6 年前

    首先,您需要找到离所选位置最近的三个管脚,我假设您希望将其作为地图的中心。找到三个最近的管脚后,计算三个管脚中最远的管脚有多远,并使用

    map.MoveToRegion (MapSpan.FromCenterAndRadius (
                new Position (centerLatitude,centerLongitude), Distance.FromKilometers (distanceToThirdPin)));
    

    哪里 centerLatitude centerLongitude 将位于中心的选定位置的坐标,以及 distanceToThirdPin 是到3个销中最远销的计算距离(以Km为单位)。

    计算一对纬度和经度之间距离的公式:

    double R = 6371.0; // Earth's radius
    var dLat = (Math.PI / 180) * (pinLatitude - centerLatitude);
    var dLon = (Math.PI / 180) * (pinLongitude - centerLongitude);
    var lat1 = (Math.PI / 180) * centerLatitude;
    var lat2 = (Math.PI / 180) * pinLatitude;
    
    var a = Math.Sin(dLat/2) * Math.Sin(dLat/2) + Math.Sin(dLon/2) * Math.Sin(dLon/2) * Math.Cos(lat1) * Math.Cos(lat2);
    var c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1-a));
    var d = R * c; // distance in Km.
    

    因此,使用上面的公式计算到所有管脚的距离,然后找到三个最近的管脚。找到后,使用到第三个最近销的距离作为参考 与第三方的距离 map.MoveToRegion 方法