2014-02-19 3 views
1

Я новичок в Spatialite. У меня есть следующий запрос:Степень оценки буфера GIS для счетчиков с пространственным адресом

select A.* 
from linka as A, pointa as B 
where Contains(Buffer(B.Geometry, 100), A.Geometry) 

Я на самом деле хочу, чтобы создать 100 метров буфера и узнать, какие являются связующим звеном, содержатся ею.

Я могу найти вставленный «100» на самом деле значение степени, и он дает мне выход, который входит в этот диапазон.

Я могу поместить значение градуса также в свой запрос, но преобразование от степени к метрам/километрам не одинаково во всем мире. Я прошел через многие сайты и смог узнать 1 градус = 110 км прибл. , но из эксперта по ГИС и некоторых справочных сайтов также узнают, что на каждом полюсе на земле все по-другому.

Например, разница в Alta/Norway между метрическими x и y для планарного приближения составляет 34 км в направлении x, равном 111 км в направлении y. Буфер похож на это в то время, используя географические координаты:
http://extremelysatisfactorytotalitarianism.com/blog/wp-content/uploads/2010/08/tissot_indicatrix_equirectangular_proj.png

Я создаю программное обеспечение, которое преобразует географические данные по геометрическим данным (X, Y координата формата) и сделать преобразование, где Spatiallite может понять.

Я также пытаюсь прочитать о вещах SRID, но не могу понять, как вставить его в мой запрос.

ответ

0

временно превратить вашу геометрию в метрической проекции (например, UTM) , если я предполагаю, что текущая проекция WGS84 попробуйте следующий Постулаты

transform (buffer (transform (B.geometry, #projection), #dist), 4326)) 

-в #projection: ваш новый прогноз, например: 32631 для WGS 84/UTM зона 31N (выберите проекцию, которая соответствует вашей зоне)

-в #dist: расстояние в метрах

(4326 для WGS84)

+0

Привет, Чакиб, да, текущая проекция - WGS84.Я проверил, но выглядит как функция tranform, не работающая с моим графическим интерфейсом, хотя у меня есть последняя. выберите A. * из linka as A, pointa as B где Contains (Transform (B.Geometry, 32631), 100), 4326), A.Geometry) Кроме того, после этого также, когда я пропускаю 100 в dist это будет принимать в метрах? – Hardik

+0

Я также не мог понять, что, пока мы передаем этот проекционный номер «32631», «4326». как они работают, и как мы можем верить, что это правильно? мне нужна дополнительная таблица в моей базе данных? – Hardik

+0

У меня есть данные, как показано ниже: ** select AsText (Geometry) from pointa ** :: >> LINESTRING (3.76401 50.80294) ... ТЕПЕРЬ Я хочу создать 100-метровые буферы этого и хочу знать, сколько геометрии пересекаются или содержит его буфер – Hardik

0

Если вы используете SQL Server 2008 или более позднюю версию, Вы должны быть в состоянии использовать пространственные типы

  1. Lets предположить Линк содержит географию колонки, и его зовут гео, и она содержит Баллы
  2. не забывает создать пространственный индекс!
  3. попробовать этот

    DECLARE @buffer география = география :: Точка (1,234, 5,678, 4326); DECLARE @distance float = 100.0;

    SELECT * от Линка ГДЕ linka.geo.STDistance (@buffer) < @distance

+0

ОК, я вижу, SpatiaLite является SQL Lite Пространственное что-то;) , но там должно быть что-то подобное – GregS

+0

Грег, да SpatiaLite не похож на SQL-сервер, ему не хватает многих функций. Мой запрос также работает нормально, просто проблема заключается в том, что расстояние доходит до степени. – Hardik

 Смежные вопросы

  • Нет связанных вопросов^_^