none
Методы типа STIntersects всегда возвращают null. Почему? RRS feed

  • Вопрос

  • Всем привет!

    Изучаю вот SpatialData в MS SQL Server 2008

    И натолкнулся на очень странную вещь:

    следующий код не работает :(

    select SHAPE from Spatial_Table
      where SHAPE.STIntersects(
        geometry::Parse('POLYGON((-30000 -30000, 30000 -30000, 30000 30000, -30000 30000, -30000 -30000))')) = 1;

    если вместо =1 вставить is null , то возвращаются ВСЕ записи из таблицы

    что я делаю не так?

    • Перемещено Siddharth Chavan 2 октября 2010 г. 0:17 MSDN Forums Consolidation (От:SQL Server для разработчиков)
    14 апреля 2010 г. 6:57

Ответы

  • в документации MS утверждается, что для типа GEOMETRY SRID не имеет значения (всегда считается, что он равен 0)

    но на самом деле это не совсем так


    узнать значение SRID для конкретного пространственного столбца можно следующим запросом:

    select SHAPE.STSrid AS Srid
    from Spatial_Table
    
    

    где SHAPE - это имя пространственного столбца,

    Spatial_Table - имя таблицы с пространственными данными

     

    выполнив этот запрос, я узнал, что в моей таблице (созданной средствами ArcGIS) SRID имел значение 3,  а не 0

    поэтому все запросы и обламывались

     

    я переписал запрос с явным заданием SRID = 3

    select SHAPE from Spatial_Table
     where SHAPE.STIntersects(geometry::STGeomFromText('POLYGON((...))', 3)) = 1;
    

    и все заработало :)
    • Помечено в качестве ответа Andrey Alifanov 15 апреля 2010 г. 6:36
    15 апреля 2010 г. 6:36

Все ответы

  • В любой форме предиката STDistance() по крайней мере один из географических аргументов (geography1 или geography2) должен определять географический экземпляр point. В противном случае метод возвращает значение NULL.
    http://www.t-sql.ru
    14 апреля 2010 г. 7:58
    Модератор
  • 1. При чем тут STDistance? Я вроде про STIntersects спашивал.

    2. Как Вы себе представляете пересечение с точкой?

    14 апреля 2010 г. 11:51
  • 1. При чем тут STDistance? Я вроде про STIntersects спашивал.


    Ой, прошу прощения, как я так прочитал =(((
    http://www.t-sql.ru
    14 апреля 2010 г. 12:13
    Модератор
  • ничего

    в форуме SQL Server Spatial мне уже объяснили, что к чему :)

    все заработало

    15 апреля 2010 г. 3:55
  • ничего

    в форуме SQL Server Spatial мне уже объяснили, что к чему :)

    все заработало


    Вы бы продублировали бы ответ сюда и пометили как ответ, дабы следующий ищущий нашёл решение
    http://www.t-sql.ru
    15 апреля 2010 г. 5:24
    Модератор
  • в документации MS утверждается, что для типа GEOMETRY SRID не имеет значения (всегда считается, что он равен 0)

    но на самом деле это не совсем так


    узнать значение SRID для конкретного пространственного столбца можно следующим запросом:

    select SHAPE.STSrid AS Srid
    from Spatial_Table
    
    

    где SHAPE - это имя пространственного столбца,

    Spatial_Table - имя таблицы с пространственными данными

     

    выполнив этот запрос, я узнал, что в моей таблице (созданной средствами ArcGIS) SRID имел значение 3,  а не 0

    поэтому все запросы и обламывались

     

    я переписал запрос с явным заданием SRID = 3

    select SHAPE from Spatial_Table
     where SHAPE.STIntersects(geometry::STGeomFromText('POLYGON((...))', 3)) = 1;
    

    и все заработало :)
    • Помечено в качестве ответа Andrey Alifanov 15 апреля 2010 г. 6:36
    15 апреля 2010 г. 6:36