Скрипт извлечения данных об охвате продукта MOD14

Программы и алгоритмы для обработки данных дистанционного зондирования: ERDAS, ENVI и другие.
Ответить
Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Скрипт извлечения данных об охвате продукта MOD14

Сообщение Denis Rykov » 04 авг 2011, 10:45

Небольшой скрипт, решающий описанную здесь задачу. Требуется наличие библиотек lxml и shapely.

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

import sys
from lxml import etree
from optparse import OptionParser
from shapely.geometry import Polygon

def echo_err(parser,msg):
parser.print_help()
print "*** " + msg
sys.exit(1)

def main():

''' Parse keys '''
usage = 'usage: %prog -f=PATH'
parser = OptionParser(usage=usage)
parser.add_option('-f', '--file', action='store', dest='xmlfile', help='XML metadata file')
parser.add_option('-e', '--extent', action='store', dest='extent', help='minLon,minLat,maxLon,maxLat')
(options, args) = parser.parse_args()
checkedFile = options.xmlfile
extent = options.extent

if checkedFile == None:
echo_err(parser, "XML file is required")

if extent == None:
echo_err(parser, "Extent is required")
else:
extentBounds = extent.split(",")

if ((float(extentBounds[0]) >= float(extentBounds[2])) or (float(extentBounds[1]) >= float(extentBounds[3]))):
echo_err(parser, "Incorrect extent format: minLon,minLat,maxLon,maxLat")

'''Extract boundary coordinates from metadata xml file'''
tree = etree.parse(checkedFile)
boundaryLat = [p.text for p in tree.iterfind("//PointLatitude")]
boundaryLon = [p.text for p in tree.iterfind("//PointLongitude")]

boundary = Polygon(((float(boundaryLon[0]), float(boundaryLat[0])),
(float(boundaryLon[1]), float(boundaryLat[1])),
(float(boundaryLon[2]), float(boundaryLat[2])),
(float(boundaryLon[3]), float(boundaryLat[3]))))

''' Extract boundary from given extent option '''
boundaryComparative = Polygon(((float(extentBounds[0]), float(extentBounds[1])),
(float(extentBounds[0]), float(extentBounds[3])),
(float(extentBounds[2]), float(extentBounds[3])),
(float(extentBounds[2]), float(extentBounds[1]))))

print boundary.intersects(boundaryComparative)

if __name__=="__main__":
main()
Spatial is now, more than ever, just another column- The Geometry Column.

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 748
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Скрипт извлечения данных об охвате продукта MOD14

Сообщение Максим Дубинин » 04 авг 2011, 11:04

_DR_, спасибо (хотя печально, что кроме нас самих никто помогать не хочет)

В подсказку хорошо бы вывести в каком порядке указываются координаты охвата.
может поменять -f CHECKEDFILE, --file=CHECKEDFILE -> -f XMLFILE, --file=XMLFILE
пристегивайтесь, турбулентность прямо по курсу

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 748
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Скрипт извлечения данных об охвате продукта MOD14

Сообщение Максим Дубинин » 04 авг 2011, 11:23

Проверил

Каспий отрабатывает нормально

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

[sim@gis ~/gl/share]$ python check-extents.py -f MYD14.A2011215.0945.005.2011215165533.hdf.xml  -e 20,20,180,90
20 20 180 90
True
А вот Колгуев почему-то нет

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

[sim@gis ~/gl/share]$ python check-extents.py -f MYD14.A2011215.0755.005.2011215155054.hdf.xml  -e 20,20,180,180
20 20 180 180
False
Может это не он ...
Изображение

UPD: Отлично, Колгуев со Цейлоном перепутал :)
пристегивайтесь, турбулентность прямо по курсу

Ответить

Вернуться в «Обработка ДДЗ»

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

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