Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Xamarin.Forms.Map中获取当前位置或移动到当前位置_C#_Xamarin_Maps_Xamarin.forms - Fatal编程技术网

C# 如何在Xamarin.Forms.Map中获取当前位置或移动到当前位置

C# 如何在Xamarin.Forms.Map中获取当前位置或移动到当前位置,c#,xamarin,maps,xamarin.forms,C#,Xamarin,Maps,Xamarin.forms,因为地图已经显示了用户的位置(使用IsShowingUser),所以我只想缩放到这个位置。这很容易做到吗?或者我需要在每个平台上获取位置,因为我没有找到任何地理定位对象。只有地理编码器。。。 这不是缩放到用户位置的常见用例吗?您需要使用感兴趣的位置调用MoveToRegion方法 您可以使用获取PCL项目中的位置: var locator = CrossGeolocator.Current; var position = await locator.GetPositionAsync(10000)

因为地图已经显示了用户的位置(使用IsShowingUser),所以我只想缩放到这个位置。这很容易做到吗?或者我需要在每个平台上获取位置,因为我没有找到任何地理定位对象。只有地理编码器。。。
这不是缩放到用户位置的常见用例吗?

您需要使用感兴趣的位置调用
MoveToRegion
方法

您可以使用获取PCL项目中的位置:

var locator = CrossGeolocator.Current;
var position = await locator.GetPositionAsync(10000);
map.MoveToRegion(MapSpan.FromCenterAndRadius(new Position(position.Latitude, position. Longitude), 
                                             Distance.FromMiles(1)));
更新:Xamarin表单现在默认情况下包括将地图居中放置在您所在位置: 在地图的当前位置缩放地图: 参考:

这不是缩放到用户位置的常见用例吗

是的。对于iOS,只需使用MKMapView
ShowUserLocation
属性

来自苹果纪录片:

将此属性设置为“是”会导致地图视图使用核心位置框架查找当前位置并尝试在地图上显示它

资料来源:

那么你怎么能在Xamarin做到呢? 您将需要一个扩展Xamarin FormsMapRenderer的自定义渲染器。获取本机映射并将ShowUserLocation属性设置为true

以下是一个例子:

private void MoveToCurrentPosition()
{
  var nativeMap = Control as MKMapView;
  if (nativeMap == null)
    return;

  nativeMap.ShowsUserLocation = true;
}
同时设置
nativeMap.SetUserTrackingMode(MKUserTrackingMode.Follow,true)
自动跟踪用户

这在地图初始化时可能不起作用,因为iOS还无法获取用户位置。因此,如果需要在地图出现时显示当前用户位置,只需为
MKUserLocationEventArgs
使用EventHandler,并使用
DidUpdateUserLocation
事件即可。您可以这样做:

private EventHandler<MKUserLocationEventArgs> _didUpdateUserLocationEventHandler;

// In OnElementChanged:
_didUpdateUserLocationEventHandler = (_, __) =>
{
    MoveToCurrentPosition();
    nativeMap.DidUpdateUserLocation -= _didUpdateUserLocationEventHandler;
};
nativeMap.DidUpdateUserLocation += _didUpdateUserLocationEventHandler;
private EventHandler\u didUpdateUserLocationEventHandler;
//在OneElementChanged中:
_didUpdateUserLocationEventHandler=(\uu,\uuu)=>
{
移动到当前位置();
nativeMap.DidUpdateUserLocation-=\u didUpdateUserLocationEventHandler;
};
nativeMap.DidUpdateUserLocation+=\u didUpdateUserLocationEventHandler;

不要忘记注销此事件。仅用于通常的初始化行为。用户可以随意在地图上滚动。

什么是
定位器
?这在报告中从未解释过article@Bassie它是var locator=crossgeoloator.Current;喜欢这个控件,我只是在看到/让蓝点出现在iphone上时遇到了一个问题。。。有什么想法吗?我不在乎,但客户希望蓝点显示用户在哪里。。。我可以很好地移动到某个区域,获取我的位置,将地图居中到我的位置,只是看不到任何蓝点,就像在地图中一样…@TimMaxey您应该在地图上立即将
IsShowingUser
设置为
true
,这样我们就可以使用Xamarin。Forms Essentials包含地理位置和其他功能
private void MoveToCurrentPosition()
{
  var nativeMap = Control as MKMapView;
  if (nativeMap == null)
    return;

  nativeMap.ShowsUserLocation = true;
}
private EventHandler<MKUserLocationEventArgs> _didUpdateUserLocationEventHandler;

// In OnElementChanged:
_didUpdateUserLocationEventHandler = (_, __) =>
{
    MoveToCurrentPosition();
    nativeMap.DidUpdateUserLocation -= _didUpdateUserLocationEventHandler;
};
nativeMap.DidUpdateUserLocation += _didUpdateUserLocationEventHandler;