MSSQL STDistance

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Ответить
Аватара пользователя
gisstart
Интересующийся
Сообщения: 24
Зарегистрирован: 12 фев 2021, 12:29
Репутация: 1
Откуда: Moscow

MSSQL STDistance

Сообщение gisstart » 28 апр 2024, 18:57

Всем, мирного неба!
Связка QGIS+MSSQL+Пространственные данные
В QGIS создал 2 слоя point - точки и poly - полигоны в EPSG4326, далее забросил их в БД
Задача: Получить SQL запросом расстояние в километрах от каждой точки до полигона.
В QGIS получается одно расстояние, а в запросе через STDistance другое, прошу подсказать как получить корректное расстояние?
Колонки с геометрией добавились в MSSQL как тип geometry, может их надо конвертировать в geography?
Вложения
sql.jpg
SQL запрос и дистанция от точки до полигона
sql.jpg (75.27 КБ) 574 просмотра
map.jpg
Расстояние на карте в QGIS
map.jpg (587.08 КБ) 574 просмотра

gamm
Гуру
Сообщения: 4064
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1061
Ваше звание: программист
Откуда: Казань

Re: MSSQL STDistance

Сообщение gamm » 28 апр 2024, 19:34

подозреваю, что расстояние у вас в градусах. Чтобы считать на Земле, нужно geography
Из мануала
SQL Server supports two spatial data types: the geometry data type and the geography data type. The geometry type represents data in a Euclidean (flat) coordinate system. The geography type represents data in a round-earth coordinate system

Аватара пользователя
gisstart
Интересующийся
Сообщения: 24
Зарегистрирован: 12 фев 2021, 12:29
Репутация: 1
Откуда: Moscow

Re: MSSQL STDistance

Сообщение gisstart » 28 апр 2024, 19:43

Может подскажите как из QGIS залить данные в MSSQL с типом geography т.к. он по умолчанию всю геометрию заливает с типом geometry - или так и должно быть, а при расчёте расстояния динамически конвертировать в geography?

trir
Гуру
Сообщения: 5298
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1015
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: MSSQL STDistance

Сообщение trir » 28 апр 2024, 19:47

либо писать свою функция, либо трансформировать в метровую СК

Аватара пользователя
gisstart
Интересующийся
Сообщения: 24
Зарегистрирован: 12 фев 2021, 12:29
Репутация: 1
Откуда: Moscow

Re: MSSQL STDistance

Сообщение gisstart » 28 апр 2024, 20:06

trir писал(а):
28 апр 2024, 19:47
либо писать свою функция, либо трансформировать в метровую СК
Искомого результат удалось достичь путем конвертации геометрии из geometry в geography, но текст запроса получается монстоидальным, да и зачем эти не нужные действия. Остался вопрос как изначально загрузить данные в базу с типом geography?
Вложения
sql2.jpg
sql2.jpg (126.89 КБ) 554 просмотра

trir
Гуру
Сообщения: 5298
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1015
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: MSSQL STDistance

Сообщение trir » 28 апр 2024, 20:12

Ты ведь понимаешь что это не километры или метры?
The result is expressed in the unit of measure defined by the Spatial Reference Identifier (SRID) of spatial data.
https://learn.microsoft.com/en-us/sql/t ... rver-ver16

Аватара пользователя
gisstart
Интересующийся
Сообщения: 24
Зарегистрирован: 12 фев 2021, 12:29
Репутация: 1
Откуда: Moscow

Re: MSSQL STDistance

Сообщение gisstart » 28 апр 2024, 20:38

trir писал(а):
28 апр 2024, 20:12
Ты ведь понимаешь что это не километры или метры?
The result is expressed in the unit of measure defined by the Spatial Reference Identifier (SRID) of spatial data.
https://learn.microsoft.com/en-us/sql/t ... rver-ver16
Смотрю единицу измерения в SRID=4326 написано метры, но в результате запроса не понимаю что?
Вложения
sql3.jpg
sql3.jpg (207.03 КБ) 535 просмотров

trir
Гуру
Сообщения: 5298
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1015
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: MSSQL STDistance

Сообщение trir » 28 апр 2024, 20:47

Не верь глазам своим, не знаю что они курят в Microsoft но единица измерения длины в 4326 всегда была градусы, во вторых там проекция не эквидистантная, в третьих - "STDistance() возвращает самое короткое значение LineString между двумя типами geography."

trir
Гуру
Сообщения: 5298
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1015
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: MSSQL STDistance

Сообщение trir » 28 апр 2024, 20:48

Возьми для сравнения Московскую СК и посчитай в ней

Аватара пользователя
gisstart
Интересующийся
Сообщения: 24
Зарегистрирован: 12 фев 2021, 12:29
Репутация: 1
Откуда: Moscow

Re: MSSQL STDistance

Сообщение gisstart » 29 апр 2024, 12:24

На карте при отображении надписи не верно пересчитывал метры в километры делил на 100, а не на 1000, запутал себя и людей, прошу прощения :oops:
На карте в начале поста, если отобразить расстояние в метрах, так и получается как в последнем SQL запросе!

Ответить

Вернуться в «QGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: Amazon [Bot] и 4 гостя