SQL-запрос на проверку пересечений

Ответить
drziko
Новоприбывший
Сообщения: 5
Зарегистрирован: 12 июл 2010, 16:18
Репутация: 0
Откуда: Калининград, ФГУ ЦАС "Калининградский"

SQL-запрос на проверку пересечений

Сообщение drziko » 04 авг 2010, 11:46

Здравствуйте!
Написал скрипт на python для проверки пересечения полигонов. В базе около 12000 записей. Принцип такой. Получаю список геометрий всех объектов и потом каждую с каждой проверяю по средствам функции ST_Overlaps. Всё работает, но естественно, очень медленно.
Может быть кто подскажет, как нагрузить PostgreSQL, а не локальную машину. Чтобы СУБД вернула весь список пересекающихся геометрий.

drziko
Новоприбывший
Сообщения: 5
Зарегистрирован: 12 июл 2010, 16:18
Репутация: 0
Откуда: Калининград, ФГУ ЦАС "Калининградский"

Re: SQL-запрос на проверку пересечений

Сообщение drziko » 04 авг 2010, 14:39

Прикладываю листинг функции на питоне. Пробовал сначала создавать строку с несколькими запросами и потом её парсить, но так получается дольше, нежели с одиночными транзациями.

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

def db_cross(tbl):
    """ Функция вывода пересекающихся полигонов. Если полигоны имеют смежные границы, считается, что они не пересекаются"""
    cur.execute("SELECT gid, the_geom FROM " + tbl + " ORDER BY gid") # Запрашиваем координаты полигонов 
    a = cur.fetchall()
    x = -1
    count = 0
    y = len(a) - 1
    print "Всего записей: ", y # Вывод общего количества записей
    while x < y - 1:
        print x
        x = x + 1 
        b=a[x] # Считываем конкретное значение в список из кортежа списков
        xx = x
        while xx < y:
            xx = xx+1
            bb=a[xx]
            stri = "SELECT ST_Overlaps('" + b[1] +"', '" + bb[1] + "')"	# Запрос на пересечение полигонов
            cur.execute(stri)
            res = cur.fetchone()
            if res[0] == 1:
                print "Полигоны: ", b[0], " и ", bb[0], "пересекаются." # Вывод gid пересекающихся полигонов
    return a

Ответить

Вернуться в «PostGIS/PostgreSQL»

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

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