Строю полигоны в c# и заполняю ими соответствующую табличку в sqlserver(где уже есть информация и айдишники полигонов), примерно вот так:
updateCommandRelations.CommandText = "UPDATE [Polygons] SET [Polygon] = geography::STGeomFromText('" + polygonString + "', 4326) WHERE IdPolygons = " + idPolygons;
updateCommandRelations.ExecuteNonQuery();
Всё вроде без ошибок проходит, но тут я решил проверить, как же они строятся, используя возможности SSMS, и вижу это: Почему же полигон охватывает весь земной шар? Такс, давайте разбираться, приближаем:
То есть, почти то, что я и хотел, только наоборот, выделенная область должна быть внутри, а не снаружи) Пришлось перерыть интернет, и оказалось, что действительно, есть разница как выстраивать точки в полигоне: по часовой стрелке(полигон - область вне): или против часовой(полигон - область внутри):
Но заметил это, когда отстроил около 500 тысяч полигонов(прошу заметить примерно 48 часов работы приложения), когда встал вопрос: "входит ли точка в полигон?" (проверял только в самом программе замкнутость полигонов и порядок выстраивания точек, но не мог и догадываться, что направление имеет значение).
Использовал функцию STContains и ,естественно, полигонов в ответе было больше, чем мне нужно.
selectCommand.CommandText = "DECLARE @g geography;
SET @g=geography::STGeomFromText('POINT(" + lng.Replace(",", ".") + " " + lat.Replace(",", ".") + ")', 4326);
SELECT Info FROM [Polygons] WHERE ([Polygon].MakeValid()).STContains(@g) = 1;";
Так подошли к сути вопроса, как с этим бороться, не перестраивая полигоны(использовать отрицание нельзя, так как половина полигонов построилось по часовой стрелке, половина против)?(есть идея костыля типа проверки какой-нибудь крайней точки, и если входит, то инверсия ответа)
А если это, увы, невозможно после построения, то как же отследить при построении, что полигон строится именно против часовой стрелки?
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости