Здравствуйте!
Написал скрипт на python для проверки пересечения полигонов. В базе около 12000 записей. Принцип такой. Получаю список геометрий всех объектов и потом каждую с каждой проверяю по средствам функции ST_Overlaps. Всё работает, но естественно, очень медленно.
Может быть кто подскажет, как нагрузить PostgreSQL, а не локальную машину. Чтобы СУБД вернула весь список пересекающихся геометрий.
SQL-запрос на проверку пересечений
-
- Новоприбывший
- Сообщения: 5
- Зарегистрирован: 12 июл 2010, 16:18
- Репутация: 0
- Откуда: Калининград, ФГУ ЦАС "Калининградский"
-
- Новоприбывший
- Сообщения: 5
- Зарегистрирован: 12 июл 2010, 16:18
- Репутация: 0
- Откуда: Калининград, ФГУ ЦАС "Калининградский"
Re: SQL-запрос на проверку пересечений
Прикладываю листинг функции на питоне. Пробовал сначала создавать строку с несколькими запросами и потом её парсить, но так получается дольше, нежели с одиночными транзациями.
Код: Выделить всё
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
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость