#c# #sql-server #geospatial
#c# #sql-сервер #геопространственный
Вопрос:
У меня проблема с этой функцией. Я пытаюсь определить в Bing Maps AJAX, находится ли точка внутри многоугольника. Поскольку в API Bing maps v7 нет никакой функции для проверки этого, я был вынужден создать свой собственный код. Теоретически все правильно, но всегда возвращает false . Есть идеи? Я что-то упускаю? Вот мой код,
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;
}
Я закомментировал некоторые строки и ввел жестко закодированные значения для проверки, и у меня все тот же результат. Я почти уверен, что точка внутри многоугольника.
Комментарии:
1. Знаете ли вы о разнице между многоугольником по часовой стрелке и многоугольником против часовой стрелки?
2. @ErikPhilips если вы проверяете значения, точки в многоугольнике расположены по часовой стрелке.
3. Тогда все наоборот . Включительно против часовой стрелки.
4. @ErikPhilips Спасибо за информацию и за отрицательный отзыв. Я ценю тот факт, что вы предоставили мне информацию, но я думаю, что это касается обучения начинающих пользователей (таких как я), а не наказания, если пользователь не найдет информацию простым способом. Я не разработчик C #, и я целую неделю пытаюсь найти информацию о C # и Bing Maps. И, как вы уже можете знать, информация в API карт Bing более ограничена по сравнению с Google.
5. Интересно, я не голосовал против вас. в 99% случаев я не помогаю с вопросом с отрицательным ответом, потому что, по моему собственному мнению, это не очень хорошие вопросы.
Ответ №1:
Типы географии Sql Server используют левый подход. То есть, когда вы создаете полигон, все, что находится слева, когда вы заключаете полигон, находится внутри полигона.
Вы можете прочитать больше: SqlGeography: кольцевая ориентация полигонов