Страница 1 из 1
MSSQL STDistance
Добавлено: 28 апр 2024, 18:57
gisstart
Всем, мирного неба!
Связка QGIS+MSSQL+Пространственные данные
В QGIS создал 2 слоя point - точки и poly - полигоны в EPSG4326, далее забросил их в БД
Задача: Получить SQL запросом расстояние в километрах от каждой точки до полигона.
В QGIS получается одно расстояние, а в запросе через STDistance другое, прошу подсказать как получить корректное расстояние?
Колонки с геометрией добавились в MSSQL как тип geometry, может их надо конвертировать в geography?
Re: MSSQL STDistance
Добавлено: 28 апр 2024, 19:34
gamm
подозреваю, что расстояние у вас в градусах. Чтобы считать на Земле, нужно 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
Re: MSSQL STDistance
Добавлено: 28 апр 2024, 19:43
gisstart
Может подскажите как из QGIS залить данные в MSSQL с типом geography т.к. он по умолчанию всю геометрию заливает с типом geometry - или так и должно быть, а при расчёте расстояния динамически конвертировать в geography?
Re: MSSQL STDistance
Добавлено: 28 апр 2024, 19:47
trir
либо писать свою функция, либо трансформировать в метровую СК
Re: MSSQL STDistance
Добавлено: 28 апр 2024, 20:06
gisstart
trir писал(а): ↑28 апр 2024, 19:47
либо писать свою функция, либо трансформировать в метровую СК
Искомого результат удалось достичь путем конвертации геометрии из geometry в geography, но текст запроса получается монстоидальным, да и зачем эти не нужные действия. Остался вопрос как изначально загрузить данные в базу с типом geography?
Re: MSSQL STDistance
Добавлено: 28 апр 2024, 20:12
trir
Ты ведь понимаешь что это не километры или метры?
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
Re: MSSQL STDistance
Добавлено: 28 апр 2024, 20:38
gisstart
Смотрю единицу измерения в SRID=4326 написано метры, но в результате запроса не понимаю что?
Re: MSSQL STDistance
Добавлено: 28 апр 2024, 20:47
trir
Не верь глазам своим, не знаю что они курят в Microsoft но единица измерения длины в 4326 всегда была градусы, во вторых там проекция не эквидистантная, в третьих - "STDistance() возвращает самое короткое значение LineString между двумя типами geography."
Re: MSSQL STDistance
Добавлено: 28 апр 2024, 20:48
trir
Возьми для сравнения Московскую СК и посчитай в ней
Re: MSSQL STDistance
Добавлено: 29 апр 2024, 12:24
gisstart
На карте при отображении надписи не верно пересчитывал метры в километры делил на 100, а не на 1000, запутал себя и людей, прошу прощения
На карте в начале поста, если отобразить расстояние в метрах, так и получается как в последнем SQL запросе!