SQL Server и QGIS

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
SergeyM
Интересующийся
Сообщения: 40
Зарегистрирован: 15 июн 2010, 10:34
Репутация: 0

SQL Server и QGIS

Сообщение SergeyM » 14 мар 2012, 21:28

Не могу подружить SQL Server и QGIS.
Указываю connection sting

Код: Выделить всё

MSSQL:;server=notebook,1433;trusted_connection=yes;database=mydb;tables=streets(Geo);GEOM_TYPE=geography;SRID=4326
Слой добавляется, но остается пустым.
В SQL Profiler вижу запросы

Код: Выделить всё

select srid from geometry_columns where f_table_schema = 'dbo' and f_table_name = 'streets'
SELECT srtext FROM spatial_ref_sys WHERE srid = 4326
т.е. я так понимаю запрашиваются метаданные
погуглив я создал таблицу geometry_columns с такими данными

Код: Выделить всё

f_table_name	f_geometry_column	geometry_type	f_table_schema	srid
streets	Geo	native	dbo	4326
но, не помогло, видимо еще надо заполнить таблицу spatial_ref_sys, что там должно быть?

SergeyM
Интересующийся
Сообщения: 40
Зарегистрирован: 15 июн 2010, 10:34
Репутация: 0

Re: SQL Server и QGIS

Сообщение SergeyM » 14 мар 2012, 21:43

нашел, что заполнять в spatial_ref_sys
http://trac.osgeo.org/postgis/browser/t ... ef_sys.sql
все равно не помогло

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

Re: SQL Server и QGIS

Сообщение Voltron » 14 мар 2012, 21:51

А у вас что простая база, без пространственных расширений? Это служебные таблицы и они обычно создаются при инициализации базы.

Попробуйте залить в базу при помощи ogr2ogr какой-нибудь слой (строку подключения исправьте на свою)

Код: Выделить всё

ogr2ogr -overwrite -f MSSQLSpatial "MSSQL:server=.\MSSQLSERVER2008;database=geodb;trusted_connection=yes" "admin.shp"

SergeyM
Интересующийся
Сообщения: 40
Зарегистрирован: 15 июн 2010, 10:34
Репутация: 0

Re: SQL Server и QGIS

Сообщение SergeyM » 14 мар 2012, 22:07

Voltron писал(а):А у вас что простая база, без пространственных расширений? Это служебные таблицы и они обычно создаются при инициализации базы.
Нет, со столбцами типа geography
Voltron писал(а):Попробуйте залить в базу при помощи ogr2ogr какой-нибудь слой (строку подключения исправьте на свою)

Код: Выделить всё

ogr2ogr -overwrite -f MSSQLSpatial "MSSQL:server=.\MSSQLSERVER2008;database=geodb;trusted_connection=yes" "admin.shp"
ок, сейчас

SergeyM
Интересующийся
Сообщения: 40
Зарегистрирован: 15 июн 2010, 10:34
Репутация: 0

Re: SQL Server и QGIS

Сообщение SergeyM » 14 мар 2012, 22:16

SergeyM писал(а):ок, сейчас
да, так работает - т.е. похоже проблема в метаданных, сейчас попробую скопировать эти таблицы

SergeyM
Интересующийся
Сообщения: 40
Зарегистрирован: 15 июн 2010, 10:34
Репутация: 0

Re: SQL Server и QGIS

Сообщение SergeyM » 14 мар 2012, 22:36

Все равно пусто, заметил что в запросах к серверу перепутаны широта с долготой, т.е. в профайлере запрос

Код: Выделить всё

select [Geo], [ID], [Name], [StreetTypeName] from dbo.streets where [Geo].STIntersects(geography::STGeomFromText('POLYGON((x y, ...))',4326)) = 1
где POLYGON((x y, ...)) - не пересекается с моими данными, так как перепутан x и y

Т.к. QGIS соединяется c SQL Server через GDAL, то попробовал подключится напрямую в GDAL:

Код: Выделить всё

C:\>ogrinfo -al "MSSQL:server=localhost;database=mydb;tables=streets;trusted_connection=yes;GEOM_TYPE=geography;SRID=4326"
в ответ выдается

Код: Выделить всё

OGRFeature(streets):71
  ID (Integer) = 71018
  Name (String) = блабла
  StreetTypeName (String) = блабла
  LINESTRING (x y, ...)
где также перепутан x y, можно как-то это победить?

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

Re: SQL Server и QGIS

Сообщение Voltron » 14 мар 2012, 22:55

А какую СК показывает ogrinfo для вашего слоя? Если неизвестную — добавьте свои таблицы в таблицы geometry_columns и spatial_ref_sys

SergeyM
Интересующийся
Сообщения: 40
Зарегистрирован: 15 июн 2010, 10:34
Репутация: 0

Re: SQL Server и QGIS

Сообщение SergeyM » 14 мар 2012, 23:12

добавил по аналогии с залитым шейпфайлом
[geometry_columns]

Код: Выделить всё

f_table_catalog	f_table_schema	f_table_name	f_geometry_column	coord_dimension	srid	geometry_type
test	dbo	streets	geo	2	4326	GEOMETRY
[spatial_ref_sys]

Код: Выделить всё

srid	auth_name	auth_srid	srtext	proj4text
4326	EPSG	4326	GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]	+proj=longlat +datum=WGS84 +no_defs 

вот ogrinfo :
INFO: Open of `MSSQL:server=localhost;database=mydb;tables=streets;trusted_connection=yes'
using driver `MSSQLSpatial' successful.

Layer name: streets
Geometry: Unknown (any)
Feature Count: 975
Extent: (47.xxx, 32.xxx) - (48.xxx, 37.xxxx)
Layer SRS WKT:
GEOGCS["WGS 84",
DATUM["WGS_1984",
SPHEROID["WGS 84",6378137,298.257223563,
AUTHORITY["EPSG","7030"]],
AUTHORITY["EPSG","6326"]],
PRIMEM["Greenwich",0,
AUTHORITY["EPSG","8901"]],
UNIT["degree",0.0174532925199433,
AUTHORITY["EPSG","9122"]],
AUTHORITY["EPSG","4326"]]
Geometry Column = Geo
ID: Integer (10.0)
Name: String (255.0)
я так понимаю у меня выдает неправильный Extent - должно быть наоборот (это Мариуполь lat=47.130555565556 lon=37.563888898889)

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

Re: SQL Server и QGIS

Сообщение Voltron » 14 мар 2012, 23:20

А данные точно не были повернуты изначально?

SergeyM
Интересующийся
Сообщения: 40
Зарегистрирован: 15 июн 2010, 10:34
Репутация: 0

Re: SQL Server и QGIS

Сообщение SergeyM » 14 мар 2012, 23:23

Voltron писал(а):А данные точно не были повернуты изначально?
Сейчас тоже об этом подумал... В LINESTRING() что должно быть первым долгота или широта?

SergeyM
Интересующийся
Сообщения: 40
Зарегистрирован: 15 июн 2010, 10:34
Репутация: 0

Re: SQL Server и QGIS

Сообщение SergeyM » 14 мар 2012, 23:34

Судя по вики - LINESTRING (долгота широта, ...) - у меня правильно

yellow-sky
Гуру
Сообщения: 588
Зарегистрирован: 30 мар 2009, 21:53
Репутация: 55
Откуда: Королев

Re: SQL Server и QGIS

Сообщение yellow-sky » 15 мар 2012, 09:18

Есть один не маловажный момент с геометрическим типом в сиквеле.
Когда вы создавали свою таблицу и заливали в неё данные (не с помощью ogr), в давали каждой геометрии srid? Метаданные, созданные ogr, сиквел не использует. И если вы при записи не указывали каждой геометрии верный srid (тот srid, который будет использоваться для запросов) то будете получать пустые ответы. При запросе к геометрическому полю, сиквел сначала сверяет srid, и только после этого делает выборку.
Проверьте какой srid у ваших геометрий.

SergeyM
Интересующийся
Сообщения: 40
Зарегистрирован: 15 июн 2010, 10:34
Репутация: 0

Re: SQL Server и QGIS

Сообщение SergeyM » 15 мар 2012, 10:27

Проверил
SELECT DISTINCT s.Geo.STSrid
FROM streets s
Выдает 4326
Может быть ошибка из-за того что у меня смешанные типы (LINESTRING, MULTILINESTRING)?

yellow-sky
Гуру
Сообщения: 588
Зарегистрирован: 30 мар 2009, 21:53
Репутация: 55
Откуда: Королев

Re: SQL Server и QGIS

Сообщение yellow-sky » 15 мар 2012, 10:39

QGIS будет брать тип из метатаблицы.
А запросы на уровне sql нормально возвращают данные?

SergeyM
Интересующийся
Сообщения: 40
Зарегистрирован: 15 июн 2010, 10:34
Репутация: 0

Re: SQL Server и QGIS

Сообщение SergeyM » 15 мар 2012, 11:20

yellow-sky писал(а):QGIS будет брать тип из метатаблицы.
Если тип смешанный по идее надо ставить GEOMETRY? Судя по этому
yellow-sky писал(а):А запросы на уровне sql нормально возвращают данные?
Если выбрать Zoom To Layer Extent - данные не возвращаются из-за перепутанной долготы с широтой, если выбираю правильный Extent - то запросы данные возвращают, но в QGIS все равно не показываются

Ответить

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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость