为了账号安全,请及时绑定邮箱和手机立即绑定

在地图上显示圆圈会显示拉长的椭圆

在地图上显示圆圈会显示拉长的椭圆

C#
守着一只汪 2021-11-28 17:41:18
我需要在地图上的一个点周围显示一个圆圈。我正在使用 Windows 应用程序和 GMap.NET 控件。而不是一个圆圈,我得到这个:这是我用来获取多边形点的 sql:declare @lat float = 43.722385, @lng float = -79.415241, @radius int = 100;DECLARE @g geography;SET @g = geography::STGeomFromText('POINT(' + Str(@lat, 10, 7) + ' ' + Str(@lng, 10, 7) + ')', 4326);SELECT @g.STBuffer(@radius).STAsText() as circle, @g.STBuffer(@radius)我似乎得到了正确的结果:但是当显示在地图上时,我得到了一个椭圆,就像你在第一张图片上看到的那样。这是多边形边界的示例,如果我只是找到所有 lats 和 lngs 的最大值/最小值并将它们显示在 bing 地图中作为健全性检查并确认这不仅仅是 GMap.NET 问题:这是我用来使用多边形创建圆的代码: List<PointLatLng> points = new List<PointLatLng>(); string[] ps = radCirclePoints.Split(','); foreach (string p in ps) {     string[] coords = p.Trim().Split(' ');     points.Add(new PointLatLng(double.Parse(coords[0]), double.Parse(coords[1]))); } GMapPolygon polygon = new GMapPolygon(points, "circ"); polygon.Fill = new SolidBrush(Color.FromArgb(50, Color.Red)); polygon.Stroke = new Pen(Color.Red, 1); markersOverlay.Polygons.Add(polygon);这里发生了什么?使用 STBuffer 是一种寻找多边形边界以显示圆形的优雅方式,但它在某处失败了。有任何想法吗?
查看完整描述

1 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

当您创建 STGeomFromText 时,您将经纬度颠倒了。更改此顺序后,您还必须调整从缓冲区输出解析它们的顺序。通过让它们反转,该点被缓冲,就好像它在南极处/下方一样,这就是椭圆的原因。


DECLARE @g geography;

SET @g = geography::STPointFromText('POINT(' + Str(@lng, 10, 7) + ' ' + Str(@lat, 10, 7) + ')', 4326);


SELECT @g.STBuffer(@radius).STAsText() as circle, @g.STAsText() AS point, @g.STBuffer(@radius)

然后在c#中


List<PointLatLng> points = new List<PointLatLng>();

 string[] ps = radCirclePoints.Split(',');

 foreach (string p in ps) {

     string[] coords = p.Trim().Split(' ');

     points.Add(new PointLatLng(double.Parse(coords[1]), double.Parse(coords[0])));

 }


查看完整回答
反对 回复 2021-11-28
  • 1 回答
  • 0 关注
  • 342 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信