WP8: 在Bing map上圈出固定区域大小
2014-11-06 16:11
274 查看
先上要达到的效果图
![](https://img-blog.csdn.net/20141106160200333?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTG91aXRo/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
说明: 这个区域会跟随缩放级别自动变化,显示实际区域大小
扩展GeoCoordinate的方法
wp8 调用(测试通过)
void MainPageLoaded(object sender, RoutedEventArgs e)
{
var location = new GeoCoordinate(52.181427, 5.399780);
MyMap.Center = location;
MyMap.ZoomLevel = 16;
var fill = Colors.Purple;
var stroke = Colors.Red;
fill.A = 80;
stroke.A = 80;
var circle = new MapPolygon
{
StrokeThickness = 2,
FillColor = fill,
StrokeColor = stroke,
StrokeDashed = false,
};
foreach( var p in location.GetCirclePoints(150))
{
circle.Path.Add(p);
}
MyMap.MapElements.Add(circle);
}
这就可以显示方圆150米的区域
对windows store来说,用法稍有不同,首先获取当前地理左边引用dll不同
windows store 调用方法(未测试)
void MainPageLoaded(object sender, RoutedEventArgs e)
{
var location = new Location(52.181427, 5.399780);
MyMap.Center = location;
MyMap.ZoomLevel = 18;
var fill = Colors.Purple;
fill.A = 80;
var circle = new MapPolygon
{
FillColor = fill,
};
foreach (var p in location.GetCirclePoints(150))
{
circle.Locations.Add(p);
}
var layer = new MapShapeLayer();
layer.Shapes.Add(circle);
MyMap.ShapeLayers.Add(layer);
}
说明: 这个区域会跟随缩放级别自动变化,显示实际区域大小
扩展GeoCoordinate的方法
using System; using System.Collections.Generic; using System.Device.Location; namespace WpWinNl.Utilities { public static class GeoCoordinateExtensions { public static GeoCoordinate GetAtDistanceBearing(this GeoCoordinate point, double distance, double bearing) { const double degreesToRadian = Math.PI / 180.0; const double radianToDegrees = 180.0 / Math.PI; const double earthRadius = 6378137.0; var latA = point.Latitude * degreesToRadian; var lonA = point.Longitude * degreesToRadian; var angularDistance = distance / earthRadius; var trueCourse = bearing * degreesToRadian; var lat = Math.Asin( Math.Sin(latA) * Math.Cos(angularDistance) + Math.Cos(latA) * Math.Sin(angularDistance) * Math.Cos(trueCourse)); var dlon = Math.Atan2( Math.Sin(trueCourse) * Math.Sin(angularDistance) * Math.Cos(latA), Math.Cos(angularDistance) - Math.Sin(latA) * Math.Sin(lat)); var lon = ((lonA + dlon + Math.PI) % (Math.PI * 2)) - Math.PI; var result = new GeoCoordinate(lat * radianToDegrees, lon * radianToDegrees); return result; } public static IList<GeoCoordinate> GetCirclePoints(this GeoCoordinate center, double radius, int nrOfPoints = 50) { var angle = 360.0 / nrOfPoints; var locations = new List<GeoCoordinate>(); for (var i = 0; i <= nrOfPoints; i++) { locations.Add(center.GetAtDistanceBearing(radius, angle * i)); } return locations; } } }
wp8 调用(测试通过)
void MainPageLoaded(object sender, RoutedEventArgs e)
{
var location = new GeoCoordinate(52.181427, 5.399780);
MyMap.Center = location;
MyMap.ZoomLevel = 16;
var fill = Colors.Purple;
var stroke = Colors.Red;
fill.A = 80;
stroke.A = 80;
var circle = new MapPolygon
{
StrokeThickness = 2,
FillColor = fill,
StrokeColor = stroke,
StrokeDashed = false,
};
foreach( var p in location.GetCirclePoints(150))
{
circle.Path.Add(p);
}
MyMap.MapElements.Add(circle);
}
这就可以显示方圆150米的区域
对windows store来说,用法稍有不同,首先获取当前地理左边引用dll不同
using System; using System.Collections.Generic; #if WINDOWS_PHONE using GeoCoordinate = System.Device.Location.GeoCoordinate; #else using GeoCoordinate=Bing.Maps.Location; #endif
windows store 调用方法(未测试)
void MainPageLoaded(object sender, RoutedEventArgs e)
{
var location = new Location(52.181427, 5.399780);
MyMap.Center = location;
MyMap.ZoomLevel = 18;
var fill = Colors.Purple;
fill.A = 80;
var circle = new MapPolygon
{
FillColor = fill,
};
foreach (var p in location.GetCirclePoints(150))
{
circle.Locations.Add(p);
}
var layer = new MapShapeLayer();
layer.Shapes.Add(circle);
MyMap.ShapeLayers.Add(layer);
}
相关文章推荐
- 使用frame分割html页面的时候怎么得到大小固定的区域
- 移动端网页大小固定区域滚动/overflow:auto移动端不显示滚动条
- wxWidgets中不同大小的图片在一个固定大小区域预览,缩略图处理的用法和总结
- SWT固定窗口大小
- JavaScript获取浏览器的显示区域大小信息
- asp.net抓取图片、保存成字节、文件夹、按固定区域截图
- BCB Form 固定大小,不让拖大设置
- 怎样使可编辑的DIV固定大小,当内容多时,就自动出现滚动条
- ORACLE 10g RAC SGA自动管理模式下如何固定db buffer cache和shared pool的大小
- ExecutorService常用方法和newFixedThreadPool创建固定大小的线程池
- 固定大小的环形buf
- 分配固定大小对象的内存池
- Map中根据value值的大小进行排序
- 固定页面大小
- 网页html结构右侧栏固定,左侧自适应大小。
- 『delphi』窗体固定,不可以改变大小
- java实现把一个大文件切割成N个固定大小的文件
- ExecutorService常用方法和newFixedThreadPool创建固定大小的线程池
- Android 支持的描述大小区域的类型
- C语言中固定大小的数据类型的输入和输出