【问题标题】:Latitude out of bounds纬度超出范围
【发布时间】:2017-11-10 15:50:15
【问题描述】:

使用实体框架从谷歌地图的边界获取数据时出现以下异常:

FormatException: 24201:纬度值必须在 -90 到 90 度之间。

POLYGON((81.9882716924738 140.187434563007,21.5587046599696 140.187434563007,21.5587046599696 -40.1641279369925,81.9882716924738 -40.1641279369925,81.9882716924738 140.187434563007))

我可以看到其他人有同样的问题,但还没有找到任何解决这个问题的方法。我希望点的第一个坐标是纬度,第二个是经度?而且没有一个高于 90,那么为什么我会收到此错误?我尝试交换 lat 和 lng 但有同样的问题。

这是失败的路线:

var poly = FindByBoundingBox(northEastLat, northEastLng, southWestLat, southWestLng);
DbGeography polygon = DbGeography.FromText(poly, 4326); 

var parksWithinPolygon = dbCtx.SiteList.Where(p => 
    p.PolygonCenter.Intersects(polygon)).Select(p=>p.SiteName).ToList();

正如 Damien 所说的第一个问题是 Sql 服务器首先需要经度,然后是纬度。这会引发另一个错误,重定向到另一个问题:

“此操作无法完成,因为实例无效”。

我最好的选择是我构建多边形的方式/顺序。有没有人成功地将谷歌边界映射到 SQL 服务器中的多边形?简而言之,我试图在谷歌地图范围内获取任何数据(数据有一个点列)。

计算多边形的函数如下:

public string FindByBoundingBox(double northEastLat, double northEastLng, double southWestLat, double southWestLng)
{   //Create poylgon of bounding box 
    System.Globalization.CultureInfo customCulture = (System.Globalization.CultureInfo)System.Threading.Thread.CurrentThread.CurrentCulture.Clone();
    customCulture.NumberFormat.NumberDecimalSeparator = ".";

    System.Threading.Thread.CurrentThread.CurrentCulture = customCulture;
    var bboxWKT = string.Format("POLYGON(({1} {0},{1} {2},{3} {2},{3} {0},{1} {0}))", northEastLat, northEastLng, southWestLat, southWestLng);

    return bboxWKT;
}

【问题讨论】:

  • “我尝试交换 lat 和 lng 但有同样的问题” - 但这应该已经解决了。 SQL GEOGRAPHY WKT 表示使用long lat 而不是lat long
  • 我尝试这样做,但后来我得到:此操作无法完成,因为实例无效。使用 MakeValid 将实例转换为有效实例。请注意,MakeValid 可能会导致几何实例的点稍微移动。
  • 多边形((180 89.8489730732467,180 -80.2507546123243,-180 -80.2507546123243,-180 89.8489730732467,180 89.848973073247))
  • 所以,学会区分当你收到一个完全不同的消息时,这不是相同的问题。请edit您的问题包含此类信息。
  • 谢谢你的权利。我已经更新了问题。

标签: sql-server geography sqlgeography


【解决方案1】:

好的,我想通了。正如达米安所说,坐标顺序与谷歌相反。在 SQL 中 long 需要是第一个。接下来是什么是“左手法则”。您需要从左下角开始创建多边形,然后逆时针方向。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 2021-06-06
    • 2013-01-03
    • 2018-07-18
    • 1970-01-01
    相关资源
    最近更新 更多