Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.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
Xamarin.forms Xamarin Forms Maps地理编码器不在UWP设备上工作_Xamarin.forms - Fatal编程技术网

Xamarin.forms Xamarin Forms Maps地理编码器不在UWP设备上工作

Xamarin.forms Xamarin Forms Maps地理编码器不在UWP设备上工作,xamarin.forms,Xamarin.forms,我的应用程序使用Xamarin.Forms.Maps来显示地图和地理编码。当用户从主页导航到地图时,地图将显示在单独的页面上。我使用地理编码器对当前位置进行反向地理编码,以便获得地址。这是从地图页面以外的其他地方完成的 当我在设备上运行应用程序时(即使在调试模式下),geocoder在iOS和Android中可以立即工作,但在UWP中不工作。在我导航到地图页面并显示地图之后,然后返回到另一个页面使用地理编码器,它开始工作 我看到一个关于地图不使用发布版本的线程,因此我添加了以下代码: var l

我的应用程序使用Xamarin.Forms.Maps来显示地图和地理编码。当用户从主页导航到地图时,地图将显示在单独的页面上。我使用地理编码器对当前位置进行反向地理编码,以便获得地址。这是从地图页面以外的其他地方完成的

当我在设备上运行应用程序时(即使在调试模式下),geocoder在iOS和Android中可以立即工作,但在UWP中不工作。在我导航到地图页面并显示地图之后,然后返回到另一个页面使用地理编码器,它开始工作

我看到一个关于地图不使用发布版本的线程,因此我添加了以下代码:

var laRendererAssemblies = new[] { typeof(Xamarin.Forms.Maps.UWP.MapRenderer).GetTypeInfo().Assembly };
Xamarin.Forms.Forms.Init(e, laRendererAssemblies);
//Xamarin.Forms.Forms.Init(e);
Xamarin.FormsMaps.Init("MyBingMapsKey");
这对Xamarin.Forms.Maps.Geocoder的问题没有帮助。我还尝试在主页中创建Xamarin.Forms.Maps.Map的实例,但这也没有帮助。有没有一种方法可以为地图组件加素数,以便地理编码器在设备上工作?(我的测试设备是ARM,但在本地计算机上运行时会发生这种情况 机器(也赢10)

以下是对Geocoder调用的一个片段(一旦用户导航到地图页面并返回,它就可以正常工作——在iOS和Android中也可以正常工作——因此,我认为代码没有问题,但这里就是):

公共静态异步任务地理编码(字符串地址)
{
尝试
{
var loGeocoder=new Xamarin.Forms.Maps.Geocoder();
系统、诊断、调试、写入线(“获取Lat/Lon”);
var lcolPositions=await loGeocoder.getpositionsforadressasync(地址);
如果(lcolPositions!=null)

在做了一些研究并确保geodecode类是静态的,不会干扰UWP构建中的异步/等待模式之后。我遇到了一些关于内置表单这个特殊问题的参考。Map geodecoder在其他地方,不仅仅是UWP,它也在android中得到了注意

我花了一些时间查看了应用商店中现有的一个跨平台应用程序,根据我们的内部文档,我们将xamarin.forms地图和geodecoder都换成了定制的

我们用于跨平台应用程序的插件是由james montemagno创建的“GelocatorPlugin”,可以找到

如果您愿意,它可以作为Nuget包添加到您的项目中,并且它的实现与默认的非常相似,因此几乎没有代码需要更改。主要的好处是geodecode插件的UWP元素已经修改,以考虑windows高级跟踪场景()


它应该比您使用的更稳定,一旦安装,您只需像这样使用它:

反向地理编码

根据传入的位置,该swill将获取 地址

UWP需要Bing地图密钥,您可以通过阅读此


‡类似问题的链接-

在APP.xaml.cs(UWP项目)中添加以下行后解决


是的,设置了定位功能。事实上,我在获取位置时没有遇到问题,是地理编码器不工作。唯一的其他代码是访问地理编码器。我认为init是所有需要的,但它不工作。正如我所说,一旦用户导航到地图页,它似乎开始工作,因此init中的某些内容正在运行没有设置使用地理编码器的东西。真的吗?没有必要居高临下和粗鲁。代码在app.cs中。我可以给你看什么代码?这是一个Xamarin Forms应用程序,在iOS和Android中都可以正常工作,只有UWP不起作用。“就像你说的”,我所需要的只是app.cs中的init。调用GetPositionsForAddressAsync不会返回错误,它只会返回任何内容。我在帖子中添加了一个片段。我删除了我以前的评论,以不减损你的评论,不过简单地反驳一下,我并不是想表现得粗鲁或屈尊。但是当人们建议你发布所有相关的代码,不管你觉得这些代码多么无关紧要,然后争论这一点会浪费那些试图帮助你的人的时间。当你遇到理论上不应该发生的问题时,每一个相关的代码都可以帮助调试这个问题。嗨,Digitalsa1nt,谢谢你坚持下去。我实际上使用的是James的geolocator插件获取当前位置。James在生产中没有他的带有GetAddress…功能的v4,因此我使用的是旧版本,并且依赖于xf maps to geocode。我现在看到James已经发布了v4,所以我应该看看它。文档中没有提到我也需要做的正向地理编码,但可能它就在那里。我有一个Bing地图是关键。我也可以在UWP上对Bing地图API进行REST调用,但我仍然认为Xamarin应该让他们的产品实现其设计目的。在这一点上,我百分之百支持你,如果你问我的话,forms解决方案的地图和测地仪功能远远落后。REST调用当然是一个选项,但它是可行的很高兴有一个像样的跨平台解决方案可以工作。我绝对认为将其更新到v4是一个好的开始。查看github提交的最新版本,UWP部分似乎做了大量的工作。
    public static async Task<Plugin.Geolocator.Abstractions.Position> Geocode(string address)
    {
        try
        {
            var loGeocoder = new Xamarin.Forms.Maps.Geocoder();
            System.Diagnostics.Debug.WriteLine("Get Lat/Lon");
            var lcolPositions = await loGeocoder.GetPositionsForAddressAsync(address);
            if (lcolPositions != null)
try
{ 
  var addresses = await locator.GetAddressesForPositionAsync (position, string mapKey = null);
  var address = addresses.FirstOrDefault();

  if(address == null)
    Console.WriteLine ("No address found for position.");
  else
    Console.WriteLine ("Addresss: {0} {1} {2}", address.Thoroughfare, address.Locality, address.Country);
}
catch(Exception ex)
{
  Debug.WriteLine("Unable to get address: " + ex);
}
Xamarin.FormsMaps.Init("bingmapkey");
Windows.Services.Maps.MapService.ServiceToken = "bingmapkey";