Строю полигоны в 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;";
Так подошли к сути вопроса, как с этим бороться, не перестраивая полигоны(использовать отрицание нельзя, так как половина полигонов построилось по часовой стрелке, половина против)?(есть идея костыля типа проверки какой-нибудь крайней точки, и если входит, то инверсия ответа)
А если это, увы, невозможно после построения, то как же отследить при построении, что полигон строится именно против часовой стрелки?
Виртуальный выделенный сервер (VDS) становится отличным выбором
Не могу разобраться как использовать делегаты и события в проекте UnityУ меня есть класс Observer
Есть форма туда вводишь данные и должен создаваться билд программы с измененными данными
У меня есть клас в котором есть List обьектов другого класа в котором есть еще один List обьектов другого класаМне нужно сравнить найти обьект...