首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenStreetMap不再使用OsmSharp和Mapsui

OpenStreetMap不再使用OsmSharp和Mapsui
EN

Stack Overflow用户
提问于 2020-02-05 13:00:16
回答 1查看 1.9K关注 0票数 1

我对Visual /Xamarin仍然相当陌生,但我有一个OpenStreetMap示例,运行于不久以前,它确实显示了地图,但它似乎不再显示地图了,尽管我已经有一段时间没有更改该示例的代码了。我不确定某些Visual /Xamarin或MacOS更新是否会导致它不再工作。

我在macOS Mojava10.14.6和以下软件包上使用社区8.4.4 (build 91):

6.2.0

  • Xamarin.Android.Support.Core.Utils 28.0.0.1

  • Xamarin.Android.Support.CustomTabs 28.0.0.1

  • Xamarin.Android.Support.Design 28.0.0.1

  • Xamarin.Essentials
  • Mapsui 1.4.8
  • OsmSharp 1.2.0

我的MainActivity.cs文件包含以下代码:

代码语言:javascript
复制
using System;
using Android.App;
using Android.OS;
using Android.Runtime;
using Android.Support.Design.Widget;
using Android.Support.V7.App;
using Android.Views;
using Android.Widget;
using Mapsui;
using Mapsui.Geometries;
using Mapsui.Projection;
using Mapsui.Styles;
using Mapsui.Utilities;
using Mapsui.UI.Android;
using Mapsui.Widgets.ScaleBar;
using Mapsui.Widgets.Zoom;
using Xamarin.Essentials;

namespace mvp_android
{
    [Activity(Label = "@string/app_name", Theme = "@style/AppTheme.NoActionBar", MainLauncher = true)]
    public class MainActivity : AppCompatActivity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            SetContentView(Resource.Layout.Main);

            var mapControl = FindViewById<MapControl>(Resource.Id.mapcontrol);
            var map = new Mapsui.Map();
            map.Layers.Add(OpenStreetMap.CreateTileLayer());
            map.Widgets.Add(
                new ZoomInOutWidget(map) {
                    HorizontalAlignment = Mapsui.Widgets.HorizontalAlignment.Left,
                    VerticalAlignment = Mapsui.Widgets.VerticalAlignment.Top,
                    Orientation = Mapsui.Widgets.Zoom.Orientation.Horizontal,
                }
            );
            var centerOfLondonOntario = new Point(-81.2497, 42.9837);
            map.NavigateTo(SphericalMercator.FromLonLat(centerOfLondonOntario.X, centerOfLondonOntario.Y));
            map.NavigateTo(map.Resolutions[9]);
            mapControl.Map = map;
        }

        public override bool OnCreateOptionsMenu(IMenu menu)
        {
            MenuInflater.Inflate(Resource.Menu.menu_main, menu);
            return true;
        }

        public override bool OnOptionsItemSelected(IMenuItem item)
        {
            int id = item.ItemId;
            if (id == Resource.Id.action_settings)
            {
                return true;
            }

            return base.OnOptionsItemSelected(item);
        }

        private void FabOnClick(object sender, EventArgs eventArgs)
        {
            View view = (View)sender;
            Snackbar.Make(view, "Replace with your own action", Snackbar.LengthLong)
                .SetAction("Action", (Android.Views.View.IOnClickListener)null).Show();
        }

        public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
        {
            Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);

            base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    }
}

我的Main.xml包含以下代码:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
  <Mapsui.UI.Android.MapControl
           android:id="@+id/mapcontrol"
           android:layout_width="match_parent"
           android:layout_height="match_parent" />
</LinearLayout>

最初,这个示例显示了OpenStreetMap的地图,该地图以伦敦安大略省的位置为中心,带有缩放按钮,但现在它只显示了地图应该在的白色位置,仍然显示了缩放/退出按钮,并显示了(c)OpenStreetMap水印。

我在这里错过了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-05 14:00:47

更新2021-03-23:自上周以来,"BruTile Tile Library“用户代理被OpenStreetMap阻塞。这是BruTile的KnownTileSource.Create的默认设置。此方法具有要传入自己的用户代理的参数。修复方法是提供一个特定于应用程序的字符串。

Mapsui1.4.8中使用的BruTile版本没有将用户代理作为其请求的一部分发送,因此openstreetmap服务器开始阻塞请求。

作为一种解决办法,您可以创建一个自定义ITileSource,如Matt:https://github.com/Mapsui/Mapsui/issues/668#issuecomment-497947690所描述的

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

https://stackoverflow.com/questions/60076403

复制
相关文章

相似问题

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