SqlGeography STIntersect всегда возвращает false

1

У меня проблема с этой функцией. Я пытаюсь обнаружить в Bing Maps AJAX, если точка находится внутри многоугольника. Поскольку у Bing-карт v7 API нет никакой функции, чтобы проверить это, я был вынужден создать собственный код. Теоретически все правильно, но всегда возвращает ложь. Есть идеи? Я что-то упустил? Вот мой код,

using System.Data.SqlTypes;
using Microsoft.SqlServer.Types;

...

[WebMethod]
public static bool PointIntersectPolygon(string PoiLat, string PoiLng, string[] PolyArr)
{
    SqlGeography Point;
    SqlGeography PolyGeo;
    string PolyStr = "", LatStr = "", LngStr = "";

    int Cnt=0;
    while(Cnt < PolyArr.Length) {
        LatStr = PolyArr[Cnt];
        LngStr = PolyArr[Cnt + 1];
        PolyStr = PolyStr + LngStr + " " + LatStr;

        Cnt=Cnt+2;
        if (Cnt < PolyArr.Length) { PolyStr = PolyStr + ", "; }
    }

    //Point = SqlGeography.STPointFromText(new SqlChars("point(" + PoiLng + " " + PoiLat + ")"), 4326);
    //PolyGeo = SqlGeography.STPolyFromText(new SqlChars("polygon((" + PolyStr + "))"), 4326);

    Point = SqlGeography.STPointFromText(new SqlChars("point(-95.2267532349 29.6912727356)"), 4326);
    PolyGeo = SqlGeography.STPolyFromText(new SqlChars("polygon((-95.8686820418 30.0354040414, -95.1099929810 30.1058311462, -95.0110397339 29.5988826752, -95.5437927246 29.5567703247, -95.8686820418 30.0354040414))"), 4326);
    MessageBox.Show(PolyGeo.STContains(Point).ToString());

    bool PolyPoi = (bool)PolyGeo.STContains(Point);
    return PolyPoi;
}

Я прокомментировал некоторые строки и поставил жестко закодированные значения, чтобы проверить, И у меня все тот же результат. Я уверен, что точка внутри полигона.

  • 0
    Знаете ли вы разницу между многоугольником по часовой стрелке и многоугольником против часовой стрелки?
  • 0
    @ErikPhilips, если вы проверите значения, точки в многоугольнике по часовой стрелке.
Показать ещё 6 комментариев
Теги:
sql-server
geospatial

1 ответ

1
Лучший ответ

Типы географии сервера Sql используют левый подход. То есть, когда вы создаете многоугольник, все, что находится слева, когда вы заключите многоугольник, является внутренностью многоугольника.

Вы можете прочитать больше: SqlGeography: Ориентация полигонов на кольца

Ещё вопросы

Сообщество Overcoder
Наверх
Меню