Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 14, 2013 12:26:45

StasShk
Зарегистрирован: 2013-06-15
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Быстрое построение профиля трасc GDAL + Numpy

Здравствуйте!
Я пишу программу для расчета зоны покрытия радиопередатчика. Если не вдаваться в детали, то для расчета необходимо получить профиль трассы от каждой точки на карте до передатчика. Этот профиль представляет собой вектор, содержащий значения высот с определенным интервалом, например 100м. ( ).
Я использую карты SRTM3 с разрешением 100 метров. Данные SRTM представлены в виде обычных геотифф картонок размером 5х5 градусов и разрешением 3 секунды. Для работы с ними я использовал GDAL + NUMPY.
В приложенном файле файле можно посмотреть весь код с примером (запускать radio.py). А ниже представлен кусок кода, который формирует эти векторы:

    def get_elev_vector(self, coord1, coord2, step=90):
        if coord1 == coord2:
            return 0
        lat1, long1 = coord1
        lat2, long2 = coord2
        dist = self.get_dist(coord1, coord2)
        npt = dist / step
        vect = np.zeros(npt + 3, dtype='float32')
        vect[0] = npt
        vect[1] = dist
        vect[2] = self.get_elevation_direct(coord1)
        vect[npt] = self.get_elevation_direct(coord2)
        g = pyproj.Geod(ellps='WGS84')
        coordvect = g.npts(long1, lat1, long2, lat2, npt)
        i = 3
        for lon, lat in coordvect:
            vect[i] = self.get_elevation_direct((lat, lon))
            i += 1
        return vect

Проблема заключается в том, что векторов очень много и просто на то, чтобы их все получить, уходит несколько часов. И это без основной функции, которая рассчитывает ослабление!
Таким образом, сейчас я ищу способ увеличения скорости работы этого кода. Мне хотелось бы добиться времени исполнения хотя бы в пределах одного часа, тогда весь расчет зоны покрытия для небольшого города можно провести за ночь.
Будут интересны любые соображения по представленной проблеме.

Офлайн

#2 Ноя. 14, 2013 15:49:07

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Быстрое построение профиля трасc GDAL + Numpy

глубже не профилировали?
Например, на глаз наиболее долгим в этой функции видится цикл. Если так, то оптимизировать надо self.get_elevation_direct.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version