Страница 1 из 3
SQL Server и QGIS
Добавлено: 14 мар 2012, 21:28
SergeyM
Не могу подружить 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, что там должно быть?
Re: SQL Server и QGIS
Добавлено: 14 мар 2012, 21:43
SergeyM
нашел, что заполнять в spatial_ref_sys
http://trac.osgeo.org/postgis/browser/t ... ef_sys.sql
все равно не помогло
Re: SQL Server и QGIS
Добавлено: 14 мар 2012, 21:51
Voltron
А у вас что простая база, без пространственных расширений? Это служебные таблицы и они обычно создаются при инициализации базы.
Попробуйте залить в базу при помощи ogr2ogr какой-нибудь слой (строку подключения исправьте на свою)
Код: Выделить всё
ogr2ogr -overwrite -f MSSQLSpatial "MSSQL:server=.\MSSQLSERVER2008;database=geodb;trusted_connection=yes" "admin.shp"
Re: SQL Server и QGIS
Добавлено: 14 мар 2012, 22:07
SergeyM
Voltron писал(а):А у вас что простая база, без пространственных расширений? Это служебные таблицы и они обычно создаются при инициализации базы.
Нет, со столбцами типа geography
Voltron писал(а):Попробуйте залить в базу при помощи ogr2ogr какой-нибудь слой (строку подключения исправьте на свою)
Код: Выделить всё
ogr2ogr -overwrite -f MSSQLSpatial "MSSQL:server=.\MSSQLSERVER2008;database=geodb;trusted_connection=yes" "admin.shp"
ок, сейчас
Re: SQL Server и QGIS
Добавлено: 14 мар 2012, 22:16
SergeyM
SergeyM писал(а):ок, сейчас
да, так работает - т.е. похоже проблема в метаданных, сейчас попробую скопировать эти таблицы
Re: SQL Server и QGIS
Добавлено: 14 мар 2012, 22:36
SergeyM
Все равно пусто, заметил что в запросах к серверу перепутаны широта с долготой, т.е. в профайлере запрос
Код: Выделить всё
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, можно как-то это победить?
Re: SQL Server и QGIS
Добавлено: 14 мар 2012, 22:55
Voltron
А какую СК показывает ogrinfo для вашего слоя? Если неизвестную — добавьте свои таблицы в таблицы geometry_columns и spatial_ref_sys
Re: SQL Server и QGIS
Добавлено: 14 мар 2012, 23:12
SergeyM
добавил по аналогии с залитым шейпфайлом
[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)
Re: SQL Server и QGIS
Добавлено: 14 мар 2012, 23:20
Voltron
А данные точно не были повернуты изначально?
Re: SQL Server и QGIS
Добавлено: 14 мар 2012, 23:23
SergeyM
Voltron писал(а):А данные точно не были повернуты изначально?
Сейчас тоже об этом подумал... В LINESTRING() что должно быть первым долгота или широта?
Re: SQL Server и QGIS
Добавлено: 14 мар 2012, 23:34
SergeyM
Судя по вики - LINESTRING (долгота широта, ...) - у меня правильно
Re: SQL Server и QGIS
Добавлено: 15 мар 2012, 09:18
yellow-sky
Есть один не маловажный момент с геометрическим типом в сиквеле.
Когда вы создавали свою таблицу и заливали в неё данные (не с помощью ogr), в давали каждой геометрии srid? Метаданные, созданные ogr, сиквел не использует. И если вы при записи не указывали каждой геометрии верный srid (тот srid, который будет использоваться для запросов) то будете получать пустые ответы. При запросе к геометрическому полю, сиквел сначала сверяет srid, и только после этого делает выборку.
Проверьте какой srid у ваших геометрий.
Re: SQL Server и QGIS
Добавлено: 15 мар 2012, 10:27
SergeyM
Проверил
SELECT DISTINCT s.Geo.STSrid
FROM streets s
Выдает 4326
Может быть ошибка из-за того что у меня смешанные типы (LINESTRING, MULTILINESTRING)?
Re: SQL Server и QGIS
Добавлено: 15 мар 2012, 10:39
yellow-sky
QGIS будет брать тип из метатаблицы.
А запросы на уровне sql нормально возвращают данные?
Re: SQL Server и QGIS
Добавлено: 15 мар 2012, 11:20
SergeyM
yellow-sky писал(а):QGIS будет брать тип из метатаблицы.
Если тип смешанный по идее надо ставить GEOMETRY? Судя по
этому
yellow-sky писал(а):А запросы на уровне sql нормально возвращают данные?
Если выбрать Zoom To Layer Extent - данные не возвращаются из-за перепутанной долготы с широтой, если выбираю правильный Extent - то запросы данные возвращают, но в QGIS все равно не показываются