首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MapsUI总是在LatLng 0,0处显示“自己的位置”标记。

MapsUI总是在LatLng 0,0处显示“自己的位置”标记。
EN

Stack Overflow用户
提问于 2020-12-14 12:31:45
回答 1查看 1K关注 0票数 0

我对MapsUI 2.0.3有一个问题,那就是我自己位置的标记总是在非洲西部的0,0。点击焦点在自己的位置按钮,显然也移动我那里。

我确实添加了粗略和精细的位置权限来显示,并获得了访问位置的权限,但是“您在这里”总是0,0。

然后,我下载了MapsUI存储库,并尝试了这些示例,这些示例显示了相同的行为,主要是。当地图加载时,它会显示0,0的位置。如果我稍微拖动地图,标记会慢慢移动到我正确的位置。如果我(在样本中)重新加载相同的样本或另一个样本,即使我拖动地图,标记仍然停留在0,0。总之,我可以通过与地图进行交互来“修复”0,0标记,但只能进行一次。

我的设备确实启用了gps定位,其他使用应用程序的位置也可以正常工作。这包括其他自制的Xamarin表单应用程序,所以这只是MapsUI的一个问题。

这两个示例和自己的代码都失败了,这让这有点令人困惑。这对任何人来说都是个好消息吗?至少说起来有点奇怪。

注意,这在设置位置的xamagin/android设备模拟器上也会失败。仅仅提到这是一个“有趣”的额外细节,地图长新闻事件将永远不会在我的设备上触发,但在模拟器上工作。很久以前,我看到另一个人在抱怨同样的问题,一位开发人员在2.0中评论它,而我在2.3中看到了它。总而言之,MapsUI似乎是一个非常丰富的系统,我很想使用,但它有奇怪的小错误和糟糕的支持。

用于添加映射视图的xaml

代码语言:javascript
复制
<StackLayout>
  <mapsui:MapView x:Name="mapView" IsMyLocationButtonVisible="True" />
</StackLayout>

和c#设置

代码语言:javascript
复制
void start()
{
  var status = await Permissions.RequestAsync<Permissions.LocationAlways>();
  if(status==PermissionStatus.Denied) return;  
  
var map = new Mapsui.Map
  {
    Transformation = new MinimalTransformation(),CRS = "EPSG:3857"};
    
    var tileSource = new HttpTileSource(new GlobalSphericalMercator(),
      "https://tile.thunderforest.com/landscape/{z}/{x}/{y}.png? 
      apikey=xxxxxxxxx",new[] { "a", "b", "c" }, name: "OpenStreetMap");
    
    var tileLayer = new TileLayer(tileSource) { Name = "Carto Light" };
    map.Layers.Add(tileLayer);
    mapView.Map = map;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-16 07:24:07

虽然不知道为什么MyLocationButton不工作,但有一个解决方案使当前位置显示在MapsUI中。

UpdateMyLocation中有一个MyLocationLayer方法,然后我们可以使用该方法以编程方式显示当前位置。

此外,您还可以使用地理定位获取当前位置。

守则如下:

代码语言:javascript
复制
protected override async void OnAppearing()
{
    base.OnAppearing();
  
    var location = await Geolocation.GetLastKnownLocationAsync();

    if (location != null)
    {
        Console.WriteLine($"Latitude: {location.Latitude}, Longitude: {location.Longitude}, Altitude: {location.Altitude}");
    }

    mapView.MyLocationLayer.UpdateMyLocation(new Position(location.Latitude, location.Longitude), true);
}

效果:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65289082

复制
相关文章

相似问题

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