我正在写一个小应用程序,它将收到一个国家代码(2个ISO字母)和一个州代码(也是2个字母ISO代码)。
我想强调(和颜色)这两个信息指定的区域(所以我们说“CA,QC”,将突出加拿大魁北克省)
我不需要任何其他东西(好吧,也许是FadeIn,FadeOut动画,但我稍后会想到这个)
所有缩放/点按/点击/其他操作都被阻止。
MapControl声明非常简单:
<maps:MapControl Grid.Row="1" x:Name="myMap" ZoomLevel="0"/>
提前致谢
编辑:经过大量研究,从以下答案的帮助,我很惊讶BASIC行动不是微软平台的一部分。那太疯狂了。所有后端都在不到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);
}
}
}
答案 0 :(得分:1)
没有内置的方法可以实现这一点,因此您必须执行一些额外的步骤才能实现此目的。
首先,您需要下载基于geojson
的数据集,其中包含所有国家/地区的多边形定义。可以找到一个轻量级且功能齐全的here on GitHub。
现在您需要将NuGet中的GeoJSON.NET软件包安装到项目中,并将已下载的.geojson
文件包含在项目中,例如Assets
文件夹中。确保构建操作设置为内容。
现在,您可以使用此类代码通过创建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);
}
}