MSSQL STDistance
- gisstart
- Интересующийся
- Сообщения: 24
- Зарегистрирован: 12 фев 2021, 12:29
- Репутация: 1
- Откуда: Moscow
MSSQL STDistance
Всем, мирного неба!
Связка QGIS+MSSQL+Пространственные данные
В QGIS создал 2 слоя point - точки и poly - полигоны в EPSG4326, далее забросил их в БД
Задача: Получить SQL запросом расстояние в километрах от каждой точки до полигона.
В QGIS получается одно расстояние, а в запросе через STDistance другое, прошу подсказать как получить корректное расстояние?
Колонки с геометрией добавились в MSSQL как тип geometry, может их надо конвертировать в geography?
Связка QGIS+MSSQL+Пространственные данные
В QGIS создал 2 слоя point - точки и poly - полигоны в EPSG4326, далее забросил их в БД
Задача: Получить SQL запросом расстояние в километрах от каждой точки до полигона.
В QGIS получается одно расстояние, а в запросе через STDistance другое, прошу подсказать как получить корректное расстояние?
Колонки с геометрией добавились в MSSQL как тип geometry, может их надо конвертировать в geography?
- Вложения
-
- SQL запрос и дистанция от точки до полигона
- sql.jpg (75.27 КБ) 569 просмотров
-
- Расстояние на карте в QGIS
- map.jpg (587.08 КБ) 569 просмотров
-
- Гуру
- Сообщения: 4064
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1061
- Ваше звание: программист
- Откуда: Казань
Re: MSSQL STDistance
подозреваю, что расстояние у вас в градусах. Чтобы считать на Земле, нужно 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
Может подскажите как из QGIS залить данные в MSSQL с типом geography т.к. он по умолчанию всю геометрию заливает с типом geometry - или так и должно быть, а при расчёте расстояния динамически конвертировать в geography?
-
- Гуру
- Сообщения: 5298
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: MSSQL STDistance
либо писать свою функция, либо трансформировать в метровую СК
- gisstart
- Интересующийся
- Сообщения: 24
- Зарегистрирован: 12 фев 2021, 12:29
- Репутация: 1
- Откуда: Moscow
Re: MSSQL STDistance
Искомого результат удалось достичь путем конвертации геометрии из geometry в geography, но текст запроса получается монстоидальным, да и зачем эти не нужные действия. Остался вопрос как изначально загрузить данные в базу с типом geography?
- Вложения
-
- sql2.jpg (126.89 КБ) 549 просмотров
-
- Гуру
- Сообщения: 5298
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: MSSQL STDistance
Ты ведь понимаешь что это не километры или метры?
https://learn.microsoft.com/en-us/sql/t ... rver-ver16The result is expressed in the unit of measure defined by the Spatial Reference Identifier (SRID) of spatial data.
- gisstart
- Интересующийся
- Сообщения: 24
- Зарегистрирован: 12 фев 2021, 12:29
- Репутация: 1
- Откуда: Moscow
Re: MSSQL STDistance
Смотрю единицу измерения в SRID=4326 написано метры, но в результате запроса не понимаю что?trir писал(а): ↑28 апр 2024, 20:12Ты ведь понимаешь что это не километры или метры?
https://learn.microsoft.com/en-us/sql/t ... rver-ver16The result is expressed in the unit of measure defined by the Spatial Reference Identifier (SRID) of spatial data.
- Вложения
-
- sql3.jpg (207.03 КБ) 530 просмотров
-
- Гуру
- Сообщения: 5298
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: MSSQL STDistance
Не верь глазам своим, не знаю что они курят в Microsoft но единица измерения длины в 4326 всегда была градусы, во вторых там проекция не эквидистантная, в третьих - "STDistance() возвращает самое короткое значение LineString между двумя типами geography."
-
- Гуру
- Сообщения: 5298
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: MSSQL STDistance
Возьми для сравнения Московскую СК и посчитай в ней
- gisstart
- Интересующийся
- Сообщения: 24
- Зарегистрирован: 12 фев 2021, 12:29
- Репутация: 1
- Откуда: Moscow
Re: MSSQL STDistance
На карте при отображении надписи не верно пересчитывал метры в километры делил на 100, а не на 1000, запутал себя и людей, прошу прощения
На карте в начале поста, если отобразить расстояние в метрах, так и получается как в последнем SQL запросе!
На карте в начале поста, если отобразить расстояние в метрах, так и получается как в последнем SQL запросе!
Кто сейчас на конференции
Сейчас этот форум просматривают: Bing [Bot] и 1 гость