【问题标题】:UWP MapControl highlight countriesUWP MapControl 突出显示国家
【发布时间】:2018-03-19 23:04:10
【问题描述】:

我正在编写一个小应用程序,它将接收一个国家代码(2 个 ISO 字母)和一个州代码(也是 2 个字母 ISO 代码)。

我想突出显示(和颜色)这 2 条信息指定的区域(假设“CA,QC”,将突出显示加拿大的魁北克州)

我不需要其他任何东西(嗯,也许是 FadeIn、FadeOut 动画,但我稍后会弄清楚这个)

所有缩放/点击/单击/其他操作都被阻止。

MapControl 声明非常简单:

<maps:MapControl Grid.Row="1" x:Name="myMap" ZoomLevel="0"/>

提前致谢

编辑:经过大量研究,在以下答案的帮助下,我很惊讶 BASIC 操作不是 Microsoft 平台的一部分。这太疯狂了。所有后端都在不到 30 分钟内完成编码(包括身份验证、列出属性、检查访问级别、设置 SignalR 回调),但在视觉方面,我们没有来自 UWP 平台的任何东西。这很可悲。 /再见UWP,我试过了。多次。

编辑 2:通过一些调整使其工作:

 if (feature != null && (feature.Geometry.Type == GeoJSONObjectType.Polygon) || (feature.Geometry.Type == GeoJSONObjectType.MultiPolygon))
                {
                    myMap.MapElements.Clear();
                    MapPolygon polygon = null;
                    if (feature.Geometry.Type == GeoJSONObjectType.Polygon)
                    {
                        var polygonGeometry = feature.Geometry as Polygon;
                        polygon = new MapPolygon
                        {
                            Path = new Geopath(polygonGeometry.Coordinates[0].Coordinates.Select(coord => new BasicGeoposition() { Latitude = coord.Latitude, Longitude = coord.Longitude })),
                            FillColor = Colors.DarkRed
                        };
                        myMap.MapElements.Add(polygon);
                    }
                    else
                    {
                        var ploy = (feature.Geometry as MultiPolygon);
                        foreach (var item in ploy.Coordinates)
                        {
                            var polygon1 = new MapPolygon
                            {
                                Path = new Geopath(item.Coordinates[0].Coordinates.Select(coord => new BasicGeoposition() { Latitude = coord.Latitude, Longitude = coord.Longitude })),
                                FillColor = Colors.DarkRed
                            };
                            myMap.MapElements.Add(polygon1);
                        }
                    }


                }

【问题讨论】:

    标签: c# xaml uwp maps


    【解决方案1】:

    没有内置的方法可以实现这一点,因此您必须执行一些额外的步骤才能实现这一点。

    首先,您需要下载基于geojson 的数据集,其中包含所有国家/地区的多边形定义。可以找到一个轻量级和功能性的here on GitHub

    现在您需要将来自 NuGet 的 GeoJSON.NET 包安装到您的项目中,并将下载的 .geojson 文件包含在您的项目中,例如在 Assets 文件夹中。确保将其 Build action 设置为 Content

    现在您可以使用这样的代码通过创建 MapPolygon 并将其放置在地图上来突出显示一个国家/地区:

    private FeatureCollection _countryPolygons = null;
    
    private async void HighlightClick(string country)
    {
        if (_countryPolygons == null)
        {
            _countryPolygons = JsonConvert.DeserializeObject<FeatureCollection>(
                await FileIO.ReadTextAsync(
                    await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/countries.geojson",
                        UriKind.Absolute))));
        }
    
        var feature = _countryPolygons.Features.FirstOrDefault(f =>
            f.Id.Equals(country, StringComparison.CurrentCultureIgnoreCase));
    
        if (feature != null && feature.Geometry.Type == GeoJSONObjectType.Polygon)
        {
            var polygonGeometry = feature.Geometry as Polygon;
            MapPolygon polygon = new MapPolygon();
            polygon.Path = new Geopath(polygonGeometry.Coordinates[0].Coordinates.Select(coord => new BasicGeoposition() { Latitude = coord.Latitude, Longitude = coord.Longitude }));
            polygon.FillColor = Colors.DeepSkyBlue;
            Map.MapElements.Clear();
            Map.MapElements.Add(polygon);
        }
    }
    

    【讨论】:

    • 感谢您的回答。我会试试看。但是哇,我认为 2018 年在地图上突出显示一个国家是一项基本功能。显然不是。好吧,我会实现这个,我认为这将是我在 UWP 中的最后一个应用程序。
    • 很抱歉,我认为iOS或Android上都没有内置这样的API。
    • 没问题!在这一点上,我正在考虑使用谷歌分析的 WebView 的解决方案,并发送一个带有国家代码/状态的事件。 (编辑:和一些自定义 css 来隐藏除地图之外的所有内容)
    • 解决方案有效!您的文件名有一个小错字:它是 .geo.json 而不是 .geojson 但其他一切都有效。再次感谢您
    • 很高兴它有帮助:-)。编码愉快!
    猜你喜欢
    • 2017-08-02
    • 2013-04-19
    • 1970-01-01
    • 2017-06-14
    • 2019-09-11
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 2023-01-30
    相关资源
    最近更新 更多