Create geometry when harvesting documents with geographic extent
This commit is contained in:
parent
51102c9330
commit
b83443af4a
|
@ -157,10 +157,10 @@ class HarvestingJobController(object):
|
||||||
'bbox-east-long',
|
'bbox-east-long',
|
||||||
'bbox-north-lat',
|
'bbox-north-lat',
|
||||||
'bbox-south-lat',
|
'bbox-south-lat',
|
||||||
'bbox-west-long',
|
'bbox-west-long',
|
||||||
|
'spatial-reference-system',
|
||||||
'guid',
|
'guid',
|
||||||
# Usefuls
|
# Usefuls
|
||||||
'spatial-reference-system',
|
|
||||||
'dataset-reference-date',
|
'dataset-reference-date',
|
||||||
'resource-type',
|
'resource-type',
|
||||||
'metadata-language', # Language
|
'metadata-language', # Language
|
||||||
|
@ -217,6 +217,9 @@ class HarvestingJobController(object):
|
||||||
if package == None:
|
if package == None:
|
||||||
# Create new package from data.
|
# Create new package from data.
|
||||||
package = self._create_package_from_data(package_data)
|
package = self._create_package_from_data(package_data)
|
||||||
|
if package.extras.get('bbox-east-long'):
|
||||||
|
self._save_extent(package)
|
||||||
|
|
||||||
log.info("Created new package ID %s with GEMINI guid %s", package.id, gemini_guid)
|
log.info("Created new package ID %s with GEMINI guid %s", package.id, gemini_guid)
|
||||||
harvested_doc = HarvestedDocument(
|
harvested_doc = HarvestedDocument(
|
||||||
content=content,
|
content=content,
|
||||||
|
@ -231,6 +234,9 @@ class HarvestingJobController(object):
|
||||||
return package
|
return package
|
||||||
else:
|
else:
|
||||||
package = self._create_package_from_data(package_data, package = package)
|
package = self._create_package_from_data(package_data, package = package)
|
||||||
|
if package.extras.get('bbox-east-long'):
|
||||||
|
self._save_extent(package)
|
||||||
|
|
||||||
log.info("Updated existing package ID %s with existing GEMINI guid %s", package.id, gemini_guid)
|
log.info("Updated existing package ID %s with existing GEMINI guid %s", package.id, gemini_guid)
|
||||||
harvested_doc.content = content
|
harvested_doc.content = content
|
||||||
harvested_doc.source = self.job.source
|
harvested_doc.source = self.job.source
|
||||||
|
@ -240,6 +246,52 @@ class HarvestingJobController(object):
|
||||||
assert gemini_guid == package.documents[0].guid
|
assert gemini_guid == package.documents[0].guid
|
||||||
return package
|
return package
|
||||||
|
|
||||||
|
def _save_extent(self,package):
|
||||||
|
#TODO: configure SRID
|
||||||
|
conn = model.Session.connection()
|
||||||
|
|
||||||
|
minx = float(package.extras.get('bbox-east-long'))
|
||||||
|
miny = float(package.extras.get('bbox-south-lat'))
|
||||||
|
maxx = float(package.extras.get('bbox-west-long'))
|
||||||
|
maxy = float(package.extras.get('bbox-north-lat'))
|
||||||
|
|
||||||
|
try:
|
||||||
|
|
||||||
|
# Check if extent already exists
|
||||||
|
rows = conn.execute('SELECT package_id FROM package_extent WHERE package_id = %s',package.id).fetchall()
|
||||||
|
update =(len(rows) > 0)
|
||||||
|
|
||||||
|
if update:
|
||||||
|
# Update
|
||||||
|
statement = """UPDATE package_extent SET
|
||||||
|
the_geom = ST_GeomFromText('POLYGON ((%(minx)s %(miny)s,
|
||||||
|
%(maxx)s %(miny)s,
|
||||||
|
%(maxx)s %(maxy)s,
|
||||||
|
%(minx)s %(maxy)s,
|
||||||
|
%(minx)s %(miny)s))',4258)
|
||||||
|
WHERE package_id = %(id)s
|
||||||
|
"""
|
||||||
|
msg = 'Updated extent for package %s'
|
||||||
|
else:
|
||||||
|
# Insert
|
||||||
|
statement = """INSERT INTO package_extent (package_id,the_geom) VALUES (
|
||||||
|
%(id)s,
|
||||||
|
ST_GeomFromText('POLYGON ((%(minx)s %(miny)s,
|
||||||
|
%(maxx)s %(miny)s,
|
||||||
|
%(maxx)s %(maxy)s,
|
||||||
|
%(minx)s %(maxy)s,
|
||||||
|
%(minx)s %(miny)s))',4258))"""
|
||||||
|
msg = 'Created new extent for package %s'
|
||||||
|
|
||||||
|
conn.execute(statement,{'id':package.id, 'minx':minx,'miny':miny,'maxx':maxx,'maxy':maxy})
|
||||||
|
|
||||||
|
model.Session.commit()
|
||||||
|
log.info(msg, package.id)
|
||||||
|
except:
|
||||||
|
log.error('An error occurred when saving the extent for package %s',package.id)
|
||||||
|
finally:
|
||||||
|
return package
|
||||||
|
|
||||||
def get_content(self, url):
|
def get_content(self, url):
|
||||||
try:
|
try:
|
||||||
http_response = urllib2.urlopen(url)
|
http_response = urllib2.urlopen(url)
|
||||||
|
|
Loading…
Reference in New Issue