Subject: Marine Geospatial Ecology Tools (MGET) help
Text archives
From: | "Jason Roberts" <> |
---|---|
To: | "'Matt Upton'" <> |
Cc: | <> |
Subject: | RE: [mget-help] Suggestions and Help on Error |
Date: | Thu, 22 Mar 2012 14:33:14 -0400 |
Matt,
The various GHRSST products are definitely on our list. Are you referring to
this one:
http://podaac.jpl.nasa.gov/dataset/JPL_OUROCEAN-L4UHfnd-GLOB-G1SST?ids=Measu
rement:GridSpatialResolution&values=Ocean%20Temperature:0.01
That is the one that is at the top of our GHRSST list. We do not have
immediate plans to add it but would consider doing so soon. Do you have an
immediate application for this?
Regarding the error. That is a bug. Thank you for reporting it! A fix is
attached. To apply it:
1. First make sure you have the latest version of MGET (0.8a36) installed.
2. Shut down all ArcGIS Programs.
3. Overwrite the file
C:\Python26\ArcGIS10.0\Lib\site-packages\GeoEco\DataProducts\Aviso.py with
the attached one.
4. Start ArcGIS and try again.
Let me know if that works. Also, bear in mind that Aviso does not provide
public access to NRT data that is newer than 30 days. When I ran this just
now, the newest time slice I could access was for March 19, 2012.
Best,
Jason
-----Original Message-----
From: Matt Upton
[mailto:]
Sent: Thursday, March 22, 2012 1:42 PM
To:
Subject: [mget-help] Suggestions and Help on Error
Hello MGET crew,
I recently installed your Toolbox on ArcGIS 10 SP4, with all the recommended
programs and software. This toolbox is very helpful and I am very pleased
thus far. Good work!
However, I do have suggestions. It would be greatly helpful if you could
expand on the Data Products available from NASA JPL PO.DAAC Specifically
the Blended SST GHSST Level 4 G1SST Global Foundation SST data at 1km
resolution (0.01 degrees) worldwide cloud free. This seems to be all the
rage lately especially after the Ocean Sciences meeting in Salt Lake City
last month. I know these datasets are large, but is it possible that this
can get added to your MGET in the very near future?
Second, I keep on getting errors when I try to create vectors and rasters
from the AVISO geostrophic Current Products, it keeps saying that I need to
select Daily temporal resolution for certain variables (specifically the
Global NRT data). But I DO HAVE THE Daily temporal resolution selected?
What the bug here?
Thanks,
Matt
---------------------------------------
Matthew A. Upton
Satellite Fisheries Oceanographer
Roffer's Ocean Fishing Forecasting Service, Inc. (ROFFS)
60 Westover Drive
West Melbourne, Florida 32904-5126
www.roffs.com
800.677.7633/321.723.5759
---------------------------------------
# Aviso.py - Provides methods for working with altimetry-derived data
# from Aviso (http://www.aviso.oceanobs.com).
#
# Copyright (C) 2008 Jason J. Roberts
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License (available in the file LICENSE.TXT)
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
USA.
import datetime
import os
import time
from GeoEco.DataManagement.ArcGISRasters import ArcGISRaster
from GeoEco.Datasets import Dataset, QueryableAttribute, Grid
from GeoEco.Datasets.OPeNDAP import THREDDSCatalog, OPeNDAPURL, OPeNDAPGrid
from GeoEco.DynamicDocString import DynamicDocString
from GeoEco.Internationalization import _
# To compute CornerCoords of Aviso global Mercator grid:
#
# >>> import math
# >>> from GeoEco.Datasets import Dataset
# >>> sr1 = Dataset.ConvertSpatialReference('proj4', '+proj=latlong
+ellps=WGS84 +datum=WGS84 +no_defs', 'obj')
# >>> sr2 = Dataset.ConvertSpatialReference('proj4', '+proj=merc +R=6371000
+lon_0=179.83333333333333 +no_defs', 'obj') # Note lon_0: this is 1/2
cell to the west of 180, so east and west extent in mercator coordinates are
the same, which is required by ArcGIS
# >>> transformer = Dataset._osr().CoordinateTransformation(sr1, sr2)
# >>> xLLC, yLLC = transformer.TransformPoint(0.0, -82.0)[:2] # These
are from the LatLonMin OPeNDAP variable
# >>> xLLC, yLLC
# (-19996554.308246478, -16948810.33867823) # Center
coords of lower-left cell; note that old AVISO FAQ claiming 0, -82 was lower
left corner is WRONG (confirmed by AVISO); 0, -82 is CENTER of cell
# >>> cellSize = 6371000. * 2 * math.pi / 360 / 3 # 1/3
degree cell size at equator (1080 columns)
# >>> cellSize
# 37064.975548186245
class _AvisoGriddedProduct(OPeNDAPGrid):
__doc__ = DynamicDocString()
def __init__(self, url, username, password, variableName=u'Grid_0001',
timeout=60, maxRetryTime=120, cacheDirectory=None):
# Determine the values of the queryable attributes from the
# URL.
queryableAttributes=(QueryableAttribute(u'Region', _(u'Region'),
UnicodeStringTypeMetadata(allowedValues=[u'global', u'medsea', u'blacksea'],
makeLowercase=True)),
QueryableAttribute(u'DataSeries', _(u'Data
series'), UnicodeStringTypeMetadata(allowedValues=[u'nrt', u'dt_ref',
u'dt_upd'], makeLowercase=True)),
QueryableAttribute(u'Satellites',
_(u'Satellites'), UnicodeStringTypeMetadata(allowedValues=[u'merged',
u'tpj1'], makeLowercase=True)),
QueryableAttribute(u'TemporalResolution',
_(u'Temporal resolution'), UnicodeStringTypeMetadata(allowedValues=[u'daily',
u'weekly'], makeLowercase=True)),
QueryableAttribute(u'Variable', _(u'Variable'),
UnicodeStringTypeMetadata(allowedValues=[u'madt_h', u'madt_u', u'madt_v',
u'msla_err', u'msla_h', u'msla_u', u'msla_v', u'mswh', u'mwind'],
makeLowercase=True)))
queryableAttributeValues = {}
if u'-global-' in url:
queryableAttributeValues['Region'] = u'global'
elif u'-medsea-' in url:
queryableAttributeValues['Region'] = u'medsea'
elif u'-blacksea-' in url:
queryableAttributeValues['Region'] = u'blacksea'
else:
raise ValueError(_(u'The URL %(url)s does not contain a known
Aviso region code. The region codes known by this tool are "global",
"medsea", and "blacksea". If this is a valid Aviso OPeNDAP URL for a new
region, please contact the author of this tool to have it added.') % {u'url':
url})
if u'-nrt-' in url:
queryableAttributeValues['DataSeries'] = u'nrt'
elif u'-dt-ref-' in url:
queryableAttributeValues['DataSeries'] = u'dt_ref'
elif u'-dt-upd-' in url:
queryableAttributeValues['DataSeries'] = u'dt_upd'
else:
raise ValueError(_(u'The URL %(url)s does not contain a known
data series code. The data series codes known by this tool are "nrt",
"dt-ref", and "dt-upd". If this is a valid Aviso OPeNDAP URL for a new data
series, please contact the author of this tool to have it added.') % {u'url':
url})
if u'-merged-' in url:
queryableAttributeValues['Satellites'] = u'merged'
elif u'-tpj1-' in url:
queryableAttributeValues['Satellites'] = u'tpj1'
else:
raise ValueError(_(u'The URL %(url)s does not contain a known
satellite code. The satellite codes known by this tool are "merged", and
"tpj1". If this is a valid Aviso OPeNDAP URL for a new satellite, please
contact the author of this tool to have it added.') % {u'url': url})
if u'-nrt-' in url or url.endswith('-daily'):
queryableAttributeValues['TemporalResolution'] = u'daily'
else:
queryableAttributeValues['TemporalResolution'] = u'weekly'
if u'madt-uv' in url:
if variableName == u'Grid_0001':
queryableAttributeValues['Variable'] = u'madt_u'
elif variableName == u'Grid_0002':
queryableAttributeValues['Variable'] = u'madt_v'
else:
raise ValueError(_(u'The OPeNDAP variable name %(name)s is
not valid for the Aviso URL %(url)s. The valid variable names are "Grid_0001"
and "Grid_0002".') % {u'name': variableName, u'url': url})
elif u'msla-uv' in url:
if variableName == u'Grid_0001':
queryableAttributeValues['Variable'] = u'msla_u'
elif variableName == u'Grid_0002':
queryableAttributeValues['Variable'] = u'msla_v'
else:
raise ValueError(_(u'The OPeNDAP variable name %(name)s is
not valid for the Aviso URL %(url)s. The valid variable names are "Grid_0001"
and "Grid_0002".') % {u'name': variableName, u'url': url})
else:
if u'madt-h' in url:
queryableAttributeValues['Variable'] = u'madt_h'
elif u'msla-err' in url:
queryableAttributeValues['Variable'] = u'msla_err'
elif u'msla-h' in url:
queryableAttributeValues['Variable'] = u'msla_h'
elif url.endswith(u'mswh'):
queryableAttributeValues['Variable'] = u'mswh'
elif url.endswith(u'mwind'):
queryableAttributeValues['Variable'] = u'mwind'
else:
raise ValueError(_(u'The URL %(url)s does not end with a
valid Aviso variable name. The variable names known by this tool are
"madt-h", "madt-uv", "msla-err", "msla-h", "msla_uv", "mswh", and "mwind". If
this is a valid Aviso OPeNDAP URL for a new variable, please contact the
author of this tool to have it added.') % {u'url': url})
if variableName != u'Grid_0001':
raise ValueError(_(u'The OPeNDAP variable name %(name)s is
not valid for the Aviso URL %(url)s. The variable name must be "Grid_0001"
for this URL.') % {u'name': variableName, u'url': url})
# Determine the values of the lazy properties from the URL.
if url.endswith(u'mwind') or url.endswith(u'mswh'):
spatialReference = Dataset.ConvertSpatialReference('proj4',
'+proj=latlong +ellps=WGS84 +datum=WGS84 +no_defs', 'obj')
elif u'-global-' in url:
spatialReference = Dataset.ConvertSpatialReference('proj4',
'+proj=merc +R=6371000 +lon_0=179.83333333333333 +no_defs', 'obj')
else:
spatialReference = Dataset.ConvertSpatialReference('proj4',
'+proj=latlong +ellps=WGS84 +datum=WGS84 +no_defs', 'obj')
# Initialize the base class.
super(_AvisoGriddedProduct, self).__init__(OPeNDAPURL(url,
username=username, password=password, timeout=timeout,
maxRetryTime=maxRetryTime, queryableAttributes=queryableAttributes,
cacheDirectory=cacheDirectory),
variableName,
'Grid',
queryableAttributeValues=queryableAttributeValues,
lazyPropertyValues={'SpatialReference': spatialReference,
'Dimensions': 'tyx',
'CoordDependencies': (None, None, None),
'TIncrementUnit': 'hour',
'TSemiRegularity': None,
'TCornerCoordType': 'center',
'PhysicalDimensions': 'txy',
'PhysicalDimensionsFlipped': (False, False, False),
'UnscaledDataType': 'float32',
'UnscaledNoDataValue': 1.8446744073709552e+019,
'ScalingFunction': None})
def _GetLazyPropertyPhysicalValue(self, name):
if name == 'CoordIncrements':
if self.ParentCollection.URL.endswith(u'mwind') or
self.ParentCollection.URL.endswith(u'mswh'):
cellSize = 1.0
elif u'-global-' in self.ParentCollection.URL:
cellSize = 37064.975548186245
else:
cellSize = 0.125
self.ParentCollection._Open()
if self.ParentCollection._PydapDataset['time'].units != 'hours
since 1950-01-01':
raise RuntimeError('Programming error in this tool: this tool
expects that the Aviso dataset at URL %(url)s uses the time units "hours
since 1950-01-01", but the dataset actually uses the time units "%(units)s.
Please contact the author of this tool for assistance.' % {u'url':
self.ParentCollection.URL, u'units':
self.ParentCollection._PydapDataset['time'].units})
tValues = self.ParentCollection._PydapDataset['time'][0:2]
tIncrement = float(tValues[1] - tValues[0])
return (tIncrement, cellSize, cellSize)
elif name == 'CornerCoords':
self.ParentCollection._Open()
if self.ParentCollection._PydapDataset['time'].units != 'hours
since 1950-01-01':
raise RuntimeError('Programming error in this tool: this tool
expects that the Aviso dataset at URL %(url)s uses the time units "hours
since 1950-01-01", but the dataset actually uses the time units "%(units)s.
Please contact the author of this tool for assistance.' % {u'url':
self.ParentCollection.URL, u'units':
self.ParentCollection._PydapDataset['time'].units})
t0 = datetime.datetime(1950, 1, 1) +
datetime.timedelta(hours=int(self.ParentCollection._PydapDataset['time'][0]))
if u'global' in self.ParentCollection.URL:
if self.ParentCollection.URL.endswith(u'mwind') or
self.ParentCollection.URL.endswith(u'mswh'):
return (t0, -90.0, 0.0)
else:
return (t0, -16948810.33867823, -19996554.308246478)
elif u'medsea' in self.ParentCollection.URL:
return (t0, 30.0, -5.0)
elif u'blacksea' in self.ParentCollection.URL:
return (t0, 40.0, 27.0)
else:
raise NotImplementedError(_(u'Support for the Aviso URL
%(url)s has not been fully implemented. Please contact the author of this
tool for assistance.') % {u'url': self.ParentCollection.URL})
return super(_AvisoGriddedProduct,
self)._GetLazyPropertyPhysicalValue(name)
@classmethod
def _RotateAndClip(cls, grid, rotationOffset, spatialExtent, linearUnit,
startDate, endDate):
from GeoEco.Datasets.Virtual import RotatedGlobalGrid, ClippedGrid
# Rotate the grid, if requested.
if rotationOffset is not None:
if grid.ParentCollection is not None and u'-global-' not in
grid.ParentCollection.URL:
raise ValueError(_(u'The Rotate Raster parameter may only be
used with global products. Please omit the Rotate Raster parameter and try
again.'))
if linearUnit == u'degrees':
try:
sr = grid.GetSpatialReference('obj').Clone()
if not sr.IsGeographic():
srAtPrimeMeridian = sr.Clone()
srAtPrimeMeridian.SetNormProjParm('central_meridian',
0.)
srGeographic = cls._osr().SpatialReference()
srGeographic.CopyGeogCSFrom(sr)
transformer =
cls._osr().CoordinateTransformation(srGeographic, srAtPrimeMeridian)
rotationOffset =
transformer.TransformPoint(rotationOffset, 0.)[0]
except:
cls._gdal().ErrorReset()
raise
grid = RotatedGlobalGrid(grid, rotationOffset, u'Map units')
# Clip the grid, if requested.
xMin, yMin, xMax, yMax = None, None, None, None
if spatialExtent is not None:
sr = grid.GetSpatialReference('obj')
if linearUnit == u'meters' and sr.IsGeographic():
raise ValueError(_(u'The Linear Unit parameter not be
"Meters" for this Aviso product because it uses a geographic coordinate
system. Please change Linear Unit to "Degrees" and try again.'))
from GeoEco.Types import EnvelopeTypeMetadata
xMin, yMin, xMax, yMax =
EnvelopeTypeMetadata.ParseFromArcGISString(spatialExtent)
if linearUnit == u'degrees' and sr.IsProjected():
centralMeridian = sr.GetNormProjParm('central_meridian')
xMinAllowed = -180. + centralMeridian
xMaxAllowed = 180. + centralMeridian
if str(xMin) == str(xMinAllowed):
xMin = xMinAllowed
elif str(xMin) == str(xMaxAllowed):
xMin = xMaxAllowed
if str(xMax) == str(xMinAllowed):
xMax = xMinAllowed
elif str(xMax) == str(xMaxAllowed):
xMax = xMaxAllowed
if xMin < xMinAllowed or xMin > xMaxAllowed:
if rotationOffset is not None:
raise ValueError(_(u'The X Minimum of the Spatial
Extent parameter (%(value)g degrees) is not within the geographic extent of
the rotated grid. After rotation, the geographic extent in the X direction is
%(xMin)g to %(xMax)g degrees. Please specify an X Minimum in that range.') %
{u'value': xMin, u'xMin': xMinAllowed, u'xMax': xMaxAllowed})
else:
raise ValueError(_(u'The X Minimum of the Spatial
Extent parameter (%(value)g degrees) is not within the geographic extent of
the grid. The geographic extent in the X direction is %(xMin)g to %(xMax)g
degrees. Please specify an X Minimum in that range.') % {u'value': xMin,
u'xMin': xMinAllowed, u'xMax': xMaxAllowed})
if xMax < xMinAllowed or xMax > xMaxAllowed:
if rotationOffset is not None:
raise ValueError(_(u'The X Maximum of the Spatial
Extent parameter (%(value)g degrees) is not within the geographic extent of
the rotated grid. After rotation, the geographic extent in the X direction is
%(xMin)g to %(xMax)g degrees. Please specify an X Minimum in that range.') %
{u'value': xMax, u'xMin': xMinAllowed, u'xMax': xMaxAllowed})
else:
raise ValueError(_(u'The X Maximum of the Spatial
Extent parameter (%(value)g degrees) is not within the geographic extent of
the grid. The geographic extent in the X direction is %(xMin)g to %(xMax)g
degrees. Please specify an X Minimum in that range.') % {u'value': xMax,
u'xMin': xMinAllowed, u'xMax': xMaxAllowed})
yMin = max(yMin, -85.0)
yMax = min(yMax, 85.0)
try:
transformer =
cls._osr().CoordinateTransformation(Dataset.ConvertSpatialReference('proj4',
'+proj=latlong +R=6371000 +no_defs', 'obj'), grid.GetSpatialReference('obj'))
xMin, yMin = transformer.TransformPoint(xMin, yMin)[:2]
xMax, yMax = transformer.TransformPoint(xMax, yMax)[:2]
except:
cls._gdal().ErrorReset()
raise
if spatialExtent is not None or startDate is not None or endDate is
not None:
if startDate is not None:
startDate = datetime.datetime(startDate.year,
startDate.month, startDate.day, 0, 0, 0)
if endDate is not None:
endDate = datetime.datetime(endDate.year, endDate.month,
endDate.day, 23, 59, 59)
grid = ClippedGrid(grid, u'Map coordinates', xMin=xMin,
xMax=xMax, yMin=yMin, yMax=yMax, tMin=startDate, tMax=endDate)
# Return the grid.
return grid
@classmethod
def _GetURLSuffix(cls, url, temporalResolution):
if temporalResolution == u'daily':
if u'-nrt-' not in url:
return u'-daily'
elif u'-nrt-' in url:
raise ValueError(_(u'Aviso\'s Near Real Time (NRT) products are
only available in daily temporal resolution. Please select daily temporal
resolution or switch to a Delayed Time (DT) product that offers weekly
resolution.'))
return ''
@classmethod
def _GetTimeCoordsFromQueryableAttributeValues(cls,
queryableAttributeValues):
if u'DateTime' not in queryableAttributeValues or not
isinstance(queryableAttributeValues[u'DateTime'], datetime.datetime) or
u'TemporalResolution' not in queryableAttributeValues or not
isinstance(queryableAttributeValues[u'TemporalResolution'], basestring) or
queryableAttributeValues[u'TemporalResolution'].lower() not in [u'daily',
u'weekly']:
return [None, None, None]
dateTime = queryableAttributeValues[u'DateTime']
if queryableAttributeValues[u'TemporalResolution'].lower() ==
u'daily':
return [dateTime - datetime.timedelta(0.5), dateTime, dateTime +
datetime.timedelta(0.5) - datetime.timedelta(seconds=1)]
return [dateTime - datetime.timedelta(3.5), dateTime, dateTime +
datetime.timedelta(3.5) - datetime.timedelta(seconds=1)]
@classmethod
def CreateArcGISRasters(cls, grid, outputWorkspace, mode,
rasterNameExpressions, rasterCatalog, rotationOffset, spatialExtent,
linearUnit, startDate, endDate, calculateStatistics, buildPyramids):
try:
from GeoEco.Datasets.ArcGIS import ArcGISWorkspace, ArcGISRaster
from GeoEco.Datasets.Virtual import GridSliceCollection
grid = cls._RotateAndClip(grid, rotationOffset, spatialExtent,
linearUnit, startDate, endDate)
workspace = ArcGISWorkspace(outputWorkspace, ArcGISRaster,
pathCreationExpressions=rasterNameExpressions, cacheTree=True,
queryableAttributes=tuple(grid.GetAllQueryableAttributes() +
[QueryableAttribute(u'DateTime', _(u'Date'), DateTimeTypeMetadata())]))
workspace.ImportDatasets(GridSliceCollection(grid,
tQACoordType=u'center').QueryDatasets(), mode,
calculateStatistics=calculateStatistics, buildPyramids=buildPyramids)
if rasterCatalog is not None:
workspace.ToRasterCatalog(rasterCatalog,
grid.GetSpatialReference(u'ArcGIS'), tQACoordType=u'center',
tCoordFunction=cls._GetTimeCoordsFromQueryableAttributeValues,
overwriteExisting=True)
finally:
grid.Close()
@classmethod
def CreateClimatologicalArcGISRasters(cls, grid, statistic, binType,
outputWorkspace, mode, rasterNameExpressions, binDuration, startDayOfYear,
rotationOffset, spatialExtent, linearUnit, startDate, endDate,
calculateStatistics, buildPyramids):
try:
from GeoEco.Datasets.ArcGIS import ArcGISWorkspace, ArcGISRaster
from GeoEco.Datasets.Virtual import ClimatologicalGridCollection
grid = cls._RotateAndClip(grid, rotationOffset, spatialExtent,
linearUnit, startDate, endDate)
collection = ClimatologicalGridCollection(grid, statistic,
binType, binDuration, startDayOfYear, reportProgress=True)
workspace = ArcGISWorkspace(outputWorkspace, ArcGISRaster,
pathCreationExpressions=rasterNameExpressions, cacheTree=True,
queryableAttributes=tuple(collection.GetAllQueryableAttributes()))
workspace.ImportDatasets(collection.QueryDatasets(), mode,
calculateStatistics=calculateStatistics, buildPyramids=buildPyramids)
finally:
grid.Close()
@classmethod
def InterpolateAtArcGISPoints(cls, grid, points, valueField, tField,
method, where, noDataValue, orderByFields, numBlocksToCacheInMemory,
xBlockSize, yBlockSize, tBlockSize):
try:
if orderByFields is not None:
orderBy = u', '.join(map(lambda f: f + u' ASC',
orderByFields))
else:
from GeoEco.ArcGIS import GeoprocessorManager
if GeoprocessorManager.GetArcGISMajorVersion() > 9 or
GeoprocessorManager.GetArcGISMinorVersion() >= 2:
orderBy = tField + u' ASC'
else:
orderBy = None
from GeoEco.Datasets.ArcGIS import ArcGISTable
from GeoEco.SpatialAnalysis.Interpolation import Interpolator
Interpolator.InterpolateGridsValuesForTableOfPoints([grid],
ArcGISTable(points), [valueField], tField=tField, where=where,
orderBy=orderBy, method=method, noDataValue=noDataValue, gridsWrap=True,
numBlocksToCacheInMemory=numBlocksToCacheInMemory, xBlockSize=xBlockSize,
yBlockSize=yBlockSize, tBlockSize=tBlockSize)
finally:
grid.Close()
class AvisoGriddedSSH(_AvisoGriddedProduct):
__doc__ = DynamicDocString()
def __init__(self, productName, temporalResolution, username, password,
timeout=60, maxRetryTime=120, cacheDirectory=None):
self.__doc__.Obj.ValidateMethodInvocation()
super(AvisoGriddedSSH,
self).__init__(AvisoGriddedSSH.OPeNDAPURLsForProducts[productName] +
self._GetURLSuffix(AvisoGriddedSSH.OPeNDAPURLsForProducts[productName],
temporalResolution), username, password, timeout=timeout,
maxRetryTime=maxRetryTime, cacheDirectory=cacheDirectory)
self._DisplayName = u'Aviso ' + productName
def _GetDisplayName(self):
return self._DisplayName
OPeNDAPURLsForProducts = {
u'Black Sea DT-Ref Merged MSLA Error':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-ref-blacksea-merged-msla-err',
u'Black Sea DT-Ref Merged MSLA SSH':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-ref-blacksea-merged-msla-h',
u'Black Sea DT-Upd Merged MSLA Error':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-upd-blacksea-merged-msla-err',
u'Black Sea DT-Upd Merged MSLA SSH':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-upd-blacksea-merged-msla-h',
u'Black Sea NRT (Over 30 Days) Merged MSLA Error':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-nrt-over30d-blacksea-merged-msla-err',
u'Black Sea NRT (Over 30 Days) Merged MSLA SSH':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-nrt-over30d-blacksea-merged-msla-h',
u'Global DT-Ref Merged MADT SSH':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-ref-global-merged-madt-h',
u'Global DT-Ref Merged MSLA Error':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-ref-global-merged-msla-err',
u'Global DT-Ref Merged MSLA SSH':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-ref-global-merged-msla-h',
u'Global DT-Ref Topex/Poseidon, Jason-1 MSLA Error':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-ref-global-tpj1-msla-err',
u'Global DT-Ref Topex/Poseidon, Jason-1 MSLA SSH':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-ref-global-tpj1-msla-h',
u'Global DT-Upd Merged MADT SSH':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-upd-global-merged-madt-h',
u'Global DT-Upd Merged MSLA Error':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-upd-global-merged-msla-err',
u'Global DT-Upd Merged MSLA SSH':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-upd-global-merged-msla-h',
u'Global NRT (Over 30 Days) Merged MADT SSH':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-nrt-over30d-global-merged-madt-h',
u'Global NRT (Over 30 Days) Merged MSLA Error':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-nrt-over30d-global-merged-msla-err',
u'Global NRT (Over 30 Days) Merged MSLA SSH':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-nrt-over30d-global-merged-msla-h',
u'Mediterranean DT-Ref Merged MADT SSH':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-ref-medsea-merged-madt-h',
u'Mediterranean DT-Ref Merged MSLA Error':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-ref-medsea-merged-msla-err',
u'Mediterranean DT-Ref Merged MSLA SSH':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-ref-medsea-merged-msla-h',
u'Mediterranean DT-Upd Merged MADT SSH':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-upd-medsea-merged-madt-h',
u'Mediterranean DT-Upd Merged MSLA Error':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-upd-medsea-merged-msla-err',
u'Mediterranean DT-Upd Merged MSLA SSH':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-upd-medsea-merged-msla-h',
u'Mediterranean NRT (Over 30 Days) Merged MADT SSH':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-nrt-over30d-medsea-merged-madt-h',
u'Mediterranean NRT (Over 30 Days) Merged MSLA Error':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-nrt-over30d-medsea-merged-msla-err',
u'Mediterranean NRT (Over 30 Days) Merged MSLA SSH':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-nrt-over30d-medsea-merged-msla-h'
}
def _ReadNumpyArray(self, sliceList):
# In August 2010, I discovered that some of the Aviso SSH
# datasets contain a few pixels with extremely high SSH values
# that are obviously bogus. Set these bogus values to nodata.
import numpy
data, noDataValue = super(AvisoGriddedSSH,
self)._ReadNumpyArray(sliceList)
data[numpy.logical_or(data > 10000, data < -10000)] = noDataValue
return data, noDataValue
Products = OPeNDAPURLsForProducts.keys()
Products.sort()
ProductsForEddyDetection = filter(lambda p: 'error' not in p.lower(),
Products)
@classmethod
def CreateArcGISRasters(cls, username, password, productName,
temporalResolution,
outputWorkspace, mode=u'add',
rasterNameExpressions=['%(Region)s', '%(DataSeries)s', '%(Satellites)s',
'%(TemporalResolution)s', '%(Variable)s', '%%Y',
'%(DataSeries)s_%(Satellites)s_%(Variable)s_%%Y%%j.img'], rasterCatalog=None,
rotationOffset=None, spatialExtent=None,
linearUnit=u'Degrees', startDate=None, endDate=None,
timeout=60, maxRetryTime=120, cacheDirectory=None,
calculateStatistics=True, buildPyramids=False):
cls.__doc__.Obj.ValidateMethodInvocation()
grid = AvisoGriddedSSH(productName, temporalResolution, username,
password, timeout, maxRetryTime, cacheDirectory)
_AvisoGriddedProduct.CreateArcGISRasters(grid, outputWorkspace, mode,
rasterNameExpressions, rasterCatalog, rotationOffset, spatialExtent,
linearUnit, startDate, endDate, calculateStatistics, buildPyramids)
return outputWorkspace
@classmethod
def CreateClimatologicalArcGISRasters(cls, username, password,
productName, temporalResolution,
statistic, binType,
outputWorkspace, mode=u'add',
rasterNameExpressions=['%(Region)s', '%(DataSeries)s', '%(Satellites)s',
'%(TemporalResolution)s', '%(Variable)s',
u'%(ClimatologyBinType)s_Climatology',
u'%(DataSeries)s_%(Satellites)s_%(Variable)s_%(ClimatologyBinName)s_%(Statistic)s.img'],
binDuration=1, startDayOfYear=1,
rotationOffset=None,
spatialExtent=None, linearUnit=u'Degrees', startDate=None, endDate=None,
timeout=60, maxRetryTime=120,
cacheDirectory=None,
calculateStatistics=True,
buildPyramids=False):
cls.__doc__.Obj.ValidateMethodInvocation()
grid = AvisoGriddedSSH(productName, temporalResolution, username,
password, timeout, maxRetryTime, cacheDirectory)
_AvisoGriddedProduct.CreateClimatologicalArcGISRasters(grid,
statistic, binType, outputWorkspace, mode, rasterNameExpressions,
binDuration, startDayOfYear, rotationOffset, spatialExtent, linearUnit,
startDate, endDate, calculateStatistics, buildPyramids)
return outputWorkspace
@classmethod
def InterpolateAtArcGISPoints(cls, username, password, productName,
temporalResolution,
points, valueField, tField,
method=u'Nearest', where=None, noDataValue=None,
timeout=60, maxRetryTime=120,
cacheDirectory=None,
orderByFields=None,
numBlocksToCacheInMemory=128, xBlockSize=16, yBlockSize=16, tBlockSize=3):
cls.__doc__.Obj.ValidateMethodInvocation()
grid = AvisoGriddedSSH(productName, temporalResolution, username,
password, timeout, maxRetryTime, cacheDirectory)
_AvisoGriddedProduct.InterpolateAtArcGISPoints(grid, points,
valueField, tField, method, where, noDataValue, orderByFields,
numBlocksToCacheInMemory, xBlockSize, yBlockSize, tBlockSize)
return points
@classmethod
def FindOkuboWeissEddies(cls, username, password, productName,
temporalResolution,
outputWorkspace, mode=u'add',
rasterNameExpressions=['%(Region)s', '%(DataSeries)s', '%(Satellites)s',
'%(TemporalResolution)s', '%(Variable)s_%(ImageType)s', '%%Y',
'%(DataSeries)s_%(Satellites)s_%(Variable)s_%(ImageType)s_%%Y%%j.img'],
owThresholdType=u'Standard Deviation',
owThresholdValue=-0.2, minArea=4, minA2P=None, minDuration=4,
rotationOffset=None, spatialExtent=None,
linearUnit=u'Degrees', startDate=None, endDate=None,
timeout=60, maxRetryTime=120,
cacheDirectory=None,
calculateStatistics=True, buildRAT=True,
buildPyramids=False,
outputPolarityRasters=False,
outputAgeRasters=False):
cls.__doc__.Obj.ValidateMethodInvocation()
# Find the eddies.
grid = AvisoGriddedSSH(productName, temporalResolution, username,
password, timeout, maxRetryTime, cacheDirectory)
try:
from GeoEco.OceanographicAnalysis.Eddies import OkuboWeissEddies,
OkuboWeissEddyPolarities, OkuboWeissEddyAges
ssh = cls._RotateAndClip(grid, rotationOffset, spatialExtent,
linearUnit, startDate, endDate)
eddies = OkuboWeissEddies(ssh, owThresholdType=owThresholdType,
owThresholdValue=owThresholdValue, minArea=minArea, minA2P=minA2P,
minDuration=int(minDuration * 7 / (ssh.CoordIncrements[0] / 24)),
reportProgress=True)
# Create the eddy ID rasters.
from GeoEco.Datasets.ArcGIS import ArcGISWorkspace, ArcGISRaster
from GeoEco.Datasets.Virtual import GridSliceCollection
workspace = ArcGISWorkspace(outputWorkspace, ArcGISRaster,
pathCreationExpressions=rasterNameExpressions, cacheTree=True,
queryableAttributes=tuple(eddies.GetAllQueryableAttributes() +
[QueryableAttribute(u'DateTime', _(u'Date'), DateTimeTypeMetadata())]))
workspace.ImportDatasets(GridSliceCollection(eddies,
tQACoordType=u'center').QueryDatasets(), mode,
calculateStatistics=calculateStatistics, buildRAT=buildRAT,
buildPyramids=buildPyramids)
# If requested, also create the eddy polarity and age
# rasters.
if outputPolarityRasters:
workspace.ImportDatasets(GridSliceCollection(OkuboWeissEddyPolarities(eddies),
tQACoordType=u'center').QueryDatasets(), mode,
calculateStatistics=calculateStatistics, buildRAT=buildRAT,
buildPyramids=buildPyramids)
if outputAgeRasters:
workspace.ImportDatasets(GridSliceCollection(OkuboWeissEddyAges(eddies),
tQACoordType=u'center').QueryDatasets(), mode,
calculateStatistics=calculateStatistics, buildRAT=buildRAT,
buildPyramids=buildPyramids)
# Return successfully.
return outputWorkspace
finally:
grid.Close()
class AvisoGriddedGeostrophicCurrents(_AvisoGriddedProduct):
__doc__ = DynamicDocString()
def __init__(self, productName, vectorComponent, temporalResolution,
username, password, timeout=60, maxRetryTime=120, cacheDirectory=None):
self.__doc__.Obj.ValidateMethodInvocation()
super(AvisoGriddedGeostrophicCurrents,
self).__init__(AvisoGriddedGeostrophicCurrents.OPeNDAPURLsForProducts[productName]
+
self._GetURLSuffix(AvisoGriddedGeostrophicCurrents.OPeNDAPURLsForProducts[productName],
temporalResolution), username, password, {u'u': u'Grid_0001', u'v':
u'Grid_0002'}[vectorComponent], timeout=timeout, maxRetryTime=maxRetryTime,
cacheDirectory=cacheDirectory)
self._DisplayName = u'Aviso ' + productName + u' ' + vectorComponent
+ u'-component'
def _GetDisplayName(self):
return self._DisplayName
OPeNDAPURLsForProducts = {
u'Black Sea DT-Ref Merged MSLA':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-ref-blacksea-merged-msla-uv',
u'Black Sea DT-Upd Merged MSLA':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-upd-blacksea-merged-msla-uv',
u'Black Sea NRT (Over 30 Days) Merged MSLA':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-nrt-over30d-blacksea-merged-msla-uv',
u'Global DT-Ref Merged MADT':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-ref-global-merged-madt-uv',
u'Global DT-Ref Merged MSLA':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-ref-global-merged-msla-uv',
u'Global DT-Upd Merged MADT':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-upd-global-merged-madt-uv',
u'Global DT-Upd Merged MSLA':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-upd-global-merged-msla-uv',
u'Global NRT (Over 30 Days) Merged MADT':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-nrt-over30d-global-merged-madt-uv',
u'Global NRT (Over 30 Days) Merged MSLA':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-nrt-over30d-global-merged-msla-uv',
u'Mediterranean DT-Ref Merged MADT':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-ref-medsea-merged-madt-uv',
u'Mediterranean DT-Ref Merged MSLA':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-ref-medsea-merged-msla-uv',
u'Mediterranean DT-Upd Merged MADT':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-upd-medsea-merged-madt-uv',
u'Mediterranean DT-Upd Merged MSLA':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-upd-medsea-merged-msla-uv',
u'Mediterranean NRT (Over 30 Days) Merged MADT':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-nrt-over30d-medsea-merged-madt-uv',
u'Mediterranean NRT (Over 30 Days) Merged MSLA':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-nrt-over30d-medsea-merged-msla-uv'
}
def _ReadNumpyArray(self, sliceList):
# Some of the Aviso geostrophic datasets contain a few pixels
# with extreme values that are obviously bogus. Set these
# bogus values to nodata.
import numpy
data, noDataValue = super(AvisoGriddedGeostrophicCurrents,
self)._ReadNumpyArray(sliceList)
data[numpy.logical_or(data > 1000000, data < -1000000)] = noDataValue
return data, noDataValue
Products = OPeNDAPURLsForProducts.keys()
Products.sort()
@classmethod
def _ConstructGridForParameter(cls, productName, parameter,
temporalResolution, username, password, timeout, maxRetryTime,
cacheDirectory):
# If the caller just wants u or v, construct and return a
# AvisoGriddedGeostrophicCurrents instance.
if parameter in [u'u', u'v']:
return AvisoGriddedGeostrophicCurrents(productName, parameter,
temporalResolution, username, password, timeout, maxRetryTime, cacheDirectory)
# The caller wants something derived from both u and v. First
# create u and v component grids.
uGrid = AvisoGriddedGeostrophicCurrents(productName, u'u',
temporalResolution, username, password, timeout, maxRetryTime, cacheDirectory)
vGrid = AvisoGriddedGeostrophicCurrents(productName, u'v',
temporalResolution, username, password, timeout, maxRetryTime, cacheDirectory)
# Now construct and return the appropriate DerivedGrid
# instance.
qav = {}
for qa in uGrid.GetAllQueryableAttributes():
qav[qa.Name] = uGrid.GetQueryableAttributeValue(qa.Name)
from GeoEco.Datasets.Virtual import DerivedGrid
if parameter == u'dir':
qav[u'Variable'] = qav[u'Variable'].split(u'_')[0] + u'_dir'
return DerivedGrid([uGrid, vGrid],
'numpy.arctan2(0 -
self._Grids[0].Data.__getitem__(tuple(sliceList)), 0 -
self._Grids[1].Data.__getitem__(tuple(sliceList))) / numpy.pi * 180 + 180',
# north = 0, east = 90, south = 180, west = 270
_(u'Aviso %(product)s geostrophic current
magnitude') % {u'product': productName},
u'float32',
noDataValue=uGrid.NoDataValue,
queryableAttributes=tuple(uGrid.GetAllQueryableAttributes()),
queryableAttributeValues=qav)
if parameter == u'ke':
qav[u'Variable'] = qav[u'Variable'].split(u'_')[0] + u'_ke'
return DerivedGrid([uGrid, vGrid],
'0.5 *
(self._Grids[0].Data.__getitem__(tuple(sliceList))**2 +
self._Grids[1].Data.__getitem__(tuple(sliceList))**2)',
_(u'Aviso %(product)s kinetic energy') %
{u'product': productName},
u'float32',
noDataValue=uGrid.NoDataValue,
queryableAttributes=tuple(uGrid.GetAllQueryableAttributes()),
queryableAttributeValues=qav)
if parameter == u'mag':
qav[u'Variable'] = qav[u'Variable'].split(u'_')[0] + u'_mag'
return DerivedGrid([uGrid, vGrid],
'(self._Grids[0].Data.__getitem__(tuple(sliceList))**2 +
self._Grids[1].Data.__getitem__(tuple(sliceList))**2) ** 0.5',
_(u'Aviso %(product)s geostrophic current
magnitude') % {u'product': productName},
u'float32',
noDataValue=uGrid.NoDataValue,
queryableAttributes=tuple(uGrid.GetAllQueryableAttributes()),
queryableAttributeValues=qav)
raise RuntimeError(_(u'Programming error in this tool:
AvisoGriddedGeostrophicCurrents._ConstructGridForParameter() does not
recognize parameter "%(parameter)s". Please contact the author of this tool
for assistance.') % {u'parameter': parameter})
@classmethod
def CreateArcGISRasters(cls, username, password, productName, parameter,
temporalResolution,
outputWorkspace, mode=u'add',
rasterNameExpressions=['%(Region)s', '%(DataSeries)s', '%(Satellites)s',
'%(TemporalResolution)s', '%(Variable)s', '%%Y',
'%(DataSeries)s_%(Satellites)s_%(Variable)s_%%Y%%j.img'], rasterCatalog=None,
rotationOffset=None, spatialExtent=None,
linearUnit=u'Degrees', startDate=None, endDate=None,
timeout=60, maxRetryTime=120, cacheDirectory=None,
calculateStatistics=True, buildPyramids=False):
cls.__doc__.Obj.ValidateMethodInvocation()
grid = cls._ConstructGridForParameter(productName, parameter,
temporalResolution, username, password, timeout, maxRetryTime, cacheDirectory)
_AvisoGriddedProduct.CreateArcGISRasters(grid, outputWorkspace, mode,
rasterNameExpressions, rasterCatalog, rotationOffset, spatialExtent,
linearUnit, startDate, endDate, calculateStatistics, buildPyramids)
return outputWorkspace
@classmethod
def CreateClimatologicalArcGISRasters(cls, username, password,
productName, parameter, temporalResolution,
statistic, binType,
outputWorkspace, mode=u'add',
rasterNameExpressions=['%(Region)s', '%(DataSeries)s', '%(Satellites)s',
'%(TemporalResolution)s', '%(Variable)s',
u'%(ClimatologyBinType)s_Climatology',
u'%(DataSeries)s_%(Satellites)s_%(Variable)s_%(ClimatologyBinName)s_%(Statistic)s.img'],
binDuration=1, startDayOfYear=1,
rotationOffset=None,
spatialExtent=None, linearUnit=u'Degrees', startDate=None, endDate=None,
timeout=60, maxRetryTime=120,
cacheDirectory=None,
calculateStatistics=True,
buildPyramids=False):
cls.__doc__.Obj.ValidateMethodInvocation()
grid = cls._ConstructGridForParameter(productName, parameter,
temporalResolution, username, password, timeout, maxRetryTime, cacheDirectory)
_AvisoGriddedProduct.CreateClimatologicalArcGISRasters(grid,
statistic, binType, outputWorkspace, mode, rasterNameExpressions,
binDuration, startDayOfYear, rotationOffset, spatialExtent, linearUnit,
startDate, endDate, calculateStatistics, buildPyramids)
return outputWorkspace
@classmethod
def InterpolateAtArcGISPoints(cls, username, password, productName,
parameter, temporalResolution,
points, valueField, tField,
method=u'Nearest', where=None, noDataValue=None,
timeout=60, maxRetryTime=120,
cacheDirectory=None,
orderByFields=None,
numBlocksToCacheInMemory=128, xBlockSize=16, yBlockSize=16, tBlockSize=3):
cls.__doc__.Obj.ValidateMethodInvocation()
grid = cls._ConstructGridForParameter(productName, parameter,
temporalResolution, username, password, timeout, maxRetryTime, cacheDirectory)
_AvisoGriddedProduct.InterpolateAtArcGISPoints(grid, points,
valueField, tField, method, where, noDataValue, orderByFields,
numBlocksToCacheInMemory, xBlockSize, yBlockSize, tBlockSize)
return points
@classmethod
def CreateVectorsAsArcGISFeatureClasses(cls, username, password,
productName, temporalResolution,
outputWorkspace, mode=u'add',
featureClassNameExpressions=['%(Region)s', '%(DataSeries)s',
'%(Satellites)s', '%(TemporalResolution)s', '%(Variable)s_uv_vectors', '%%Y',
'%(DataSeries)s_%(Satellites)s_uv_vectors_%%Y%%j.shp'],
scaleFactor=500.,
uniformLength=False,
rotationOffset=None,
spatialExtent=None, linearUnit=u'Degrees', startDate=None, endDate=None,
timeout=60, maxRetryTime=120,
cacheDirectory=None):
cls.__doc__.Obj.ValidateMethodInvocation()
# Create u and v component grids.
uGrid = AvisoGriddedGeostrophicCurrents(productName, u'u',
temporalResolution, username, password, timeout, maxRetryTime, cacheDirectory)
try:
vGrid = AvisoGriddedGeostrophicCurrents(productName, u'v',
temporalResolution, username, password, timeout, maxRetryTime, cacheDirectory)
try:
uGrid = cls._RotateAndClip(uGrid, rotationOffset,
spatialExtent, linearUnit, startDate, endDate)
vGrid = cls._RotateAndClip(vGrid, rotationOffset,
spatialExtent, linearUnit, startDate, endDate)
# Query for parallel lists of 2D u and v grid slices.
from GeoEco.Datasets.Virtual import GridSliceCollection
uSlices = GridSliceCollection(uGrid,
tQACoordType=u'center').QueryDatasets()
vSlices = GridSliceCollection(vGrid,
tQACoordType=u'center').QueryDatasets()
# Construct a list of
# ShapefileFromVectorComponentGrids from the slices.
from GeoEco.SpatialAnalysis.Lines import
ShapefileFromVectorComponentGrids
queryableAttributes = tuple(uGrid.GetAllQueryableAttributes()
+ [QueryableAttribute(u'DateTime', _(u'Date'), DateTimeTypeMetadata())])
vectorShapefiles = []
for i in range(len(uSlices)):
queryableAttributeValues = {}
for qa in queryableAttributes:
queryableAttributeValues[qa.Name] =
uSlices[i].GetQueryableAttributeValue(qa.Name)
queryableAttributeValues[u'Variable'] =
queryableAttributeValues[u'Variable'].split('_')[0]
vectorShapefiles.append(ShapefileFromVectorComponentGrids(uSlices[i],
vSlices[i], scaleFactor, uniformLength,
queryableAttributes=queryableAttributes,
queryableAttributeValues=queryableAttributeValues))
# Import the ShapefileFromVectorComponentGrids into
# the output workspace.
from GeoEco.Datasets.ArcGIS import ArcGISWorkspace,
ArcGISTable
workspace = ArcGISWorkspace(outputWorkspace, ArcGISTable,
pathCreationExpressions=featureClassNameExpressions, cacheTree=True,
queryableAttributes=queryableAttributes)
workspace.ImportDatasets(vectorShapefiles, mode)
# Return successfully.
return outputWorkspace
finally:
vGrid.Close()
finally:
uGrid.Close()
class AvisoGriddedWindSpeedModulus(_AvisoGriddedProduct):
__doc__ = DynamicDocString()
def __init__(self, productName, username, password, timeout=60,
maxRetryTime=120, cacheDirectory=None):
self.__doc__.Obj.ValidateMethodInvocation()
super(AvisoGriddedWindSpeedModulus,
self).__init__(AvisoGriddedWindSpeedModulus.OPeNDAPURLsForProducts[productName],
username, password, timeout=timeout, maxRetryTime=maxRetryTime,
cacheDirectory=cacheDirectory)
self._DisplayName = u'Aviso ' + productName
def _GetDisplayName(self):
return self._DisplayName
OPeNDAPURLsForProducts = {
u'Global NRT Merged MWIND':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-nrt-global-merged-mwind',
}
Products = OPeNDAPURLsForProducts.keys()
Products.sort()
@classmethod
def CreateArcGISRasters(cls, username, password, productName,
outputWorkspace, mode=u'add',
rasterNameExpressions=['%(Region)s', '%(DataSeries)s', '%(Satellites)s',
'%(TemporalResolution)s', '%(Variable)s', '%%Y',
'%(DataSeries)s_%(Satellites)s_%(Variable)s_%%Y%%j.img'], rasterCatalog=None,
rotationOffset=None, spatialExtent=None,
linearUnit=u'Degrees', startDate=None, endDate=None,
timeout=60, maxRetryTime=120, cacheDirectory=None,
calculateStatistics=True, buildPyramids=False):
cls.__doc__.Obj.ValidateMethodInvocation()
grid = AvisoGriddedWindSpeedModulus(productName, username, password,
timeout, maxRetryTime, cacheDirectory)
_AvisoGriddedProduct.CreateArcGISRasters(grid, outputWorkspace, mode,
rasterNameExpressions, rasterCatalog, rotationOffset, spatialExtent,
linearUnit, startDate, endDate, calculateStatistics, buildPyramids)
return outputWorkspace
@classmethod
def CreateClimatologicalArcGISRasters(cls, username, password,
productName,
statistic, binType,
outputWorkspace, mode=u'add',
rasterNameExpressions=['%(Region)s', '%(DataSeries)s', '%(Satellites)s',
'%(TemporalResolution)s', '%(Variable)s',
u'%(ClimatologyBinType)s_Climatology',
u'%(DataSeries)s_%(Satellites)s_%(Variable)s_%(ClimatologyBinName)s_%(Statistic)s.img'],
binDuration=1, startDayOfYear=1,
rotationOffset=None,
spatialExtent=None, linearUnit=u'Degrees', startDate=None, endDate=None,
timeout=60, maxRetryTime=120,
cacheDirectory=None,
calculateStatistics=True,
buildPyramids=False):
cls.__doc__.Obj.ValidateMethodInvocation()
grid = AvisoGriddedWindSpeedModulus(productName, username, password,
timeout, maxRetryTime, cacheDirectory)
_AvisoGriddedProduct.CreateClimatologicalArcGISRasters(grid,
statistic, binType, outputWorkspace, mode, rasterNameExpressions,
binDuration, startDayOfYear, rotationOffset, spatialExtent, linearUnit,
startDate, endDate, calculateStatistics, buildPyramids)
return outputWorkspace
@classmethod
def InterpolateAtArcGISPoints(cls, username, password, productName,
points, valueField, tField,
method=u'Nearest', where=None, noDataValue=None,
timeout=60, maxRetryTime=120,
cacheDirectory=None,
orderByFields=None,
numBlocksToCacheInMemory=128, xBlockSize=16, yBlockSize=16, tBlockSize=3):
cls.__doc__.Obj.ValidateMethodInvocation()
grid = AvisoGriddedWindSpeedModulus(productName, username, password,
timeout, maxRetryTime, cacheDirectory)
_AvisoGriddedProduct.InterpolateAtArcGISPoints(grid, points,
valueField, tField, method, where, noDataValue, orderByFields,
numBlocksToCacheInMemory, xBlockSize, yBlockSize, tBlockSize)
return points
class AvisoGriddedSignificantWaveHeight(_AvisoGriddedProduct):
__doc__ = DynamicDocString()
def __init__(self, productName, username, password, timeout=60,
maxRetryTime=120, cacheDirectory=None):
self.__doc__.Obj.ValidateMethodInvocation()
super(AvisoGriddedSignificantWaveHeight,
self).__init__(AvisoGriddedSignificantWaveHeight.OPeNDAPURLsForProducts[productName],
username, password, timeout=timeout, maxRetryTime=maxRetryTime,
cacheDirectory=cacheDirectory)
self._DisplayName = u'Aviso ' + productName
def _GetDisplayName(self):
return self._DisplayName
OPeNDAPURLsForProducts = {
u'Global NRT Merged MSWH':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-nrt-global-merged-mswh',
}
Products = OPeNDAPURLsForProducts.keys()
Products.sort()
@classmethod
def CreateArcGISRasters(cls, username, password, productName,
outputWorkspace, mode=u'add',
rasterNameExpressions=['%(Region)s', '%(DataSeries)s', '%(Satellites)s',
'%(TemporalResolution)s', '%(Variable)s', '%%Y',
'%(DataSeries)s_%(Satellites)s_%(Variable)s_%%Y%%j.img'], rasterCatalog=None,
rotationOffset=None, spatialExtent=None,
linearUnit=u'Degrees', startDate=None, endDate=None,
timeout=60, maxRetryTime=120, cacheDirectory=None,
calculateStatistics=True, buildPyramids=False):
cls.__doc__.Obj.ValidateMethodInvocation()
grid = AvisoGriddedSignificantWaveHeight(productName, username,
password, timeout, maxRetryTime, cacheDirectory)
_AvisoGriddedProduct.CreateArcGISRasters(grid, outputWorkspace, mode,
rasterNameExpressions, rasterCatalog, rotationOffset, spatialExtent,
linearUnit, startDate, endDate, calculateStatistics, buildPyramids)
return outputWorkspace
@classmethod
def CreateClimatologicalArcGISRasters(cls, username, password,
productName,
statistic, binType,
outputWorkspace, mode=u'add',
rasterNameExpressions=['%(Region)s', '%(DataSeries)s', '%(Satellites)s',
'%(TemporalResolution)s', '%(Variable)s',
u'%(ClimatologyBinType)s_Climatology',
u'%(DataSeries)s_%(Satellites)s_%(Variable)s_%(ClimatologyBinName)s_%(Statistic)s.img'],
binDuration=1, startDayOfYear=1,
rotationOffset=None,
spatialExtent=None, linearUnit=u'Degrees', startDate=None, endDate=None,
timeout=60, maxRetryTime=120,
cacheDirectory=None,
calculateStatistics=True,
buildPyramids=False):
cls.__doc__.Obj.ValidateMethodInvocation()
grid = AvisoGriddedSignificantWaveHeight(productName, username,
password, timeout, maxRetryTime, cacheDirectory)
_AvisoGriddedProduct.CreateClimatologicalArcGISRasters(grid,
statistic, binType, outputWorkspace, mode, rasterNameExpressions,
binDuration, startDayOfYear, rotationOffset, spatialExtent, linearUnit,
startDate, endDate, calculateStatistics, buildPyramids)
return outputWorkspace
@classmethod
def InterpolateAtArcGISPoints(cls, username, password, productName,
points, valueField, tField,
method=u'Nearest', where=None, noDataValue=None,
timeout=60, maxRetryTime=120,
cacheDirectory=None,
orderByFields=None,
numBlocksToCacheInMemory=128, xBlockSize=16, yBlockSize=16, tBlockSize=3):
cls.__doc__.Obj.ValidateMethodInvocation()
grid = AvisoGriddedSignificantWaveHeight(productName, username,
password, timeout, maxRetryTime, cacheDirectory)
_AvisoGriddedProduct.InterpolateAtArcGISPoints(grid, points,
valueField, tField, method, where, noDataValue, orderByFields,
numBlocksToCacheInMemory, xBlockSize, yBlockSize, tBlockSize)
return points
###############################################################################
# Metadata: module
###############################################################################
from GeoEco.ArcGIS import ArcGISDependency
from GeoEco.Datasets.ArcGIS import _UseUnscaledDataDescription,
_CalculateStatisticsDescription, _BuildRATDescription,
_BuildPyramidsDescription
from GeoEco.Dependencies import PythonAggregatedModuleDependency
from GeoEco.Metadata import *
from GeoEco.OceanographicAnalysis.Eddies import OkuboWeissEddies,
_OkuboWeissAlgorithmDescription, _OkuboWeissReferences
from GeoEco.Types import *
AddModuleMetadata(shortDescription=_(u'Altimetry-derived products from Aviso
(http://www.aviso.oceanobs.com).'))
###############################################################################
# Metadata: _AvisoGriddedProduct class
###############################################################################
AddClassMetadata(_AvisoGriddedProduct,
shortDescription=_(u'An OPeNDAPGrid for a gridded product from Aviso.'),
longDescription=_(
u"""This class is intended for private use within GeoEco and is not
intended for external callers."""))
_AvisoGriddedProduct_LongDescription = _(
u"""The `Archiving, Validation and Interpretation of Satellite Oceanographic
data (Aviso) <http://www.aviso.oceanobs.com/>`_
group publishes various products derived from satellite altimetry
data, including estimates of sea surface height (SSH), geostrophic
currents, wind speed modulus, and significant wave height. To maximize
accuracy and spatial and temporal resolution and extent, Aviso merges
observations from multiple satellites, including Topex/Poseidon,
Jason-1, Jason-2, GFO, ERS-1, ERS-2, and EnviSat. Most Aviso products
are one of these "merged" datasets, although a few products are based
on observations from a single satellite.
Aviso publishes both along-track and gridded products. This %(name)s
processes gridded products only.
For SSH and geostrophic currents, Aviso provides global products in
Mercator projection, with a nominal cell size of 1/3 degree at the
equator (about 37 km in the Mercator coordinate system) and a
latitudinal extent of about 82 S to 82 N. Aviso also publishes several
higher resolution regional products. At the time this %(name)s was
written, these included the Mediterranean Sea and the Black Sea. Both
of these are in a geographic coordinate system with a cell size of 1/8
degree.
The SSH and geostrophic currents products are available in two forms:
the Mean Absolute Dynamic Topography (MADT) and the Mean Sea Level
Anomalies (MSLA). The MADT data are the actual SSH or geostrophic
currents while the MSLA data are anomalies, i.e. the differences from
a multi-year mean of SSH or currents.
For wind speed modulus and significant wave height, Aviso publishes
global products in a geographic coordinate system with a cell size of
1 degree and a latitudinal extent of 90 S to 90 N.
All products appear to be based on a spherical model of the Earth,
although the Aviso documentation is not clear about this. At the time
this %(name)s was written, chapter 2.1.7.2. of the the SSALTO/DUACS
User Handbook, titled Maps Projection, presented equations that
implied a sphere. This %(name)s assumes a sphere with a radius of
6371000 m.
Aviso publishes two parallel collections of products, the Near Real
Time (NRT) products and the Delayed Time (DT) products. The NRT
products are intended for users who need quick access to recent
observations. They have a time step of 1 day and are updated on a
continual basis. Aviso typically archives only the most recent year or
two of NRT data.
At the time this %(name)s was written, Aviso made the NRT products
available via two mechanisms: OPenDAP and netCDF files via FTP. The
OPeNDAP products lag the FTP products by 30 days. This %(name)s uses
OPeNDAP, so it can only access data that is at least 30 days old. If
you need access to more recent data, you can download NRT files from
the Aviso FTP server and use other MGET tools to work with them.
The DT products are intended for users who need a long term, more
accurate time series. The DT products incorporate more error
corrections and other processing steps that improve accuracy. They are
updated only every year or so but extend back to 1992. When they are
updated, the entire time series is often reprocessed with improved
algorithms.
Starting in January 2012, the DT products are available at a time step
of 7 days (weekly) or 1 day (daily). You may specify which temporal
resolution you prefer. Note that, unlike many other oceanographic
datasets, the weekly images are not created by aggregating the daily
products together (they are not produced taking mean of seven daily
images, for example). They are just a sparse selection of the daily
images: every seventh daily image exactly matches a weekly image,
pixel for pixel. Please see the Aviso documentation for more
information.
The DT products are subdivided into two parallel collections: the
"reference" products (DT-Ref) and the "updated" products (DT-Upd). The
DT-Ref products are based on a smaller number of satellites but are
designed to provide a consistent level of accuracy throughout the
entire time range of the data. The DT-Upd products are based on more
satellites and have variable accuracy depending on how many satellites
were used on a given date. In general, the DT-Upd products are more
accurate later in the time range, as more satellites were available.
Please consult the SSALTO/DUACS User Handbook for more information on
the Aviso products.
**References**
The
`SSALTO/DUACS User Handbook: (M)SLA and (M)ADT Near-Real Time and Delayed
Time Products
<http://www.aviso.oceanobs.com/fileadmin/documents/data/tools/hdbk_duacs.pdf>`_
provides detailed documentation on the Aviso products and an extensive
bibliography.
Please see
`these instructions
<http://www.aviso.oceanobs.com/en/data/tools/citation/index.html>`_
on how to cite Aviso products in your publications.""")
###############################################################################
# Metadata: AvisoGriddedSSH class
###############################################################################
AddClassMetadata(AvisoGriddedSSH,
shortDescription=_(u'An OPeNDAPGrid for a gridded SSH product from
Aviso.'),
longDescription=_AvisoGriddedProduct_LongDescription % {u'name': 'class'})
# Constructor
AddMethodMetadata(AvisoGriddedSSH.__init__,
shortDescription=_(u'Constructs a new AvisoGriddedSSH instance.'),
isExposedToPythonCallers=True,
dependencies=[PythonAggregatedModuleDependency('numpy')])
AddArgumentMetadata(AvisoGriddedSSH.__init__, u'self',
typeMetadata=ClassInstanceTypeMetadata(cls=AvisoGriddedSSH),
description=_(u'AvisoGriddedSSH instance.'))
AddArgumentMetadata(AvisoGriddedSSH.__init__, u'productName',
typeMetadata=UnicodeStringTypeMetadata(allowedValues=AvisoGriddedSSH.Products),
description=_(
u"""Aviso product to use. Please see
http://www.aviso.oceanobs.com/en/data/ for descriptions of the
products.
At the time of this writing, this tool supported all of the products
that Aviso made available for download over OPeNDAP. If you find that
Aviso publishes a new product that is not supported by this tool,
please contact the author of this tool to have support for it added.
Aviso does not make all of its products available over OPeNDAP. If the
product you need is not available, you can download the netCDF files
and use MGET's conversion utilities to create ArcGIS rasters from
them.
The product name that you must pass for this parameter is case
sensitive. If you invoke this tool programmatically, be sure to
specify the product name using the proper case."""),
arcGISDisplayName=_(u'Aviso sea surface height product'))
AddArgumentMetadata(AvisoGriddedSSH.__init__, u'temporalResolution',
typeMetadata=UnicodeStringTypeMetadata(allowedValues=[u'Daily',
u'Weekly'], makeLowercase=True),
description=_(
u"""Temporal resolution to use, either daily or weekly.
As of January 2012, Aviso provides most Delayed Time (DT) products in
both resolutions. Aviso provides Near Real Time (NRT) products only in
daily resolution. To access an NRT product with this tool, you must
select daily resolution.
Note that, unlike many other oceanographic datasets, the weekly images
are not created by aggregating the daily products together (they are
not produced taking mean of seven daily images, for example). They are
just a sparse selection of the daily images: every seventh daily image
exactly matches a weekly image, pixel for pixel. Please see the Aviso
documentation for more information."""),
arcGISDisplayName=_(u'Temporal resolution'))
AddArgumentMetadata(AvisoGriddedSSH.__init__, u'username',
typeMetadata=UnicodeStringTypeMetadata(),
description=_(
u"""Your Aviso username.
To access Aviso datasets with OPeNDAP, you must first obtain a
username and password from Aviso. Please see
http://www.aviso.oceanobs.com/en/data/ for instructions on obtaining a
username and password.
Starting August 2010, Aviso allowed temporary access to the general
public with the username "aviso-users" and the password "grid2010". If
you do not have a username and password yet, you can try those ones.
Aviso explained that those credentials would only work for a limited
time. If they do not work for you, please contact Aviso to obtain your
own unique username and password."""),
arcGISDisplayName=_(u'Aviso username'))
AddArgumentMetadata(AvisoGriddedSSH.__init__, u'password',
typeMetadata=UnicodeStringTypeMetadata(),
description=_(
u"""Your Aviso password.
Please see the documentation for the Aviso Username parameter above
for more information about the username and password parameters."""),
arcGISDisplayName=_(u'Aviso password'))
CopyArgumentMetadata(THREDDSCatalog.__init__, u'timeout',
AvisoGriddedSSH.__init__, u'timeout')
CopyArgumentMetadata(THREDDSCatalog.__init__, u'maxRetryTime',
AvisoGriddedSSH.__init__, u'maxRetryTime')
CopyArgumentMetadata(THREDDSCatalog.__init__, u'cacheDirectory',
AvisoGriddedSSH.__init__, u'cacheDirectory')
AddResultMetadata(AvisoGriddedSSH.__init__, u'grid',
typeMetadata=ClassInstanceTypeMetadata(cls=AvisoGriddedSSH),
description=_(u'AvisoGriddedSSH instance.'))
# Public method: AvisoGriddedSSH.CreateArcGISRasters
AddMethodMetadata(AvisoGriddedSSH.CreateArcGISRasters,
shortDescription=_(u'Creates rasters for an Aviso gridded sea surface
height product.'),
longDescription=_AvisoGriddedProduct_LongDescription % {u'name': 'tool'},
isExposedToPythonCallers=True,
isExposedByCOM=True,
isExposedAsArcGISTool=True,
arcGISDisplayName=_(u'Create Rasters for Aviso SSH Product'),
arcGISToolCategory=_(u'Data Products\\Aviso\\Sea Surface Height
Products'),
dependencies=[ArcGISDependency(9, 1),
PythonAggregatedModuleDependency('numpy')])
AddArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'cls',
typeMetadata=ClassOrClassInstanceTypeMetadata(cls=AvisoGriddedSSH),
description=_(u'AvisoGriddedSSH class or instance.'))
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'username',
AvisoGriddedSSH.CreateArcGISRasters, u'username')
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'password',
AvisoGriddedSSH.CreateArcGISRasters, u'password')
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'productName',
AvisoGriddedSSH.CreateArcGISRasters, u'productName')
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'temporalResolution',
AvisoGriddedSSH.CreateArcGISRasters, u'temporalResolution')
AddArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'outputWorkspace',
typeMetadata=ArcGISWorkspaceTypeMetadata(createParentDirectories=True),
description=_(
u"""Directory or geodatabase to receive the rasters.
Unless you have a specific reason to store the rasters in a
geodatabase, we recommend you store them in a directory because it
will be much faster and allows the rasters to be organized in a tree.
If you do store the rasters in a geodatabase, you must change the
Raster Name Expressions parameter; see below for more
information."""),
arcGISDisplayName=_(u'Output workspace'))
AddArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'mode',
typeMetadata=UnicodeStringTypeMetadata(allowedValues=[u'Add',
u'Replace'], makeLowercase=True),
description=_(
u"""Overwrite mode, one of:
* Add - create rasters that do not exist and skip those that already
exist. This is the default.
* Replace - create rasters that do not exist and overwrite those that
already exist.
The ArcGIS Overwrite Outputs geoprocessing setting has no effect on
this tool. If 'Replace' is selected the rasters will be overwritten,
regardless of the ArcGIS Overwrite Outputs setting."""),
arcGISDisplayName=_(u'Overwrite mode'))
AddArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters,
u'rasterNameExpressions',
typeMetadata=ListTypeMetadata(elementType=UnicodeStringTypeMetadata(),
minLength=1),
description=_(
u"""List of expressions specifying how the output rasters should be
named.
The default expression assumes you are storing rasters in a file
system directory and creates them in a tree structure with levels for
the region, data series, satellite, variable name, and year. When
storing rasters in a directory, the final expression specifies the
file name of the raster and any preceding expressions specify
subdirectories. The extension of the final expression determines the
output raster format: .asc for ArcInfo ASCII Grid, .bmp for BMP, .gif
for GIF, .img for an ERDAS IMAGINE file, .jpg for JPEG, .jp2 for JPEG
2000, .png for PNG, .tif for GeoTIFF, or no extension for ArcInfo
Binary Grid. The default expression uses .img.
When storing rasters in a geodatabase, you should provide only one
expression. That expression specifies the raster's name.
Each expression may contain any sequence of characters permitted by
the output workspace. Each expression may optionally contain one or
more of the following case-sensitive codes. The tool replaces the
codes with appropriate values when creating each raster:
* %(Region)s - Region of the output raster, either "global",
"medsea", or "blacksea".
* %(DataSeries)s - Aviso data series of the output raster, either
"dt_ref", "dt_upd", or "nrt".
* %(Satellites)s - Satellites used to produce the raster, either
"merged" for multiple satellites or "tpj1" for the Topex/Poseidon /
Jason-1 sequential pair. Please see the Aviso documentation for more
information on how Aviso products are created.
* %(TemporalResolution)s - Temporal resolution of the output raster,
either "daily" or "weekly".
* %(Variable)s - Aviso variable represented in the output raster. With
the exception of the wind speed modulus ("mwind") and significant
wave height ("mswh") products, the variable name indicates whether
the data are absolute values (Mean Absolute Dynamic Topography, or
MADT) or anomalies (Mean Sea Level Anomalies, or MSLA), as well as
what geophysical variable is represented (h for sea surface height,
u for eastward geostrophic water velocity, v for northward
geostrophic water velocity, and err for formal mapping error). For
example, the variable name "msla_h" represents sea surface height
anomalies.
* %%Y - four-digit year of the raster.
* %%m - two-digit month of the raster.
* %%d - two-digit day of the month of the raster.
* %%j - three-digit day of the year of the raster.
"""),
arcGISDisplayName=_(u'Raster name expressions'))
AddArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'rasterCatalog',
typeMetadata=ArcGISRasterCatalogTypeMetadata(canBeNone=True,
mustBeDifferentThanArguments=[u'outputWorkspace'],
createParentDirectories=True),
description=_(
u"""Raster catalog to create.
This parameter requires ArcGIS 9.3 or later.
If this parameter is specified, after the tool finishes creating
rasters, it will create an unmanaged raster catalog and import all of
the rasters in the output workspace into it. The catalog will have
fields for all of the codes specified in the Raster Name Expressions
as well as fields for the start date, center date, and end date of
each raster. You can then use the catalog to create animations using
the ArcGIS 10 Time Slider.
WARNING: The raster catalog will be deleted and re-created each time
the tool is executed. Beware of this if you plan to add your own
fields to the catalog after it has been created."""),
direction=u'Output',
arcGISDisplayName=_(u'Output raster catalog'),
dependencies=[ArcGISDependency(9, 3)])
AddArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'rotationOffset',
typeMetadata=FloatTypeMetadata(canBeNone=True),
description=_(
u"""Distance to rotate the outputs about the polar axis, in the units
specified by the Linear Units parameter. If not provided, the outputs
will be centered on the meridian 179.83333333333333 (in the Pacific
ocean). This value was chosen by Aviso.
Use this parameter to shift the center longitude of the outputs to a
different location. Positive values shift it to the east, negative
values to the west. For example, to center the outputs on the Prime
Meridian, provide -180 for this parameter and set the Linear Units
parameter to Degrees.
The outputs can only be rotated in whole cells of the Aviso grids. The
value you provide will be rounded off to the closest cell. Because of
that, and because Aviso centered their images on meridian
179.83333333333333, it is not possible to center the images exactly on
the Prime Meridian."""),
arcGISDisplayName=_(u'Rotate by'),
arcGISCategory=_(u'Spatiotemporal extent'))
AddArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'spatialExtent',
typeMetadata=EnvelopeTypeMetadata(canBeNone=True),
description=_(
u"""Spatial extent of the outputs, in the units specified by the
Linear Units parameter.
This parameter is applied after the rotation parameter and uses
coordinates that result after rotation.
The outputs can only be clipped in whole grid cells. The values you
provide will be rounded off to the closest cell."""),
arcGISDisplayName=_(u'Spatial extent'),
arcGISCategory=_(u'Spatiotemporal extent'))
AddArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'linearUnit',
typeMetadata=UnicodeStringTypeMetadata(allowedValues=[u'Degrees',
u'Meters'], makeLowercase=True),
description=_(
u"""Specifies the unit of the Spatial Extent parameter, one of:
* Degrees - Decimal degrees.
* Meters - Meters, in the Aviso Mercator coordinate system. This
option is only valid for Aviso products that use that coordinate
system.
"""),
arcGISDisplayName=_(u'Linear unit'),
arcGISCategory=_(u'Spatiotemporal extent'))
AddArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'startDate',
typeMetadata=DateTimeTypeMetadata(canBeNone=True),
description=_(
u"""Start date for the outputs to create.
Outputs will be created for images that occur on or after the start
date and on or before the end date. If you do not provide a start
date, the date of the first available image will be used. For Delayed
Time (DT) products, it will ususally be 14 October 1992. For Near Real
Time (NRT) products, it will usually be much closer to the current
date.
The time component of the start date is ignored."""),
arcGISDisplayName=_(u'Start date'),
arcGISCategory=_(u'Spatiotemporal extent'))
AddArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'endDate',
typeMetadata=DateTimeTypeMetadata(canBeNone=True),
description=_(
u"""End date for the outputs to create.
Outputs will be created for images that occur on or after the start
date and on or before the end date. If you do not specify an end date,
the date of the most recent image will be used. For Delayed Time (DT)
products, this may be as much as a year or two old, depending on when
Aviso last reprocessed the product. For Near Real Time (NRT) products,
it will usually be 30 days before the current date.
The time component of the end date is ignored."""),
arcGISDisplayName=_(u'End date'),
arcGISCategory=_(u'Spatiotemporal extent'))
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'timeout',
AvisoGriddedSSH.CreateArcGISRasters, u'timeout')
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'maxRetryTime',
AvisoGriddedSSH.CreateArcGISRasters, u'maxRetryTime')
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'cacheDirectory',
AvisoGriddedSSH.CreateArcGISRasters, u'cacheDirectory')
AddArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters,
u'calculateStatistics',
typeMetadata=BooleanTypeMetadata(),
description=_CalculateStatisticsDescription,
arcGISDisplayName=_(u'Calculate statistics'),
arcGISCategory=_(u'Additional raster processing options'))
AddArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'buildPyramids',
typeMetadata=BooleanTypeMetadata(),
description=_BuildPyramidsDescription,
arcGISDisplayName=_(u'Build pyramids'),
arcGISCategory=_(u'Additional raster processing options'))
AddResultMetadata(AvisoGriddedSSH.CreateArcGISRasters,
u'updatedOutputWorkspace',
typeMetadata=ArcGISWorkspaceTypeMetadata(),
description=_(u'Updated output workspace.'),
arcGISDisplayName=_(u'Updated output workspace'),
arcGISParameterDependencies=[u'outputWorkspace'])
# Public method: AvisoGriddedSSH.CreateClimatologicalArcGISRasters
AddMethodMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
shortDescription=_(u'Creates climatological rasters for an Aviso gridded
sea surface height product.'),
longDescription=_(
u"""This tool produces rasters showing the climatological average
value (or other statistic) of an Aviso product. Given a desired
product, a statistic, and a climatological bin definition, this tool
efficiently downloads the product's images using the `OPeNDAP
<http://opendap.org/>`_ protocol, classifies them into bins, and
produces a single raster for each bin. Each cell of the raster is
produced by calculating the statistic on the values of that cell
extracted from all of the rasters in the bin.
""") + _AvisoGriddedProduct_LongDescription % {u'name': 'tool'},
isExposedToPythonCallers=True,
isExposedByCOM=True,
isExposedAsArcGISTool=True,
arcGISDisplayName=_(u'Create Climatological Rasters for Aviso SSH
Product'),
arcGISToolCategory=_(u'Data Products\\Aviso\\Sea Surface Height
Products'),
dependencies=[ArcGISDependency(9, 1),
PythonAggregatedModuleDependency('numpy')])
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'cls',
AvisoGriddedSSH.CreateClimatologicalArcGISRasters, u'cls')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'username',
AvisoGriddedSSH.CreateClimatologicalArcGISRasters, u'username')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'password',
AvisoGriddedSSH.CreateClimatologicalArcGISRasters, u'password')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'productName',
AvisoGriddedSSH.CreateClimatologicalArcGISRasters, u'productName')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters,
u'temporalResolution', AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'temporalResolution')
AddArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'statistic',
typeMetadata=UnicodeStringTypeMetadata(allowedValues=[u'Count',
u'Maximum', u'Mean', u'Minimum', u'Range', u'Standard Deviation', u'Sum'],
makeLowercase=True),
description=_(
u"""Statistic to calculate for each cell, one of:
* Count - number of images in which the cell had data.
* Maximum - maximum value for the cell.
* Mean - mean value for the cell, calculated as the sum divided by the
count.
* Minimum - minimum value for the cell.
* Range - range for the cell, calculated as the maximum minus the
minimum.
* Standard Deviation - sample standard deviation for the cell
(i.e. the standard deviation estimated using Bessel's correction).
In order to calculate this, there must be at least two images with
data for the cell.
* Sum - the sum for the cell.
"""),
arcGISDisplayName=_(u'Statistic'))
AddArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'binType',
typeMetadata=UnicodeStringTypeMetadata(allowedValues=[u'Daily',
u'Monthly', u'Cumulative'], makeLowercase=True),
description=_(
u"""Climatology bins to use, one of:
* Daily - daily bins. Images will be classified into bins according to
their days of the year. The number of days in each bin is determined
by the Climatology Bin Duration parameter (which defaults to 1). The
number of bins is calculated by dividing 365 by the bin duration. If
there is no remainder, then that number of bins will be created;
images for the 366th day of leap years will be counted in the bin
that includes day 365. For example, if the bin duration is 5, 73
bins will be created. The first will be for days 1-5, the second
will be for days 5-10, and so on; the 73rd bin will be for days
361-365 during normal years and 361-366 during leap years. If
dividing 365 by the bin duration does yield a remainder, then one
additional bin will be created to hold the remaining days. For
example, if the bin duration is 8, 46 bins will be created. The
first will be for days 1-8, the second for days 9-16, and so on; the
46th will be for days 361-365 during normal years and 361-366 during
leap years.
* Monthly - monthly bins. Images will be classified into bins according to
their months of the year. The number of months in each bin is
determined by the Climatology Bin Duration parameter (which defaults
to 1). The number of bins is calculated by dividing 12 by the bin
duration. If there is no remainder, then that number of bins will be
created. For example, if the bin duration is 3, there will be four
bins: January-March, April-June, July-September, and
October-December. If there is a remainder, then one additional bin
will be created. For example, if the bin duration is 5, 3 bins will
be created: January-May, June-October, November-December.
* Cumulative - one bin. A single climatology raster will be calculated
from the entire dataset. The Bin Duration parameter is ignored.
For Daily and Monthly, to adjust when the bins start (e.g. to center a
4-bin seasonal climatology on solstices and equinoxes), use the Start
Climatology At This Day Of The Year parameter."""),
arcGISDisplayName=_(u'Climatology bin type'))
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'outputWorkspace',
AvisoGriddedSSH.CreateClimatologicalArcGISRasters, u'outputWorkspace')
AddArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'mode',
typeMetadata=UnicodeStringTypeMetadata(allowedValues=[u'Add',
u'Replace'], makeLowercase=True),
description=_(
u"""Overwrite mode, one of:
* Add - create rasters that do not exist and skip those that already
exist. This is the default.
* Replace - create rasters that do not exist and overwrite those that
already exist. Choose this option when you want to regenerate the
climatologies using the latest satellite images.
The ArcGIS Overwrite Outputs geoprocessing setting has no effect on
this tool. If 'Replace' is selected the rasters will be overwritten,
regardless of the ArcGIS Overwrite Outputs setting."""),
arcGISDisplayName=_(u'Overwrite mode'))
AddArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'rasterNameExpressions',
typeMetadata=ListTypeMetadata(elementType=UnicodeStringTypeMetadata(),
minLength=1),
description=_(
u"""List of expressions specifying how the output rasters should be
named.
The default expression assumes you are storing rasters in a file
system directory and creates them in a tree structure with levels for
the region, data series, satellite, variable name, and climatology
type. When storing rasters in a directory, the final expression
specifies the file name of the raster and any preceding expressions
specify subdirectories. The extension of the final expression
determines the output raster format: .asc for ArcInfo ASCII Grid, .bmp
for BMP, .gif for GIF, .img for an ERDAS IMAGINE file, .jpg for JPEG,
.jp2 for JPEG 2000, .png for PNG, .tif for GeoTIFF, or no extension
for ArcInfo Binary Grid. The default expression uses .img.
When storing rasters in a geodatabase, you should provide only one
expression. That expression specifies the raster's name.
Each expression may contain any sequence of characters permitted by
the output workspace. Each expression may optionally contain one or
more of the following case-sensitive codes. The tool replaces the
codes with appropriate values when creating each raster:
* %(Region)s - Region of the output raster, either "global",
"medsea", or "blacksea".
* %(DataSeries)s - Aviso data series of the output raster, either
"dt_ref", "dt_upd", or "nrt".
* %(Satellites)s - Satellites used to produce the raster, either
"merged" for multiple satellites or "tpj1" for the Topex/Poseidon /
Jason-1 sequential pair. Please see the Aviso documentation for more
information on how Aviso products are created.
* %(TemporalResolution)s - Temporal resolution of the images used to
produce the raster, either "daily" or "weekly".
* %(Variable)s - Aviso variable represented in the output raster. With
the exception of the wind speed modulus ("mwind") and significant
wave height ("mswh") products, the variable name indicates whether
the data are absolute values (Mean Absolute Dynamic Topography, or
MADT) or anomalies (Mean Sea Level Anomalies, or MSLA), as well as
what geophysical variable is represented (h for sea surface height,
u for eastward geostrophic water velocity, v for northward
geostrophic water velocity, and err for formal mapping error). For
example, the variable name "msla_h" represents sea surface height
anomalies.
* %(ClimatologyBinType)s - type of the climatology bin, either "Daily"
if 1-day bins, "Xday" if multi-day bins (X is replaced by the
duration), "Monthly" if 1-month bins, "Xmonth" if multi-month bins,
or "Cumulative".
* %(ClimatologyBinName)s - name of the climatology bin corresponding
represented by the output raster, either "dayXXX" for 1-day bins
(XXX is replaced by the day of the year), "daysXXXtoYYY" for
multi-day bins (XXX is replaced by the first day of the bin, YYY is
replaced by the last day), "monthXX" for 1-month bins (XX is
replaced by the month), "monthXXtoYY" (XX is replaced by the first
month of the bin, YY by the last month), or "cumulative".
* %(Statistic)s - statistic that was calculated, in lowercase and with
spaces replaced by underscores; one of: "count", "maximum", "mean",
"minimum", "range", "standard_deviation", "sum".
If the Bin Type is "Daily", the following additional codes are
available:
* %(FirstDay)i - first day of the year of the climatology bin
represented by the output raster.
* %(LastDay)i - last day of the year of the climatology bin
represented by the output raster. For 1-day climatologies, this will
be the same as %(FirstDay)i.
If the Bin Type is "Monthly", the following additional codes are
available:
* %(FirstMonth)i - first month of the climatology bin represented by
the output raster.
* %(DayOfFirstMonth)i - first day of the first month of the
climatology bin represented by the output raster.
* %(LastMonth)i - last month of the climatology bin represented by
the output raster.
* %(DayOfLastMonth)i - last day of the last month of the climatology
bin represented by the output raster.
Note that the additional codes are integers and may be formatted using
"printf"-style formatting codes. For example, to format the FirstDay
as a three-digit number with leading zeros::
%(FirstDay)03i
"""),
arcGISDisplayName=_(u'Raster name expressions'))
AddArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'binDuration',
typeMetadata=IntegerTypeMetadata(minValue=1),
description=_(
u"""Duration of each bin, in days or months, when the Bin Type is
Daily or Monthly, respectively. The default is 1. See the Bin Type
parameter for more information."""),
arcGISDisplayName=_(u'Climatology bin duration'),
arcGISCategory=_(u'Climatology options'))
AddArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'startDayOfYear',
typeMetadata=IntegerTypeMetadata(minValue=1, maxValue=365),
description=_(
u"""Use this parameter to create bin defintions that deviate from the
traditional calendar. The interpretation of this parameter depends on
the Bin Type:
* Daily - this parameter defines the day of the year of the first
climatology bin. For example, if this parameter is 100 and the Bin
Duration is 10, the first bin will be numbered 100-109. The bin
spanning the end of the year will be numbered 360-004. The last bin
will be numbered 095-099. To define a four-bin climatology with bins
that are centered approximately on the equinoxes and solstices
(i.e., a seasonal climatology), set the Bin Duration to 91 and the
start day to 36 (February 5). This will produce bins with dates
036-126, 127-217, 218-308, and 309-035.
* Monthly - this parameter defines the day of the year of the first
climatology bin, and the day of the month of that bin will be used
as the first day of the month of all of the bins. For example, if
this parameter is 46, which is February 15, and the Bin Duration is
1, then the bins will be February 15 - March 14, March 15 - April
14, April 15 - May 14, and so on. Calculations involving this
parameter always assume a 365 day year (a non-leap year). To define
a four-bin climatology using the months traditionally associated
with spring, summer, fall, and winter in many northern hemisphere
cultures, set the Bin Duration to 3 and the start day to 60 (March
1). This will produce bins with months 03-05, 06-08, 09-11, and
12-02.
* Cumulative - this parameter is ignored.
"""),
arcGISDisplayName=_(u'Start climatology at this day of the year'),
arcGISCategory=_(u'Climatology options'))
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'rotationOffset',
AvisoGriddedSSH.CreateClimatologicalArcGISRasters, u'rotationOffset')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'spatialExtent',
AvisoGriddedSSH.CreateClimatologicalArcGISRasters, u'spatialExtent')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'linearUnit',
AvisoGriddedSSH.CreateClimatologicalArcGISRasters, u'linearUnit')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'startDate',
AvisoGriddedSSH.CreateClimatologicalArcGISRasters, u'startDate')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'endDate',
AvisoGriddedSSH.CreateClimatologicalArcGISRasters, u'endDate')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'timeout',
AvisoGriddedSSH.CreateClimatologicalArcGISRasters, u'timeout')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'maxRetryTime',
AvisoGriddedSSH.CreateClimatologicalArcGISRasters, u'maxRetryTime')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'cacheDirectory',
AvisoGriddedSSH.CreateClimatologicalArcGISRasters, u'cacheDirectory')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters,
u'calculateStatistics', AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'calculateStatistics')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'buildPyramids',
AvisoGriddedSSH.CreateClimatologicalArcGISRasters, u'buildPyramids')
CopyResultMetadata(AvisoGriddedSSH.CreateArcGISRasters,
u'updatedOutputWorkspace', AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'updatedOutputWorkspace')
# Public method: AvisoGriddedSSH.InterpolateAtArcGISPoints
AddMethodMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
shortDescription=_(u'Interpolates the values of an Aviso gridded sea
surface height product at points.'),
longDescription=_(
u"""This tool performs the same basic operation as the ArcGIS Spatial
Analyst's Extract Values to Points tool, but it reads data directly
from Aviso's servers using the `OPeNDAP <http://opendap.org/>`_
protocol, rather than reading rasters stored on your machine.
""") + _AvisoGriddedProduct_LongDescription % {u'name': 'tool'},
isExposedToPythonCallers=True,
isExposedByCOM=True,
isExposedAsArcGISTool=True,
arcGISDisplayName=_(u'Interpolate Aviso SSH Product at Points'),
arcGISToolCategory=_(u'Data Products\\Aviso\\Sea Surface Height
Products'),
dependencies=[ArcGISDependency(9, 1),
PythonAggregatedModuleDependency('numpy')])
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'cls',
AvisoGriddedSSH.InterpolateAtArcGISPoints, u'cls')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'username',
AvisoGriddedSSH.InterpolateAtArcGISPoints, u'username')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'password',
AvisoGriddedSSH.InterpolateAtArcGISPoints, u'password')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'productName',
AvisoGriddedSSH.InterpolateAtArcGISPoints, u'productName')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters,
u'temporalResolution', AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'temporalResolution')
AddArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'points',
typeMetadata=ArcGISFeatureLayerTypeMetadata(mustExist=True,
allowedShapeTypes=[u'Point']),
description=_(
u"""Points at which values should be interpolated.
The Aviso products use either a Mercator or a geographic coordinate
system, depending on the product. Both are based on a spherical model
of the Earth a with radius of 6371000 m. It is recommended but not
required that the points use the same coordinate system. If they do
not, this tool will attempt to project the points to the Aviso
coordinate system prior to doing the interpolation. This may fail if a
datum transformation is required, in which case you will have to
manually project the points to the Aviso coordinate system before
using this tool."""),
arcGISDisplayName=_(u'Point features'))
AddArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'valueField',
typeMetadata=ArcGISFieldTypeMetadata(mustExist=True,
allowedFieldTypes=[u'short', u'long', u'float', u'double']),
description=_(
u"""Field of the points to receive the interpolated values.
The field must have a floating-point or integer data type. If the
field cannot represent the interpolated value at full precision, the
closest approximation will be stored and a warning will be issued.
This will happen, for example, when you interpolate values into an
integer field."""),
arcGISDisplayName=_(u'Field to receive the interpolated values'),
arcGISParameterDependencies=[u'points'])
AddArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'tField',
typeMetadata=ArcGISFieldTypeMetadata(mustExist=True,
allowedFieldTypes=[u'date']),
description=_(
u"""Field of the points that specifies the date and time of the point.
The field must have a date or datetime data type. If the field can
only represent dates with no time component, the time will assumed to
be 00:00:00.
The Aviso products use the UTC time zone, and it is assumed that the
points do as well."""),
arcGISDisplayName=_(u'Date field'),
arcGISParameterDependencies=[u'points'])
AddArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'method',
typeMetadata=UnicodeStringTypeMetadata(allowedValues=[u'Nearest',
u'Linear'], makeLowercase=True),
description=_(
u"""Interpolation method to use, one of:
* Nearest - nearest neighbor interpolation. The interpolated value
will simply be the value of the cell that contains the point. This
is the default.
* Linear - linear interpolation (also known as trilinear
interpolation). This method averages the values of the eight nearest
cells in the x, y, and time dimensions, weighting the contribution
of each cell by the area of it that would be covered by a
hypothetical cell centered on the point being interpolated. If the
cell containing the point contains NoData, the result is NoData. If
any of the other seven cells contain NoData, they are omitted from
the average, and the result is based on the weighted average of the
cells that do contain data. This is the same algorithm implemented
by the ArcGIS Spatial Analyst's Extract Values to Points tool.
"""),
arcGISDisplayName=_(u'Interpolation method'))
AddArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'where',
typeMetadata=SQLWhereClauseTypeMetadata(canBeNone=True),
description=_(
u"""SQL WHERE clause expression that specifies the subset of points to
use. If this parameter is not provided, all of the points will be
used.
The exact syntax of this expression depends on the type of feature
class you're using. ESRI recommends you reference fields using the
following syntax:
* For shapefiles, ArcInfo coverages, or feature classes stored in file
geodatabases, ArcSDE geodatabases, or ArcIMS, enclose field names in
double quotes: "MY_FIELD"
* For feature classes stored in personal geodatabases, enclose field
names in square brackets: [MY_FIELD].
"""),
arcGISDisplayName=_(u'Where clause'),
arcGISCategory=_(u'Interpolation options'),
arcGISParameterDependencies=[u'points'])
AddArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'noDataValue',
typeMetadata=FloatTypeMetadata(canBeNone=True),
description=_(
u"""Value to use when the interpolated value is NoData.
If a value is not provided for this parameter, a database NULL value
will be stored in the field when the interpolated value is NoData. If
the field cannot store NULL values, as is the case with shapefiles,
the value -9999 will be used."""),
arcGISDisplayName=_(u'Value to use when the interpolated value is
NoData'),
arcGISCategory=_(u'Interpolation options'))
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'timeout',
AvisoGriddedSSH.InterpolateAtArcGISPoints, u'timeout')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'maxRetryTime',
AvisoGriddedSSH.InterpolateAtArcGISPoints, u'maxRetryTime')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'cacheDirectory',
AvisoGriddedSSH.InterpolateAtArcGISPoints, u'cacheDirectory')
AddArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'orderByFields',
typeMetadata=ListTypeMetadata(elementType=ArcGISFieldTypeMetadata(mustExist=True),
minLength=1, canBeNone=True),
description=_(
u"""Fields for defining the order in which the points are processed.
The points may be processed faster if they are ordered
spatiotemporally, such that points that are close in space and time
are processed sequentially. Ordering the points this way increases the
probability that the value of a given point can be interpolated from
data that is cached in memory, rather than from data that must be read
from the disk or network, which is much slower. Choose fields that
faciliate this. For example, if your points represent the locations of
animals tracked by satellite telemetry, order the processing first by
the animal ID and then by the transmission date or number.
If you omit this parameter, the Date Field will be used automatically.
This parameter requires ArcGIS 9.2 or later."""),
arcGISDisplayName=_(u'Order by fields'),
arcGISCategory=_(u'Performance tuning options'),
arcGISParameterDependencies=[u'points'],
dependencies=[ArcGISDependency(9, 2)])
AddArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'numBlocksToCacheInMemory',
typeMetadata=IntegerTypeMetadata(minValue=0, canBeNone=True),
description=_(
u"""Maximum number of blocks of Aviso data to cache in memory.
To minimize the number of times that the disk or network must be
accessed, this tool employs a simple caching strategy, in addition to
disk caching described by the Cache Directory parameter. When it
processes the first point, it reads a square block of cells centered
on that point and caches it in memory. When it processes the second
and subsequent points, it first checks whether the cells needed for
that point are contained by the block cached in memory. If so, it
processes that point using the in-memory block, rather than reading
from disk or the network again. If not, it reads another square block
centered on that point and adds it to the cache.
The tool processes the remaining points, adding additional blocks to
the cache, as needed. To prevent the cache from exhausing all memory,
it is only permitted to grow to the size specified by this parameter.
When the cache is full but a new block is needed, the oldest block is
discarded to make room for the newest block.
The maximum size of the cache in bytes may be calculated by
multiplying 4 by the number of blocks and by the block sizes. For
example, if there are 128 blocks with size x=32 by y=32 by t=2, the
maximum size of the cache is 1048576 bytes (1 MB).
If this parameter is 0, no blocks will be cached in memory."""),
arcGISDisplayName=_(u'Number of blocks of data to cache in memory'),
arcGISCategory=_(u'Performance tuning options'))
AddArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'xBlockSize',
typeMetadata=IntegerTypeMetadata(minValue=0, canBeNone=True),
description=_(
u"""Size of the blocks of Aviso data to cache in memory, in the x
direction (longitude). The size is given as the number of cells.
If this parameter is 0, no blocks will be cached in memory."""),
arcGISDisplayName=_(u'In-memory cache block size, in X direction'),
arcGISCategory=_(u'Performance tuning options'))
AddArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'yBlockSize',
typeMetadata=IntegerTypeMetadata(minValue=0, canBeNone=True),
description=_(
u"""Size of the blocks of Aviso data to cache in memory, in the y
direction (latitude). The size is given as the number of cells.
If this parameter is 0, no blocks will be cached in memory."""),
arcGISDisplayName=_(u'In-memory cache block size, in Y direction'),
arcGISCategory=_(u'Performance tuning options'))
AddArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'tBlockSize',
typeMetadata=IntegerTypeMetadata(minValue=0, canBeNone=True),
description=_(
u"""Size of the blocks of Aviso data to cache in memory, in the t
direction (time). The size is given as the number of cells.
If this parameter is 0, no blocks will be cached in memory."""),
arcGISDisplayName=_(u'In-memory cache block size, in T direction'),
arcGISCategory=_(u'Performance tuning options'))
AddResultMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'updatedPoints',
typeMetadata=ArcGISFeatureLayerTypeMetadata(),
description=_(u'Updated points.'),
arcGISDisplayName=_(u'Updated points'),
arcGISParameterDependencies=[u'points'])
# Public method: AvisoGriddedSSH.FindOkuboWeissEddies
AddMethodMetadata(AvisoGriddedSSH.FindOkuboWeissEddies,
shortDescription=_(u'Creates rasters showing the cores of geostrophic
eddies detected in an Aviso gridded sea surface height product using the
Okubo-Weiss algorithm.'),
longDescription=_(
u"""Given an Aviso sea surface height (SSH) product and Okubo-Weiss
algorithm parameters, this tool efficiently downloads SSH images using
the `OPeNDAP <http://opendap.org/>`_ protocol, executes the
Okubo-Weiss eddy-detection algorithm, and produces a time series of
rasters showing eddy cores.
To use this tool, MATLAB 2007b or the MATLAB Component Runtime (MCR)
7.7 must be installed. You can download a free copy of the MCR 7.7
from http://code.nicholas.duke.edu/projects/mget/wiki/MCR.
**The Okubo-Weiss Algorithm**
""") + _OkuboWeissAlgorithmDescription % {u'name': 'tool'} + _("""
**Aviso Products**
""") + _AvisoGriddedProduct_LongDescription % {u'name': 'tool'} + """
""" + _OkuboWeissReferences,
isExposedToPythonCallers=True,
isExposedByCOM=True,
isExposedAsArcGISTool=True,
arcGISDisplayName=_(u'Find Okubo-Weiss Eddies in Aviso SSH Product'),
arcGISToolCategory=_(u'Data Products\\Aviso\\Sea Surface Height
Products'),
dependencies=[ArcGISDependency(9, 1),
PythonAggregatedModuleDependency('numpy')])
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'cls',
AvisoGriddedSSH.FindOkuboWeissEddies, u'cls')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'username',
AvisoGriddedSSH.FindOkuboWeissEddies, u'username')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'password',
AvisoGriddedSSH.FindOkuboWeissEddies, u'password')
AddArgumentMetadata(AvisoGriddedSSH.FindOkuboWeissEddies, u'productName',
typeMetadata=UnicodeStringTypeMetadata(allowedValues=AvisoGriddedSSH.ProductsForEddyDetection),
description=_(
u"""Aviso SSH product to use for eddy detection. Please see
http://www.aviso.oceanobs.com/en/data/ for descriptions of the
products.
An important question is whether to use Mean Sea Level Anomalies
(MSLA) or Mean Absolute Dynamic Topography (MADT). Most published
studies that used the Okubo-Weiss algorithm for eddy detection used
the anomalies (MSLA). But it is not clear that MSLA is a better choice
than MADT.
According to Stephanie Henson, she used MSLA in Henson et al. (2007)
because her implementation of the algorithm determined eddy polarity
by checking whether the eddy had positive or negative SSH
(anticyclonic or cyclonic polarity, respectively). For that approach
to work, the algorithm needed to know whether the eddy's SSH was above
or below the mean sea surface. Thus, she needed anomalies.
The problem with anomalies is that they may not produce good results
in regions of persistent but dynamic SSH gradients, such as western
boundary currents like the Gulf Stream or Kuroshio Current. Henson et
al. did not suffer from that problem because their study concerned a
region that did not have such currents. To address this problem, our
implementation of the Okubo-Weiss method detects eddy polarity by
looking at the curvature of the sea surface for the eddy: a
concave-down eddy is anticyclonic; a concave-up eddy is cyclonic. This
approach allows the absolute sea surface (MADT) to be used instead of
the anomalies. If your study area includes strong persistent SSH
gradients, you may obtain better results with MADT instead of MSLA. We
recommend you try both and compare the results carefully.
At the time of this writing, this tool supported all of the products
that Aviso made available for download over OPeNDAP. If you find that
Aviso publishes a new product that is not supported by this tool,
please contact the author of this tool to have support for it added.
The product name that you must pass for this parameter is case
sensitive. If you invoke this tool programmatically, be sure to
specify the product name using the proper case."""),
arcGISDisplayName=_(u'Aviso sea surface height product'))
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters,
u'temporalResolution', AvisoGriddedSSH.FindOkuboWeissEddies,
u'temporalResolution')
AddArgumentMetadata(AvisoGriddedSSH.FindOkuboWeissEddies, u'outputWorkspace',
typeMetadata=ArcGISWorkspaceTypeMetadata(createParentDirectories=True),
description=_(
u"""Directory or geodatabase to receive the rasters.
The rasters will have the same geospatial characteristics as the Aviso
SSH product used to create them (e.g. spatial reference, cell size,
extent, and so on). They will contain 32-bit signed integers with the
following values:
* NoData - There was no Aviso SSH data for this cell (e.g. it was
land).
* 0 - There was Aviso SSH data for this cell but an eddy was not
detected.
* >0 - An eddy was detected in this cell; the cell value contains the
ID of the eddy. Eddy IDs are assigned arbitrarily starting with 1 at
the beginning of the time series. Because many eddies are usually
filtered out, there will usually be gaps in the range of IDs.
Unless you have a specific reason to store the rasters in a
geodatabase, we recommend you store them in a directory because it
will be much faster and allows the rasters to be organized in a tree.
If you do store the rasters in a geodatabase, you must change the
Raster Name Expressions parameter; see below for more
information."""),
arcGISDisplayName=_(u'Output workspace'))
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'mode',
AvisoGriddedSSH.FindOkuboWeissEddies, u'mode')
AddArgumentMetadata(AvisoGriddedSSH.FindOkuboWeissEddies,
u'rasterNameExpressions',
typeMetadata=ListTypeMetadata(elementType=UnicodeStringTypeMetadata(),
minLength=1),
description=_(
u"""List of expressions specifying how the output rasters should be
named.
The default expression assumes you are storing rasters in a file
system directory and creates them in a tree structure with levels for
the region, data series, satellite, variable name, and year. When
storing rasters in a directory, the final expression specifies the
file name of the raster and any preceding expressions specify
subdirectories. The extension of the final expression determines the
output raster format: .asc for ArcInfo ASCII Grid, .bmp for BMP, .gif
for GIF, .img for an ERDAS IMAGINE file, .jpg for JPEG, .jp2 for JPEG
2000, .png for PNG, .tif for GeoTIFF, or no extension for ArcInfo
Binary Grid. The default expression uses .img.
When storing rasters in a geodatabase, you should provide only one
expression. That expression specifies the raster's name.
Each expression may contain any sequence of characters permitted by
the output workspace. Each expression may optionally contain one or
more of the following case-sensitive codes. The tool replaces the
codes with appropriate values when creating each raster:
* %(Region)s - Region of the output raster, either "global",
"medsea", or "blacksea".
* %(DataSeries)s - Aviso data series of the output raster, either
"dt_ref", "dt_upd", or "nrt".
* %(Satellites)s - Satellites used to produce the raster, either
"merged" for multiple satellites or "tpj1" for the Topex/Poseidon /
Jason-1 sequential pair. Please see the Aviso documentation for more
information on how Aviso products are created.
* %(Variable)s - Aviso variable used during eddy detection, either
"msla_h" or "madt_h", for Mean Sea Level Anomalies (MSLA) or Mean
Absolute Dynamic Topography (MADT), respectively.
* %(ImageType)s - Type of image represented by the raster, either
"eddies" for eddy IDs, the main output of this tool, or
"eddy_polarities" or "eddy_ages" for the two optional outputs.
* %%Y - four-digit year of the raster.
* %%m - two-digit month of the raster.
* %%d - two-digit day of the month of the raster.
* %%j - three-digit day of the year of the raster.
"""),
arcGISDisplayName=_(u'Raster name expressions'))
CopyArgumentMetadata(OkuboWeissEddies.__init__, u'owThresholdType',
AvisoGriddedSSH.FindOkuboWeissEddies, u'owThresholdType')
CopyArgumentMetadata(OkuboWeissEddies.__init__, u'owThresholdValue',
AvisoGriddedSSH.FindOkuboWeissEddies, u'owThresholdValue')
CopyArgumentMetadata(OkuboWeissEddies.__init__, u'minArea',
AvisoGriddedSSH.FindOkuboWeissEddies, u'minArea')
CopyArgumentMetadata(OkuboWeissEddies.__init__, u'minA2P',
AvisoGriddedSSH.FindOkuboWeissEddies, u'minA2P')
AddArgumentMetadata(AvisoGriddedSSH.FindOkuboWeissEddies, u'minDuration',
typeMetadata=OkuboWeissEddies.MinDuration.__doc__.Obj.Type,
description=_(
u"""Minimum duration of eddy cores, in weeks (one week is seven days).
The eddy detection algorithm tracks each eddy core through consecutive
images by overlapping the eddy cells detected in the first image with
the eddy cells detected in the second. If the cells in the first image
overlap one or more in the second and they are the same polarity,
those cells in the second image are assumed to be the same eddy. If
none overlap, or they are the opposite polarity, the eddy is assumed
to have decohered (broken up).
Eddies can split. When this happens, one of the newly-split eddies
will retain the same ID as the original one. The other will be
assigned a new ID but retain the age of the original eddy. Eddies can
also merge. When this happens, the merged eddy will retain the ID and
age of the oldest eddy.
Use this parameter to filter out eddies that are too short-lived to be
of interest in your study. The default value filters out eddies that
are less than 4 weeks in duration.
You may reduce this parameter as low as 1, but this is not
recommended, as it may result in the labeling of many ephemeral,
non-eddy structures that marginally satisify the Okubo-Weiss criterion
as eddies."""),
arcGISDisplayName=_(u'Minimum duration of eddy cores'),
arcGISCategory=_(u'Okubo-Weiss algorithm parameters'))
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'rotationOffset',
AvisoGriddedSSH.FindOkuboWeissEddies, u'rotationOffset')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'spatialExtent',
AvisoGriddedSSH.FindOkuboWeissEddies, u'spatialExtent')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'linearUnit',
AvisoGriddedSSH.FindOkuboWeissEddies, u'linearUnit')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'startDate',
AvisoGriddedSSH.FindOkuboWeissEddies, u'startDate')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'endDate',
AvisoGriddedSSH.FindOkuboWeissEddies, u'endDate')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'timeout',
AvisoGriddedSSH.FindOkuboWeissEddies, u'timeout')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'maxRetryTime',
AvisoGriddedSSH.FindOkuboWeissEddies, u'maxRetryTime')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'cacheDirectory',
AvisoGriddedSSH.FindOkuboWeissEddies, u'cacheDirectory')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters,
u'calculateStatistics', AvisoGriddedSSH.FindOkuboWeissEddies,
u'calculateStatistics')
AddArgumentMetadata(AvisoGriddedSSH.FindOkuboWeissEddies, u'buildRAT',
typeMetadata=BooleanTypeMetadata(),
description=_BuildRATDescription,
arcGISDisplayName=_(u'Build raster attribute tables'),
arcGISCategory=_(u'Additional raster processing options'))
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'buildPyramids',
AvisoGriddedSSH.FindOkuboWeissEddies, u'buildPyramids')
AddArgumentMetadata(AvisoGriddedSSH.FindOkuboWeissEddies,
u'outputPolarityRasters',
typeMetadata=BooleanTypeMetadata(),
description=_(
u"""If True, eddy polarity rasters will also be written to the output
workspace.
The rasters will have the same geospatial characteristics as the Aviso
SSH product used to create them (e.g. spatial reference, cell size,
extent, and so on). They will contain 8-bit signed integers with the
following values:
* NoData - There was no Aviso SSH data for this cell (e.g. it was
land).
* -1 - A cyclonic eddy was detected in this cell.
* 0 - There was Aviso SSH data for this cell but an eddy was not
detected.
* 1 - An anticyclonic eddy was detected in this cell.
"""),
arcGISDisplayName=_(u'Output eddy polarity rasters'),
arcGISCategory=_(u'Optional output rasters'))
AddArgumentMetadata(AvisoGriddedSSH.FindOkuboWeissEddies, u'outputAgeRasters',
typeMetadata=BooleanTypeMetadata(),
description=_(
u"""If True, eddy age rasters will also be written to the output
workspace.
The rasters will have the same geospatial characteristics as the Aviso
SSH product used to create them (e.g. spatial reference, cell size,
extent, and so on). They will contain 16-bit signed integers with the
following values:
* NoData - There was no Aviso SSH data for this cell (e.g. it was
land).
* 0 - There was Aviso SSH data for this cell but an eddy was not
detected.
* >0 - An eddy was detected at this cell. The value of the cell
represents the age of the eddy, as a count of SSH images (i.e. the
value 1 indicates that this is the first image that the eddy appears
in, 2 indicates it is the second image, and so on).
"""),
arcGISDisplayName=_(u'Output eddy age rasters'),
arcGISCategory=_(u'Optional output rasters'))
CopyResultMetadata(AvisoGriddedSSH.CreateArcGISRasters,
u'updatedOutputWorkspace', AvisoGriddedSSH.FindOkuboWeissEddies,
u'updatedOutputWorkspace')
###############################################################################
# Metadata: AvisoGriddedGeostrophicCurrents class
###############################################################################
AddClassMetadata(AvisoGriddedGeostrophicCurrents,
shortDescription=_(u'An OPeNDAPGrid for a gridded geostrophic currents
product from Aviso.'),
longDescription=_AvisoGriddedProduct_LongDescription % {u'name': 'class'})
# Constructor
AddMethodMetadata(AvisoGriddedGeostrophicCurrents.__init__,
shortDescription=_(u'Constructs a new AvisoGriddedGeostrophicCurrents
instance.'),
isExposedToPythonCallers=True,
dependencies=[PythonAggregatedModuleDependency('numpy')])
AddArgumentMetadata(AvisoGriddedGeostrophicCurrents.__init__, u'self',
typeMetadata=ClassInstanceTypeMetadata(cls=AvisoGriddedGeostrophicCurrents),
description=_(u'AvisoGriddedGeostrophicCurrents instance.'))
AddArgumentMetadata(AvisoGriddedGeostrophicCurrents.__init__, u'productName',
typeMetadata=UnicodeStringTypeMetadata(allowedValues=AvisoGriddedGeostrophicCurrents.Products),
description=AvisoGriddedSSH.__init__.__doc__.Obj.GetArgumentByName(u'productName').Description,
arcGISDisplayName=_(u'Aviso geostrophic currents product'))
AddArgumentMetadata(AvisoGriddedGeostrophicCurrents.__init__,
u'vectorComponent',
typeMetadata=UnicodeStringTypeMetadata(allowedValues=[u'u', u'v'],
makeLowercase=True),
description=_(
u"""Geostrophic currents vector component to use, one of:
* u - Eastward water velocity, in cm/s.
* v - Northward water velocity, in cm/s.
"""),
arcGISDisplayName=_(u'Vector component'))
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'temporalResolution',
AvisoGriddedGeostrophicCurrents.__init__, u'temporalResolution')
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'username',
AvisoGriddedGeostrophicCurrents.__init__, u'username')
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'password',
AvisoGriddedGeostrophicCurrents.__init__, u'password')
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'timeout',
AvisoGriddedGeostrophicCurrents.__init__, u'timeout')
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'maxRetryTime',
AvisoGriddedGeostrophicCurrents.__init__, u'maxRetryTime')
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'cacheDirectory',
AvisoGriddedGeostrophicCurrents.__init__, u'cacheDirectory')
AddResultMetadata(AvisoGriddedGeostrophicCurrents.__init__, u'grid',
typeMetadata=ClassInstanceTypeMetadata(cls=AvisoGriddedGeostrophicCurrents),
description=_(u'AvisoGriddedGeostrophicCurrents instance.'))
# Public method: AvisoGriddedGeostrophicCurrents.CreateArcGISRasters
AddMethodMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
shortDescription=_(u'Creates rasters for an Aviso gridded geostrophic
currents product.'),
longDescription=_AvisoGriddedProduct_LongDescription % {u'name': 'tool'},
isExposedToPythonCallers=True,
isExposedByCOM=True,
isExposedAsArcGISTool=True,
arcGISDisplayName=_(u'Create Rasters for Aviso Geostrophic Currents
Product'),
arcGISToolCategory=_(u'Data Products\\Aviso\\Geostrophic Currents
Products'),
dependencies=[ArcGISDependency(9, 1),
PythonAggregatedModuleDependency('numpy')])
AddArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'cls',
typeMetadata=ClassOrClassInstanceTypeMetadata(cls=AvisoGriddedGeostrophicCurrents),
description=_(u'AvisoGriddedGeostrophicCurrents class or instance.'))
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.__init__, u'username',
AvisoGriddedGeostrophicCurrents.CreateArcGISRasters, u'username')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.__init__, u'password',
AvisoGriddedGeostrophicCurrents.CreateArcGISRasters, u'password')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.__init__,
u'productName', AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'productName')
AddArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'parameter',
typeMetadata=UnicodeStringTypeMetadata(allowedValues=[u'dir', u'ke',
u'mag', u'u', u'v'], makeLowercase=True),
description=_(
u"""Geophysical parameter to use, one of:
* dir - Direction of geostrophic water flow, in degrees. Due north is
0, due east is 90, due south is 180, due west is 270.
* ke - Kinetic energy, in cm^2/s^2, computed as 0.5*(u^2 + v^2). For
Aviso Mean Absolute Dynamic Topography (MADT) products, this result
is known as total kinetic energy (TKE). For Mean Sea Level Anomaly
(MSLA) products, it is known as eddy kinetic energy (EKE). Note that
oceanographers often apply a filter to a time series of sea surface
height anomaly images prior to computing eddy kinetic energy, to
remove anomalies not attributable to mesoscale eddy activity, such
as seasonal or interannual thermosteric effects. This tool does not
do that, and the resulting kinetic energy values include the
contributions of these non-eddy effects as well as those from
eddies.
* mag - Absolute magnitude (or modulus) of the geostrophic water
velocity vector, in cm/s.
* u - Eastward geostrophic water velocity, in cm/s.
* v - Northward geostrophic water velocity, in cm/s.
"""),
arcGISDisplayName=_(u'Geophysical parameter'))
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.__init__,
u'temporalResolution', AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'temporalResolution')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'outputWorkspace',
AvisoGriddedGeostrophicCurrents.CreateArcGISRasters, u'outputWorkspace')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'mode',
AvisoGriddedGeostrophicCurrents.CreateArcGISRasters, u'mode')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters,
u'rasterNameExpressions',
AvisoGriddedGeostrophicCurrents.CreateArcGISRasters, u'rasterNameExpressions')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'rasterCatalog',
AvisoGriddedGeostrophicCurrents.CreateArcGISRasters, u'rasterCatalog')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'rotationOffset',
AvisoGriddedGeostrophicCurrents.CreateArcGISRasters, u'rotationOffset')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'spatialExtent',
AvisoGriddedGeostrophicCurrents.CreateArcGISRasters, u'spatialExtent')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'linearUnit',
AvisoGriddedGeostrophicCurrents.CreateArcGISRasters, u'linearUnit')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'startDate',
AvisoGriddedGeostrophicCurrents.CreateArcGISRasters, u'startDate')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'endDate',
AvisoGriddedGeostrophicCurrents.CreateArcGISRasters, u'endDate')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.__init__, u'timeout',
AvisoGriddedGeostrophicCurrents.CreateArcGISRasters, u'timeout')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.__init__,
u'maxRetryTime', AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'maxRetryTime')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.__init__,
u'cacheDirectory', AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'cacheDirectory')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters,
u'calculateStatistics', AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'calculateStatistics')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'buildPyramids',
AvisoGriddedGeostrophicCurrents.CreateArcGISRasters, u'buildPyramids')
CopyResultMetadata(AvisoGriddedSSH.CreateArcGISRasters,
u'updatedOutputWorkspace',
AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'updatedOutputWorkspace')
# Public method:
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters
AddMethodMetadata(AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
shortDescription=_(u'Creates climatological rasters for an Aviso gridded
geostrophic currents product.'),
longDescription=AvisoGriddedSSH.CreateClimatologicalArcGISRasters.__doc__.Obj.LongDescription,
isExposedToPythonCallers=True,
isExposedByCOM=True,
isExposedAsArcGISTool=True,
arcGISDisplayName=_(u'Create Climatological Rasters for Aviso Geostrophic
Currents Product'),
arcGISToolCategory=_(u'Data Products\\Aviso\\Geostrophic Currents
Products'),
dependencies=[ArcGISDependency(9, 1),
PythonAggregatedModuleDependency('numpy')])
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'cls', AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'cls')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'username',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'username')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'password',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'password')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'productName',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'productName')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'parameter',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'parameter')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'temporalResolution',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'temporalResolution')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'statistic',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'statistic')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'binType',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters, u'binType')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'outputWorkspace',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'outputWorkspace')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'mode', AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'mode')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'rasterNameExpressions',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'rasterNameExpressions')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'binDuration',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'binDuration')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'startDayOfYear',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'startDayOfYear')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'rotationOffset',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'rotationOffset')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'spatialExtent',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'spatialExtent')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'linearUnit',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'linearUnit')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'startDate',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'startDate')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'endDate',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters, u'endDate')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'timeout',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters, u'timeout')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'maxRetryTime',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'maxRetryTime')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'cacheDirectory',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'cacheDirectory')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'calculateStatistics',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'calculateStatistics')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'buildPyramids',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'buildPyramids')
CopyResultMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'updatedOutputWorkspace',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'updatedOutputWorkspace')
# Public method:
AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses
AddMethodMetadata(AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
shortDescription=_(u'Creates line feature classes representing the
current vectors of an Aviso gridded geostrophic currents product.'),
longDescription=_(
u"""The lines output by this tool are similar to those in a "quiver
plot". When displayed on a map, they can help visualize the direction
and speed of ocean currents. In ArcMap, select the "Arrow at End"
symbology. You may also want to reduce the line decoration (the arrow)
to a small size, such as 2.0.
""") + _AvisoGriddedProduct_LongDescription % {u'name': 'tool'},
isExposedToPythonCallers=True,
isExposedByCOM=True,
isExposedAsArcGISTool=True,
arcGISDisplayName=_(u'Create Vectors for Aviso Geostrophic Currents
Product'),
arcGISToolCategory=_(u'Data Products\\Aviso\\Geostrophic Currents
Products'),
dependencies=[ArcGISDependency(9, 1),
PythonAggregatedModuleDependency('numpy')])
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'cls', AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
u'cls')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.__init__, u'username',
AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
u'username')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.__init__, u'password',
AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
u'password')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.__init__,
u'productName',
AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
u'productName')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.__init__,
u'temporalResolution',
AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
u'temporalResolution')
AddArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
u'outputWorkspace',
typeMetadata=ArcGISWorkspaceTypeMetadata(createParentDirectories=True),
description=_(
u"""Directory or geodatabase to receive the feature classes.
Unless you have a specific reason to store the feature classes in a
geodatabase, we recommend you store them in a directory because it
will be faster and allows them to be organized as a tree (of
shapefiles). If you do store the feature classes in a geodatabase, you
must change the Feature Class Name Expressions parameter; see below
for more information."""),
arcGISDisplayName=_(u'Output workspace'))
AddArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
u'mode',
typeMetadata=UnicodeStringTypeMetadata(allowedValues=[u'Add',
u'Replace'], makeLowercase=True),
description=_(
u"""Overwrite mode, one of:
* Add - create feature classes that do not exist and skip those that
already exist. This is the default.
* Replace - create feature classes that do not exist and overwrite
those that already exist.
The ArcGIS Overwrite Outputs geoprocessing setting has no effect on
this tool. If 'Replace' is selected the feature classes will be
overwritten, regardless of the ArcGIS Overwrite Outputs setting."""),
arcGISDisplayName=_(u'Overwrite mode'))
AddArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
u'featureClassNameExpressions',
typeMetadata=ListTypeMetadata(elementType=UnicodeStringTypeMetadata(),
minLength=1),
description=_(
u"""List of expressions specifying how the output feature classes
should be named.
The default expression assumes the output workspace is a directory and
creates shapefiles in a tree structure with levels for the region,
data series, satellite, variable, and year.
If the output workspace is a geodatabase, you should provide only one
or two expressions. If you provide one expression, it specifies the
feature class name. If you provide two, the first one specifies the
feature dataset name and the second specifies the feature class name.
Each expression may contain any sequence of characters permitted by
the output workspace. Each expression may optionally contain one or
more of the following case-sensitive codes. The tool replaces the
codes with appropriate values when creating each feature class:
* %(Region)s - Region of the output feature class, either "global",
"medsea", or "blacksea".
* %(DataSeries)s - Aviso data series of the output feature class,
either "dt_ref", "dt_upd", or "nrt".
* %(Satellites)s - Satellites used to produce the feature class. At
this time, only one such value exists, "merged", which means that
multiple satellites were used. Please see the Aviso documentation
for more information on how Aviso products are created.
* %(Variable)s - Aviso variable represented in the output feature
class, either "madt" for Mean Absolute Dynamic Topography vectors or
"msla" for Mean Sea Level Anomaly vectors. The MADT vectors
represent the actual ocean currents estimated by Aviso, while the
anomalies represent the difference of the actual currents from a
long term climatological mean.
* %%Y - four-digit year of the output feature class.
* %%m - two-digit month of the output feature class.
* %%d - two-digit day of the month of the output feature class.
* %%j - three-digit day of the year of the output feature class.
"""),
arcGISDisplayName=_(u'Feature class name expressions'))
AddArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
u'scaleFactor',
typeMetadata=FloatTypeMetadata(mustBeGreaterThan=0.0),
description=_(
u"""Factor for scaling lines lengths.
The length of each line is calculated by multiplying the magnitude of
the vector by this parameter. Use this parameter to scale the lines
output by this tool to lengths that are visually appealing. If the
lines are too short, they will resemble a grid of dots and you will
not be able to discern the flow of the vector field. If the lines are
too long, they will overlap each other and resemble a plate of
spaghetti.
If the vectors all have about the same magnitude, then a good approach
is to scale the lines so that the longest one is about as long as the
raster cell size. But if there are a few very long vectors, then you
may prefer to scale the lines so that the average-length vector is as
long as the raster cell size.
For Aviso geostrophic currents, the raster cell size is about 37,000 m
and currents are given in cm/s. So, if the maximum (or mean) velocity
in your region of interest is about 75 cm/s:
scale factor = 37000 / 75 = 493.333333
"""),
arcGISDisplayName=_(u'Scale factor'),
arcGISCategory=_(u'Vector options'))
AddArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
u'uniformLength',
typeMetadata=BooleanTypeMetadata(),
description=_(
u"""If False (the default) then the lengths of the lines are
determined by multiplying the magnitude of the vector by the Scale
Factor parameter.
If True, all lines will have the same length, which will be determined
by multiplying the cell size of the Aviso grids (e.g. 37,000 meters)
by the the Scale Factor. Use this option when you want to the lines'
colors to indicate the magnitude of the vector, rather than the lines'
lengths. Start with a Scale Factor of 1 and increase it or decrease it
slightly to achieve the desired visual effect."""),
arcGISDisplayName=_(u'Create all lines with the same length'),
arcGISCategory=_(u'Vector options'))
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'rotationOffset',
AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
u'rotationOffset')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'spatialExtent',
AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
u'spatialExtent')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'linearUnit',
AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
u'linearUnit')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'startDate',
AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
u'startDate')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'endDate',
AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
u'endDate')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'timeout',
AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
u'timeout')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'maxRetryTime',
AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
u'maxRetryTime')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'cacheDirectory',
AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
u'cacheDirectory')
CopyResultMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'updatedOutputWorkspace',
AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
u'updatedOutputWorkspace')
# Public method: AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints
AddMethodMetadata(AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints,
shortDescription=_(u'Interpolates the values of an Aviso gridded
geostrophic currents product at points.'),
longDescription=AvisoGriddedSSH.InterpolateAtArcGISPoints.__doc__.Obj.LongDescription,
isExposedToPythonCallers=True,
isExposedByCOM=True,
isExposedAsArcGISTool=True,
arcGISDisplayName=_(u'Interpolate Aviso Geostrophic Currents Product at
Points'),
arcGISToolCategory=_(u'Data Products\\Aviso\\Geostrophic Currents
Products'),
dependencies=[ArcGISDependency(9, 1),
PythonAggregatedModuleDependency('numpy')])
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'cls', AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints, u'cls')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'username', AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints,
u'username')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'password', AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints,
u'password')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'productName', AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints,
u'productName')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'parameter', AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints,
u'parameter')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'temporalResolution',
AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints,
u'temporalResolution')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'points',
AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints, u'points')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'valueField', AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints,
u'valueField')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'tField',
AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints, u'tField')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'method',
AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints, u'method')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'where',
AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints, u'where')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'noDataValue', AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints,
u'noDataValue')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'timeout',
AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints, u'timeout')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'maxRetryTime', AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints,
u'maxRetryTime')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'cacheDirectory', AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints,
u'cacheDirectory')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'orderByFields', AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints,
u'orderByFields')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'numBlocksToCacheInMemory',
AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints,
u'numBlocksToCacheInMemory')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'xBlockSize', AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints,
u'xBlockSize')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'yBlockSize', AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints,
u'yBlockSize')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'tBlockSize', AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints,
u'tBlockSize')
CopyResultMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'updatedPoints', AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints,
u'updatedPoints')
###############################################################################
# Metadata: AvisoGriddedWindSpeedModulus class
###############################################################################
AddClassMetadata(AvisoGriddedWindSpeedModulus,
shortDescription=_(u'An OPeNDAPGrid for a gridded wind speed modulus
product from Aviso.'),
longDescription=_AvisoGriddedProduct_LongDescription % {u'name': 'class'})
# Constructor
AddMethodMetadata(AvisoGriddedWindSpeedModulus.__init__,
shortDescription=_(u'Constructs a new AvisoGriddedWindSpeedModulus
instance.'),
isExposedToPythonCallers=True,
dependencies=[PythonAggregatedModuleDependency('numpy')])
AddArgumentMetadata(AvisoGriddedWindSpeedModulus.__init__, u'self',
typeMetadata=ClassInstanceTypeMetadata(cls=AvisoGriddedWindSpeedModulus),
description=_(u'AvisoGriddedWindSpeedModulus instance.'))
AddArgumentMetadata(AvisoGriddedWindSpeedModulus.__init__, u'productName',
typeMetadata=UnicodeStringTypeMetadata(allowedValues=AvisoGriddedWindSpeedModulus.Products),
description=AvisoGriddedSSH.__init__.__doc__.Obj.GetArgumentByName(u'productName').Description,
arcGISDisplayName=_(u'Aviso wind speed modulus product'))
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'username',
AvisoGriddedWindSpeedModulus.__init__, u'username')
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'password',
AvisoGriddedWindSpeedModulus.__init__, u'password')
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'timeout',
AvisoGriddedWindSpeedModulus.__init__, u'timeout')
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'maxRetryTime',
AvisoGriddedWindSpeedModulus.__init__, u'maxRetryTime')
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'cacheDirectory',
AvisoGriddedWindSpeedModulus.__init__, u'cacheDirectory')
AddResultMetadata(AvisoGriddedWindSpeedModulus.__init__, u'grid',
typeMetadata=ClassInstanceTypeMetadata(cls=AvisoGriddedWindSpeedModulus),
description=_(u'AvisoGriddedWindSpeedModulus instance.'))
# Public method: AvisoGriddedWindSpeedModulus.CreateArcGISRasters
AddMethodMetadata(AvisoGriddedWindSpeedModulus.CreateArcGISRasters,
shortDescription=_(u'Creates rasters for an Aviso gridded wind speed
modulus product.'),
longDescription=_AvisoGriddedProduct_LongDescription % {u'name': 'tool'},
isExposedToPythonCallers=True,
isExposedByCOM=True,
isExposedAsArcGISTool=True,
arcGISDisplayName=_(u'Create Rasters for Aviso Wind Speed Modulus
Product'),
arcGISToolCategory=_(u'Data Products\\Aviso\\Wind Speed Modulus
Products'),
dependencies=[ArcGISDependency(9, 1),
PythonAggregatedModuleDependency('numpy')])
AddArgumentMetadata(AvisoGriddedWindSpeedModulus.CreateArcGISRasters, u'cls',
typeMetadata=ClassOrClassInstanceTypeMetadata(cls=AvisoGriddedWindSpeedModulus),
description=_(u'AvisoGriddedWindSpeedModulus class or instance.'))
CopyArgumentMetadata(AvisoGriddedWindSpeedModulus.__init__, u'username',
AvisoGriddedWindSpeedModulus.CreateArcGISRasters, u'username')
CopyArgumentMetadata(AvisoGriddedWindSpeedModulus.__init__, u'password',
AvisoGriddedWindSpeedModulus.CreateArcGISRasters, u'password')
CopyArgumentMetadata(AvisoGriddedWindSpeedModulus.__init__, u'productName',
AvisoGriddedWindSpeedModulus.CreateArcGISRasters, u'productName')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'outputWorkspace',
AvisoGriddedWindSpeedModulus.CreateArcGISRasters, u'outputWorkspace')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'mode',
AvisoGriddedWindSpeedModulus.CreateArcGISRasters, u'mode')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters,
u'rasterNameExpressions', AvisoGriddedWindSpeedModulus.CreateArcGISRasters,
u'rasterNameExpressions')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'rasterCatalog',
AvisoGriddedWindSpeedModulus.CreateArcGISRasters, u'rasterCatalog')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'rotationOffset',
AvisoGriddedWindSpeedModulus.CreateArcGISRasters, u'rotationOffset')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'spatialExtent',
AvisoGriddedWindSpeedModulus.CreateArcGISRasters, u'spatialExtent')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'linearUnit',
AvisoGriddedWindSpeedModulus.CreateArcGISRasters, u'linearUnit')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'startDate',
AvisoGriddedWindSpeedModulus.CreateArcGISRasters, u'startDate')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'endDate',
AvisoGriddedWindSpeedModulus.CreateArcGISRasters, u'endDate')
CopyArgumentMetadata(AvisoGriddedWindSpeedModulus.__init__, u'timeout',
AvisoGriddedWindSpeedModulus.CreateArcGISRasters, u'timeout')
CopyArgumentMetadata(AvisoGriddedWindSpeedModulus.__init__, u'maxRetryTime',
AvisoGriddedWindSpeedModulus.CreateArcGISRasters, u'maxRetryTime')
CopyArgumentMetadata(AvisoGriddedWindSpeedModulus.__init__,
u'cacheDirectory', AvisoGriddedWindSpeedModulus.CreateArcGISRasters,
u'cacheDirectory')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters,
u'calculateStatistics', AvisoGriddedWindSpeedModulus.CreateArcGISRasters,
u'calculateStatistics')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'buildPyramids',
AvisoGriddedWindSpeedModulus.CreateArcGISRasters, u'buildPyramids')
CopyResultMetadata(AvisoGriddedSSH.CreateArcGISRasters,
u'updatedOutputWorkspace', AvisoGriddedWindSpeedModulus.CreateArcGISRasters,
u'updatedOutputWorkspace')
# Public method:
AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters
AddMethodMetadata(AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
shortDescription=_(u'Creates climatological rasters for an Aviso gridded
wind speed modulus product.'),
longDescription=AvisoGriddedSSH.CreateClimatologicalArcGISRasters.__doc__.Obj.LongDescription,
isExposedToPythonCallers=True,
isExposedByCOM=True,
isExposedAsArcGISTool=True,
arcGISDisplayName=_(u'Create Climatological Rasters for Aviso Wind Speed
Modulus Product'),
arcGISToolCategory=_(u'Data Products\\Aviso\\Wind Speed Modulus
Products'),
dependencies=[ArcGISDependency(9, 1),
PythonAggregatedModuleDependency('numpy')])
CopyArgumentMetadata(AvisoGriddedWindSpeedModulus.CreateArcGISRasters,
u'cls', AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'cls')
CopyArgumentMetadata(AvisoGriddedWindSpeedModulus.CreateArcGISRasters,
u'username', AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'username')
CopyArgumentMetadata(AvisoGriddedWindSpeedModulus.CreateArcGISRasters,
u'password', AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'password')
CopyArgumentMetadata(AvisoGriddedWindSpeedModulus.CreateArcGISRasters,
u'productName',
AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'productName')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'statistic', AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'statistic')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'binType', AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'binType')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'outputWorkspace',
AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'outputWorkspace')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'mode', AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'mode')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'rasterNameExpressions',
AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'rasterNameExpressions')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'binDuration',
AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'binDuration')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'startDayOfYear',
AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'startDayOfYear')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'rotationOffset',
AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'rotationOffset')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'spatialExtent',
AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'spatialExtent')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'linearUnit',
AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters, u'linearUnit')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'startDate', AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'startDate')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'endDate', AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'endDate')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'timeout', AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'timeout')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'maxRetryTime',
AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'maxRetryTime')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'cacheDirectory',
AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'cacheDirectory')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'calculateStatistics',
AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'calculateStatistics')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'buildPyramids',
AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'buildPyramids')
CopyResultMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'updatedOutputWorkspace',
AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'updatedOutputWorkspace')
# Public method: AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints
AddMethodMetadata(AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints,
shortDescription=_(u'Interpolates the values of an Aviso gridded wind
speed modulus product at points.'),
longDescription=AvisoGriddedSSH.InterpolateAtArcGISPoints.__doc__.Obj.LongDescription,
isExposedToPythonCallers=True,
isExposedByCOM=True,
isExposedAsArcGISTool=True,
arcGISDisplayName=_(u'Interpolate Aviso Wind Speed Modulus Product at
Points'),
arcGISToolCategory=_(u'Data Products\\Aviso\\Wind Speed Modulus
Products'),
dependencies=[ArcGISDependency(9, 1),
PythonAggregatedModuleDependency('numpy')])
CopyArgumentMetadata(AvisoGriddedWindSpeedModulus.CreateArcGISRasters,
u'cls', AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints, u'cls')
CopyArgumentMetadata(AvisoGriddedWindSpeedModulus.CreateArcGISRasters,
u'username', AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints,
u'username')
CopyArgumentMetadata(AvisoGriddedWindSpeedModulus.CreateArcGISRasters,
u'password', AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints,
u'password')
CopyArgumentMetadata(AvisoGriddedWindSpeedModulus.CreateArcGISRasters,
u'productName', AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints,
u'productName')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'points',
AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints, u'points')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'valueField', AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints,
u'valueField')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'tField',
AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints, u'tField')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'method',
AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints, u'method')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'where',
AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints, u'where')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'noDataValue', AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints,
u'noDataValue')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'timeout',
AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints, u'timeout')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'maxRetryTime', AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints,
u'maxRetryTime')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'cacheDirectory', AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints,
u'cacheDirectory')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'orderByFields', AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints,
u'orderByFields')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'numBlocksToCacheInMemory',
AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints,
u'numBlocksToCacheInMemory')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'xBlockSize', AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints,
u'xBlockSize')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'yBlockSize', AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints,
u'yBlockSize')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'tBlockSize', AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints,
u'tBlockSize')
CopyResultMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'updatedPoints', AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints,
u'updatedPoints')
###############################################################################
# Metadata: AvisoGriddedSignificantWaveHeight class
###############################################################################
AddClassMetadata(AvisoGriddedSignificantWaveHeight,
shortDescription=_(u'An OPeNDAPGrid for a gridded significant wave height
product from Aviso.'),
longDescription=_AvisoGriddedProduct_LongDescription % {u'name': 'class'})
# Constructor
AddMethodMetadata(AvisoGriddedSignificantWaveHeight.__init__,
shortDescription=_(u'Constructs a new AvisoGriddedSignificantWaveHeight
instance.'),
isExposedToPythonCallers=True,
dependencies=[PythonAggregatedModuleDependency('numpy')])
AddArgumentMetadata(AvisoGriddedSignificantWaveHeight.__init__, u'self',
typeMetadata=ClassInstanceTypeMetadata(cls=AvisoGriddedSignificantWaveHeight),
description=_(u'AvisoGriddedSignificantWaveHeight instance.'))
AddArgumentMetadata(AvisoGriddedSignificantWaveHeight.__init__,
u'productName',
typeMetadata=UnicodeStringTypeMetadata(allowedValues=AvisoGriddedSignificantWaveHeight.Products),
description=AvisoGriddedSSH.__init__.__doc__.Obj.GetArgumentByName(u'productName').Description,
arcGISDisplayName=_(u'Aviso significant wave height product'))
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'username',
AvisoGriddedSignificantWaveHeight.__init__, u'username')
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'password',
AvisoGriddedSignificantWaveHeight.__init__, u'password')
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'timeout',
AvisoGriddedSignificantWaveHeight.__init__, u'timeout')
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'maxRetryTime',
AvisoGriddedSignificantWaveHeight.__init__, u'maxRetryTime')
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'cacheDirectory',
AvisoGriddedSignificantWaveHeight.__init__, u'cacheDirectory')
AddResultMetadata(AvisoGriddedSignificantWaveHeight.__init__, u'grid',
typeMetadata=ClassInstanceTypeMetadata(cls=AvisoGriddedSignificantWaveHeight),
description=_(u'AvisoGriddedSignificantWaveHeight instance.'))
# Public method: AvisoGriddedSignificantWaveHeight.CreateArcGISRasters
AddMethodMetadata(AvisoGriddedSignificantWaveHeight.CreateArcGISRasters,
shortDescription=_(u'Creates rasters for an Aviso gridded significant
wave height product.'),
longDescription=_AvisoGriddedProduct_LongDescription % {u'name': 'tool'},
isExposedToPythonCallers=True,
isExposedByCOM=True,
isExposedAsArcGISTool=True,
arcGISDisplayName=_(u'Create Rasters for Aviso Significant Wave Height
Product'),
arcGISToolCategory=_(u'Data Products\\Aviso\\Significant Wave Height
Products'),
dependencies=[ArcGISDependency(9, 1),
PythonAggregatedModuleDependency('numpy')])
AddArgumentMetadata(AvisoGriddedSignificantWaveHeight.CreateArcGISRasters,
u'cls',
typeMetadata=ClassOrClassInstanceTypeMetadata(cls=AvisoGriddedSignificantWaveHeight),
description=_(u'AvisoGriddedSignificantWaveHeight class or instance.'))
CopyArgumentMetadata(AvisoGriddedSignificantWaveHeight.__init__, u'username',
AvisoGriddedSignificantWaveHeight.CreateArcGISRasters, u'username')
CopyArgumentMetadata(AvisoGriddedSignificantWaveHeight.__init__, u'password',
AvisoGriddedSignificantWaveHeight.CreateArcGISRasters, u'password')
CopyArgumentMetadata(AvisoGriddedSignificantWaveHeight.__init__,
u'productName', AvisoGriddedSignificantWaveHeight.CreateArcGISRasters,
u'productName')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'outputWorkspace',
AvisoGriddedSignificantWaveHeight.CreateArcGISRasters, u'outputWorkspace')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'mode',
AvisoGriddedSignificantWaveHeight.CreateArcGISRasters, u'mode')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters,
u'rasterNameExpressions',
AvisoGriddedSignificantWaveHeight.CreateArcGISRasters,
u'rasterNameExpressions')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'rasterCatalog',
AvisoGriddedSignificantWaveHeight.CreateArcGISRasters, u'rasterCatalog')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'rotationOffset',
AvisoGriddedSignificantWaveHeight.CreateArcGISRasters, u'rotationOffset')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'spatialExtent',
AvisoGriddedSignificantWaveHeight.CreateArcGISRasters, u'spatialExtent')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'linearUnit',
AvisoGriddedSignificantWaveHeight.CreateArcGISRasters, u'linearUnit')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'startDate',
AvisoGriddedSignificantWaveHeight.CreateArcGISRasters, u'startDate')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'endDate',
AvisoGriddedSignificantWaveHeight.CreateArcGISRasters, u'endDate')
CopyArgumentMetadata(AvisoGriddedSignificantWaveHeight.__init__, u'timeout',
AvisoGriddedSignificantWaveHeight.CreateArcGISRasters, u'timeout')
CopyArgumentMetadata(AvisoGriddedSignificantWaveHeight.__init__,
u'maxRetryTime', AvisoGriddedSignificantWaveHeight.CreateArcGISRasters,
u'maxRetryTime')
CopyArgumentMetadata(AvisoGriddedSignificantWaveHeight.__init__,
u'cacheDirectory', AvisoGriddedSignificantWaveHeight.CreateArcGISRasters,
u'cacheDirectory')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters,
u'calculateStatistics',
AvisoGriddedSignificantWaveHeight.CreateArcGISRasters, u'calculateStatistics')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'buildPyramids',
AvisoGriddedSignificantWaveHeight.CreateArcGISRasters, u'buildPyramids')
CopyResultMetadata(AvisoGriddedSSH.CreateArcGISRasters,
u'updatedOutputWorkspace',
AvisoGriddedSignificantWaveHeight.CreateArcGISRasters,
u'updatedOutputWorkspace')
# Public method:
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters
AddMethodMetadata(AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
shortDescription=_(u'Creates climatological rasters for an Aviso gridded
significant wave height product.'),
longDescription=AvisoGriddedSSH.CreateClimatologicalArcGISRasters.__doc__.Obj.LongDescription,
isExposedToPythonCallers=True,
isExposedByCOM=True,
isExposedAsArcGISTool=True,
arcGISDisplayName=_(u'Create Climatological Rasters for Aviso Significant
Wave Height Product'),
arcGISToolCategory=_(u'Data Products\\Aviso\\Significant Wave Height
Products'),
dependencies=[ArcGISDependency(9, 1),
PythonAggregatedModuleDependency('numpy')])
CopyArgumentMetadata(AvisoGriddedSignificantWaveHeight.CreateArcGISRasters,
u'cls', AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'cls')
CopyArgumentMetadata(AvisoGriddedSignificantWaveHeight.CreateArcGISRasters,
u'username',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'username')
CopyArgumentMetadata(AvisoGriddedSignificantWaveHeight.CreateArcGISRasters,
u'password',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'password')
CopyArgumentMetadata(AvisoGriddedSignificantWaveHeight.CreateArcGISRasters,
u'productName',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'productName')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'statistic',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'statistic')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'binType',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'binType')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'outputWorkspace',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'outputWorkspace')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'mode', AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'mode')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'rasterNameExpressions',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'rasterNameExpressions')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'binDuration',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'binDuration')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'startDayOfYear',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'startDayOfYear')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'rotationOffset',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'rotationOffset')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'spatialExtent',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'spatialExtent')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'linearUnit',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'linearUnit')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'startDate',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'startDate')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'endDate',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'endDate')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'timeout',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'timeout')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'maxRetryTime',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'maxRetryTime')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'cacheDirectory',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'cacheDirectory')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'calculateStatistics',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'calculateStatistics')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'buildPyramids',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'buildPyramids')
CopyResultMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'updatedOutputWorkspace',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'updatedOutputWorkspace')
# Public method: AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints
AddMethodMetadata(AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints,
shortDescription=_(u'Interpolates the values of an Aviso gridded
significant wave height product at points.'),
longDescription=AvisoGriddedSSH.InterpolateAtArcGISPoints.__doc__.Obj.LongDescription,
isExposedToPythonCallers=True,
isExposedByCOM=True,
isExposedAsArcGISTool=True,
arcGISDisplayName=_(u'Interpolate Aviso Significant Wave Height Product
at Points'),
arcGISToolCategory=_(u'Data Products\\Aviso\\Significant Wave Height
Products'),
dependencies=[ArcGISDependency(9, 1),
PythonAggregatedModuleDependency('numpy')])
CopyArgumentMetadata(AvisoGriddedSignificantWaveHeight.CreateArcGISRasters,
u'cls', AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints, u'cls')
CopyArgumentMetadata(AvisoGriddedSignificantWaveHeight.CreateArcGISRasters,
u'username', AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints,
u'username')
CopyArgumentMetadata(AvisoGriddedSignificantWaveHeight.CreateArcGISRasters,
u'password', AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints,
u'password')
CopyArgumentMetadata(AvisoGriddedSignificantWaveHeight.CreateArcGISRasters,
u'productName', AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints,
u'productName')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'points',
AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints, u'points')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'valueField', AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints,
u'valueField')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'tField',
AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints, u'tField')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'method',
AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints, u'method')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'where',
AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints, u'where')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'noDataValue', AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints,
u'noDataValue')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'timeout',
AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints, u'timeout')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'maxRetryTime', AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints,
u'maxRetryTime')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'cacheDirectory',
AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints,
u'cacheDirectory')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'orderByFields',
AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints, u'orderByFields')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'numBlocksToCacheInMemory',
AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints,
u'numBlocksToCacheInMemory')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'xBlockSize', AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints,
u'xBlockSize')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'yBlockSize', AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints,
u'yBlockSize')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'tBlockSize', AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints,
u'tBlockSize')
CopyResultMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'updatedPoints',
AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints, u'updatedPoints')
###############################################################################
# Names exported by this module
###############################################################################
__all__ = ['AvisoGriddedSSH',
'AvisoGriddedGeostrophicCurrents',
'AvisoGriddedWindSpeedModulus',
'AvisoGriddedSignificantWaveHeight']
The various GHRSST products are definitely on our list. Are you referring to
this one:
http://podaac.jpl.nasa.gov/dataset/JPL_OUROCEAN-L4UHfnd-GLOB-G1SST?ids=Measu
rement:GridSpatialResolution&values=Ocean%20Temperature:0.01
That is the one that is at the top of our GHRSST list. We do not have
immediate plans to add it but would consider doing so soon. Do you have an
immediate application for this?
Regarding the error. That is a bug. Thank you for reporting it! A fix is
attached. To apply it:
1. First make sure you have the latest version of MGET (0.8a36) installed.
2. Shut down all ArcGIS Programs.
3. Overwrite the file
C:\Python26\ArcGIS10.0\Lib\site-packages\GeoEco\DataProducts\Aviso.py with
the attached one.
4. Start ArcGIS and try again.
Let me know if that works. Also, bear in mind that Aviso does not provide
public access to NRT data that is newer than 30 days. When I ran this just
now, the newest time slice I could access was for March 19, 2012.
Best,
Jason
-----Original Message-----
From: Matt Upton
[mailto:]
Sent: Thursday, March 22, 2012 1:42 PM
To:
Subject: [mget-help] Suggestions and Help on Error
Hello MGET crew,
I recently installed your Toolbox on ArcGIS 10 SP4, with all the recommended
programs and software. This toolbox is very helpful and I am very pleased
thus far. Good work!
However, I do have suggestions. It would be greatly helpful if you could
expand on the Data Products available from NASA JPL PO.DAAC Specifically
the Blended SST GHSST Level 4 G1SST Global Foundation SST data at 1km
resolution (0.01 degrees) worldwide cloud free. This seems to be all the
rage lately especially after the Ocean Sciences meeting in Salt Lake City
last month. I know these datasets are large, but is it possible that this
can get added to your MGET in the very near future?
Second, I keep on getting errors when I try to create vectors and rasters
from the AVISO geostrophic Current Products, it keeps saying that I need to
select Daily temporal resolution for certain variables (specifically the
Global NRT data). But I DO HAVE THE Daily temporal resolution selected?
What the bug here?
Thanks,
Matt
---------------------------------------
Matthew A. Upton
Satellite Fisheries Oceanographer
Roffer's Ocean Fishing Forecasting Service, Inc. (ROFFS)
60 Westover Drive
West Melbourne, Florida 32904-5126
www.roffs.com
800.677.7633/321.723.5759
---------------------------------------
# Aviso.py - Provides methods for working with altimetry-derived data
# from Aviso (http://www.aviso.oceanobs.com).
#
# Copyright (C) 2008 Jason J. Roberts
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License (available in the file LICENSE.TXT)
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
USA.
import datetime
import os
import time
from GeoEco.DataManagement.ArcGISRasters import ArcGISRaster
from GeoEco.Datasets import Dataset, QueryableAttribute, Grid
from GeoEco.Datasets.OPeNDAP import THREDDSCatalog, OPeNDAPURL, OPeNDAPGrid
from GeoEco.DynamicDocString import DynamicDocString
from GeoEco.Internationalization import _
# To compute CornerCoords of Aviso global Mercator grid:
#
# >>> import math
# >>> from GeoEco.Datasets import Dataset
# >>> sr1 = Dataset.ConvertSpatialReference('proj4', '+proj=latlong
+ellps=WGS84 +datum=WGS84 +no_defs', 'obj')
# >>> sr2 = Dataset.ConvertSpatialReference('proj4', '+proj=merc +R=6371000
+lon_0=179.83333333333333 +no_defs', 'obj') # Note lon_0: this is 1/2
cell to the west of 180, so east and west extent in mercator coordinates are
the same, which is required by ArcGIS
# >>> transformer = Dataset._osr().CoordinateTransformation(sr1, sr2)
# >>> xLLC, yLLC = transformer.TransformPoint(0.0, -82.0)[:2] # These
are from the LatLonMin OPeNDAP variable
# >>> xLLC, yLLC
# (-19996554.308246478, -16948810.33867823) # Center
coords of lower-left cell; note that old AVISO FAQ claiming 0, -82 was lower
left corner is WRONG (confirmed by AVISO); 0, -82 is CENTER of cell
# >>> cellSize = 6371000. * 2 * math.pi / 360 / 3 # 1/3
degree cell size at equator (1080 columns)
# >>> cellSize
# 37064.975548186245
class _AvisoGriddedProduct(OPeNDAPGrid):
__doc__ = DynamicDocString()
def __init__(self, url, username, password, variableName=u'Grid_0001',
timeout=60, maxRetryTime=120, cacheDirectory=None):
# Determine the values of the queryable attributes from the
# URL.
queryableAttributes=(QueryableAttribute(u'Region', _(u'Region'),
UnicodeStringTypeMetadata(allowedValues=[u'global', u'medsea', u'blacksea'],
makeLowercase=True)),
QueryableAttribute(u'DataSeries', _(u'Data
series'), UnicodeStringTypeMetadata(allowedValues=[u'nrt', u'dt_ref',
u'dt_upd'], makeLowercase=True)),
QueryableAttribute(u'Satellites',
_(u'Satellites'), UnicodeStringTypeMetadata(allowedValues=[u'merged',
u'tpj1'], makeLowercase=True)),
QueryableAttribute(u'TemporalResolution',
_(u'Temporal resolution'), UnicodeStringTypeMetadata(allowedValues=[u'daily',
u'weekly'], makeLowercase=True)),
QueryableAttribute(u'Variable', _(u'Variable'),
UnicodeStringTypeMetadata(allowedValues=[u'madt_h', u'madt_u', u'madt_v',
u'msla_err', u'msla_h', u'msla_u', u'msla_v', u'mswh', u'mwind'],
makeLowercase=True)))
queryableAttributeValues = {}
if u'-global-' in url:
queryableAttributeValues['Region'] = u'global'
elif u'-medsea-' in url:
queryableAttributeValues['Region'] = u'medsea'
elif u'-blacksea-' in url:
queryableAttributeValues['Region'] = u'blacksea'
else:
raise ValueError(_(u'The URL %(url)s does not contain a known
Aviso region code. The region codes known by this tool are "global",
"medsea", and "blacksea". If this is a valid Aviso OPeNDAP URL for a new
region, please contact the author of this tool to have it added.') % {u'url':
url})
if u'-nrt-' in url:
queryableAttributeValues['DataSeries'] = u'nrt'
elif u'-dt-ref-' in url:
queryableAttributeValues['DataSeries'] = u'dt_ref'
elif u'-dt-upd-' in url:
queryableAttributeValues['DataSeries'] = u'dt_upd'
else:
raise ValueError(_(u'The URL %(url)s does not contain a known
data series code. The data series codes known by this tool are "nrt",
"dt-ref", and "dt-upd". If this is a valid Aviso OPeNDAP URL for a new data
series, please contact the author of this tool to have it added.') % {u'url':
url})
if u'-merged-' in url:
queryableAttributeValues['Satellites'] = u'merged'
elif u'-tpj1-' in url:
queryableAttributeValues['Satellites'] = u'tpj1'
else:
raise ValueError(_(u'The URL %(url)s does not contain a known
satellite code. The satellite codes known by this tool are "merged", and
"tpj1". If this is a valid Aviso OPeNDAP URL for a new satellite, please
contact the author of this tool to have it added.') % {u'url': url})
if u'-nrt-' in url or url.endswith('-daily'):
queryableAttributeValues['TemporalResolution'] = u'daily'
else:
queryableAttributeValues['TemporalResolution'] = u'weekly'
if u'madt-uv' in url:
if variableName == u'Grid_0001':
queryableAttributeValues['Variable'] = u'madt_u'
elif variableName == u'Grid_0002':
queryableAttributeValues['Variable'] = u'madt_v'
else:
raise ValueError(_(u'The OPeNDAP variable name %(name)s is
not valid for the Aviso URL %(url)s. The valid variable names are "Grid_0001"
and "Grid_0002".') % {u'name': variableName, u'url': url})
elif u'msla-uv' in url:
if variableName == u'Grid_0001':
queryableAttributeValues['Variable'] = u'msla_u'
elif variableName == u'Grid_0002':
queryableAttributeValues['Variable'] = u'msla_v'
else:
raise ValueError(_(u'The OPeNDAP variable name %(name)s is
not valid for the Aviso URL %(url)s. The valid variable names are "Grid_0001"
and "Grid_0002".') % {u'name': variableName, u'url': url})
else:
if u'madt-h' in url:
queryableAttributeValues['Variable'] = u'madt_h'
elif u'msla-err' in url:
queryableAttributeValues['Variable'] = u'msla_err'
elif u'msla-h' in url:
queryableAttributeValues['Variable'] = u'msla_h'
elif url.endswith(u'mswh'):
queryableAttributeValues['Variable'] = u'mswh'
elif url.endswith(u'mwind'):
queryableAttributeValues['Variable'] = u'mwind'
else:
raise ValueError(_(u'The URL %(url)s does not end with a
valid Aviso variable name. The variable names known by this tool are
"madt-h", "madt-uv", "msla-err", "msla-h", "msla_uv", "mswh", and "mwind". If
this is a valid Aviso OPeNDAP URL for a new variable, please contact the
author of this tool to have it added.') % {u'url': url})
if variableName != u'Grid_0001':
raise ValueError(_(u'The OPeNDAP variable name %(name)s is
not valid for the Aviso URL %(url)s. The variable name must be "Grid_0001"
for this URL.') % {u'name': variableName, u'url': url})
# Determine the values of the lazy properties from the URL.
if url.endswith(u'mwind') or url.endswith(u'mswh'):
spatialReference = Dataset.ConvertSpatialReference('proj4',
'+proj=latlong +ellps=WGS84 +datum=WGS84 +no_defs', 'obj')
elif u'-global-' in url:
spatialReference = Dataset.ConvertSpatialReference('proj4',
'+proj=merc +R=6371000 +lon_0=179.83333333333333 +no_defs', 'obj')
else:
spatialReference = Dataset.ConvertSpatialReference('proj4',
'+proj=latlong +ellps=WGS84 +datum=WGS84 +no_defs', 'obj')
# Initialize the base class.
super(_AvisoGriddedProduct, self).__init__(OPeNDAPURL(url,
username=username, password=password, timeout=timeout,
maxRetryTime=maxRetryTime, queryableAttributes=queryableAttributes,
cacheDirectory=cacheDirectory),
variableName,
'Grid',
queryableAttributeValues=queryableAttributeValues,
lazyPropertyValues={'SpatialReference': spatialReference,
'Dimensions': 'tyx',
'CoordDependencies': (None, None, None),
'TIncrementUnit': 'hour',
'TSemiRegularity': None,
'TCornerCoordType': 'center',
'PhysicalDimensions': 'txy',
'PhysicalDimensionsFlipped': (False, False, False),
'UnscaledDataType': 'float32',
'UnscaledNoDataValue': 1.8446744073709552e+019,
'ScalingFunction': None})
def _GetLazyPropertyPhysicalValue(self, name):
if name == 'CoordIncrements':
if self.ParentCollection.URL.endswith(u'mwind') or
self.ParentCollection.URL.endswith(u'mswh'):
cellSize = 1.0
elif u'-global-' in self.ParentCollection.URL:
cellSize = 37064.975548186245
else:
cellSize = 0.125
self.ParentCollection._Open()
if self.ParentCollection._PydapDataset['time'].units != 'hours
since 1950-01-01':
raise RuntimeError('Programming error in this tool: this tool
expects that the Aviso dataset at URL %(url)s uses the time units "hours
since 1950-01-01", but the dataset actually uses the time units "%(units)s.
Please contact the author of this tool for assistance.' % {u'url':
self.ParentCollection.URL, u'units':
self.ParentCollection._PydapDataset['time'].units})
tValues = self.ParentCollection._PydapDataset['time'][0:2]
tIncrement = float(tValues[1] - tValues[0])
return (tIncrement, cellSize, cellSize)
elif name == 'CornerCoords':
self.ParentCollection._Open()
if self.ParentCollection._PydapDataset['time'].units != 'hours
since 1950-01-01':
raise RuntimeError('Programming error in this tool: this tool
expects that the Aviso dataset at URL %(url)s uses the time units "hours
since 1950-01-01", but the dataset actually uses the time units "%(units)s.
Please contact the author of this tool for assistance.' % {u'url':
self.ParentCollection.URL, u'units':
self.ParentCollection._PydapDataset['time'].units})
t0 = datetime.datetime(1950, 1, 1) +
datetime.timedelta(hours=int(self.ParentCollection._PydapDataset['time'][0]))
if u'global' in self.ParentCollection.URL:
if self.ParentCollection.URL.endswith(u'mwind') or
self.ParentCollection.URL.endswith(u'mswh'):
return (t0, -90.0, 0.0)
else:
return (t0, -16948810.33867823, -19996554.308246478)
elif u'medsea' in self.ParentCollection.URL:
return (t0, 30.0, -5.0)
elif u'blacksea' in self.ParentCollection.URL:
return (t0, 40.0, 27.0)
else:
raise NotImplementedError(_(u'Support for the Aviso URL
%(url)s has not been fully implemented. Please contact the author of this
tool for assistance.') % {u'url': self.ParentCollection.URL})
return super(_AvisoGriddedProduct,
self)._GetLazyPropertyPhysicalValue(name)
@classmethod
def _RotateAndClip(cls, grid, rotationOffset, spatialExtent, linearUnit,
startDate, endDate):
from GeoEco.Datasets.Virtual import RotatedGlobalGrid, ClippedGrid
# Rotate the grid, if requested.
if rotationOffset is not None:
if grid.ParentCollection is not None and u'-global-' not in
grid.ParentCollection.URL:
raise ValueError(_(u'The Rotate Raster parameter may only be
used with global products. Please omit the Rotate Raster parameter and try
again.'))
if linearUnit == u'degrees':
try:
sr = grid.GetSpatialReference('obj').Clone()
if not sr.IsGeographic():
srAtPrimeMeridian = sr.Clone()
srAtPrimeMeridian.SetNormProjParm('central_meridian',
0.)
srGeographic = cls._osr().SpatialReference()
srGeographic.CopyGeogCSFrom(sr)
transformer =
cls._osr().CoordinateTransformation(srGeographic, srAtPrimeMeridian)
rotationOffset =
transformer.TransformPoint(rotationOffset, 0.)[0]
except:
cls._gdal().ErrorReset()
raise
grid = RotatedGlobalGrid(grid, rotationOffset, u'Map units')
# Clip the grid, if requested.
xMin, yMin, xMax, yMax = None, None, None, None
if spatialExtent is not None:
sr = grid.GetSpatialReference('obj')
if linearUnit == u'meters' and sr.IsGeographic():
raise ValueError(_(u'The Linear Unit parameter not be
"Meters" for this Aviso product because it uses a geographic coordinate
system. Please change Linear Unit to "Degrees" and try again.'))
from GeoEco.Types import EnvelopeTypeMetadata
xMin, yMin, xMax, yMax =
EnvelopeTypeMetadata.ParseFromArcGISString(spatialExtent)
if linearUnit == u'degrees' and sr.IsProjected():
centralMeridian = sr.GetNormProjParm('central_meridian')
xMinAllowed = -180. + centralMeridian
xMaxAllowed = 180. + centralMeridian
if str(xMin) == str(xMinAllowed):
xMin = xMinAllowed
elif str(xMin) == str(xMaxAllowed):
xMin = xMaxAllowed
if str(xMax) == str(xMinAllowed):
xMax = xMinAllowed
elif str(xMax) == str(xMaxAllowed):
xMax = xMaxAllowed
if xMin < xMinAllowed or xMin > xMaxAllowed:
if rotationOffset is not None:
raise ValueError(_(u'The X Minimum of the Spatial
Extent parameter (%(value)g degrees) is not within the geographic extent of
the rotated grid. After rotation, the geographic extent in the X direction is
%(xMin)g to %(xMax)g degrees. Please specify an X Minimum in that range.') %
{u'value': xMin, u'xMin': xMinAllowed, u'xMax': xMaxAllowed})
else:
raise ValueError(_(u'The X Minimum of the Spatial
Extent parameter (%(value)g degrees) is not within the geographic extent of
the grid. The geographic extent in the X direction is %(xMin)g to %(xMax)g
degrees. Please specify an X Minimum in that range.') % {u'value': xMin,
u'xMin': xMinAllowed, u'xMax': xMaxAllowed})
if xMax < xMinAllowed or xMax > xMaxAllowed:
if rotationOffset is not None:
raise ValueError(_(u'The X Maximum of the Spatial
Extent parameter (%(value)g degrees) is not within the geographic extent of
the rotated grid. After rotation, the geographic extent in the X direction is
%(xMin)g to %(xMax)g degrees. Please specify an X Minimum in that range.') %
{u'value': xMax, u'xMin': xMinAllowed, u'xMax': xMaxAllowed})
else:
raise ValueError(_(u'The X Maximum of the Spatial
Extent parameter (%(value)g degrees) is not within the geographic extent of
the grid. The geographic extent in the X direction is %(xMin)g to %(xMax)g
degrees. Please specify an X Minimum in that range.') % {u'value': xMax,
u'xMin': xMinAllowed, u'xMax': xMaxAllowed})
yMin = max(yMin, -85.0)
yMax = min(yMax, 85.0)
try:
transformer =
cls._osr().CoordinateTransformation(Dataset.ConvertSpatialReference('proj4',
'+proj=latlong +R=6371000 +no_defs', 'obj'), grid.GetSpatialReference('obj'))
xMin, yMin = transformer.TransformPoint(xMin, yMin)[:2]
xMax, yMax = transformer.TransformPoint(xMax, yMax)[:2]
except:
cls._gdal().ErrorReset()
raise
if spatialExtent is not None or startDate is not None or endDate is
not None:
if startDate is not None:
startDate = datetime.datetime(startDate.year,
startDate.month, startDate.day, 0, 0, 0)
if endDate is not None:
endDate = datetime.datetime(endDate.year, endDate.month,
endDate.day, 23, 59, 59)
grid = ClippedGrid(grid, u'Map coordinates', xMin=xMin,
xMax=xMax, yMin=yMin, yMax=yMax, tMin=startDate, tMax=endDate)
# Return the grid.
return grid
@classmethod
def _GetURLSuffix(cls, url, temporalResolution):
if temporalResolution == u'daily':
if u'-nrt-' not in url:
return u'-daily'
elif u'-nrt-' in url:
raise ValueError(_(u'Aviso\'s Near Real Time (NRT) products are
only available in daily temporal resolution. Please select daily temporal
resolution or switch to a Delayed Time (DT) product that offers weekly
resolution.'))
return ''
@classmethod
def _GetTimeCoordsFromQueryableAttributeValues(cls,
queryableAttributeValues):
if u'DateTime' not in queryableAttributeValues or not
isinstance(queryableAttributeValues[u'DateTime'], datetime.datetime) or
u'TemporalResolution' not in queryableAttributeValues or not
isinstance(queryableAttributeValues[u'TemporalResolution'], basestring) or
queryableAttributeValues[u'TemporalResolution'].lower() not in [u'daily',
u'weekly']:
return [None, None, None]
dateTime = queryableAttributeValues[u'DateTime']
if queryableAttributeValues[u'TemporalResolution'].lower() ==
u'daily':
return [dateTime - datetime.timedelta(0.5), dateTime, dateTime +
datetime.timedelta(0.5) - datetime.timedelta(seconds=1)]
return [dateTime - datetime.timedelta(3.5), dateTime, dateTime +
datetime.timedelta(3.5) - datetime.timedelta(seconds=1)]
@classmethod
def CreateArcGISRasters(cls, grid, outputWorkspace, mode,
rasterNameExpressions, rasterCatalog, rotationOffset, spatialExtent,
linearUnit, startDate, endDate, calculateStatistics, buildPyramids):
try:
from GeoEco.Datasets.ArcGIS import ArcGISWorkspace, ArcGISRaster
from GeoEco.Datasets.Virtual import GridSliceCollection
grid = cls._RotateAndClip(grid, rotationOffset, spatialExtent,
linearUnit, startDate, endDate)
workspace = ArcGISWorkspace(outputWorkspace, ArcGISRaster,
pathCreationExpressions=rasterNameExpressions, cacheTree=True,
queryableAttributes=tuple(grid.GetAllQueryableAttributes() +
[QueryableAttribute(u'DateTime', _(u'Date'), DateTimeTypeMetadata())]))
workspace.ImportDatasets(GridSliceCollection(grid,
tQACoordType=u'center').QueryDatasets(), mode,
calculateStatistics=calculateStatistics, buildPyramids=buildPyramids)
if rasterCatalog is not None:
workspace.ToRasterCatalog(rasterCatalog,
grid.GetSpatialReference(u'ArcGIS'), tQACoordType=u'center',
tCoordFunction=cls._GetTimeCoordsFromQueryableAttributeValues,
overwriteExisting=True)
finally:
grid.Close()
@classmethod
def CreateClimatologicalArcGISRasters(cls, grid, statistic, binType,
outputWorkspace, mode, rasterNameExpressions, binDuration, startDayOfYear,
rotationOffset, spatialExtent, linearUnit, startDate, endDate,
calculateStatistics, buildPyramids):
try:
from GeoEco.Datasets.ArcGIS import ArcGISWorkspace, ArcGISRaster
from GeoEco.Datasets.Virtual import ClimatologicalGridCollection
grid = cls._RotateAndClip(grid, rotationOffset, spatialExtent,
linearUnit, startDate, endDate)
collection = ClimatologicalGridCollection(grid, statistic,
binType, binDuration, startDayOfYear, reportProgress=True)
workspace = ArcGISWorkspace(outputWorkspace, ArcGISRaster,
pathCreationExpressions=rasterNameExpressions, cacheTree=True,
queryableAttributes=tuple(collection.GetAllQueryableAttributes()))
workspace.ImportDatasets(collection.QueryDatasets(), mode,
calculateStatistics=calculateStatistics, buildPyramids=buildPyramids)
finally:
grid.Close()
@classmethod
def InterpolateAtArcGISPoints(cls, grid, points, valueField, tField,
method, where, noDataValue, orderByFields, numBlocksToCacheInMemory,
xBlockSize, yBlockSize, tBlockSize):
try:
if orderByFields is not None:
orderBy = u', '.join(map(lambda f: f + u' ASC',
orderByFields))
else:
from GeoEco.ArcGIS import GeoprocessorManager
if GeoprocessorManager.GetArcGISMajorVersion() > 9 or
GeoprocessorManager.GetArcGISMinorVersion() >= 2:
orderBy = tField + u' ASC'
else:
orderBy = None
from GeoEco.Datasets.ArcGIS import ArcGISTable
from GeoEco.SpatialAnalysis.Interpolation import Interpolator
Interpolator.InterpolateGridsValuesForTableOfPoints([grid],
ArcGISTable(points), [valueField], tField=tField, where=where,
orderBy=orderBy, method=method, noDataValue=noDataValue, gridsWrap=True,
numBlocksToCacheInMemory=numBlocksToCacheInMemory, xBlockSize=xBlockSize,
yBlockSize=yBlockSize, tBlockSize=tBlockSize)
finally:
grid.Close()
class AvisoGriddedSSH(_AvisoGriddedProduct):
__doc__ = DynamicDocString()
def __init__(self, productName, temporalResolution, username, password,
timeout=60, maxRetryTime=120, cacheDirectory=None):
self.__doc__.Obj.ValidateMethodInvocation()
super(AvisoGriddedSSH,
self).__init__(AvisoGriddedSSH.OPeNDAPURLsForProducts[productName] +
self._GetURLSuffix(AvisoGriddedSSH.OPeNDAPURLsForProducts[productName],
temporalResolution), username, password, timeout=timeout,
maxRetryTime=maxRetryTime, cacheDirectory=cacheDirectory)
self._DisplayName = u'Aviso ' + productName
def _GetDisplayName(self):
return self._DisplayName
OPeNDAPURLsForProducts = {
u'Black Sea DT-Ref Merged MSLA Error':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-ref-blacksea-merged-msla-err',
u'Black Sea DT-Ref Merged MSLA SSH':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-ref-blacksea-merged-msla-h',
u'Black Sea DT-Upd Merged MSLA Error':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-upd-blacksea-merged-msla-err',
u'Black Sea DT-Upd Merged MSLA SSH':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-upd-blacksea-merged-msla-h',
u'Black Sea NRT (Over 30 Days) Merged MSLA Error':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-nrt-over30d-blacksea-merged-msla-err',
u'Black Sea NRT (Over 30 Days) Merged MSLA SSH':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-nrt-over30d-blacksea-merged-msla-h',
u'Global DT-Ref Merged MADT SSH':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-ref-global-merged-madt-h',
u'Global DT-Ref Merged MSLA Error':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-ref-global-merged-msla-err',
u'Global DT-Ref Merged MSLA SSH':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-ref-global-merged-msla-h',
u'Global DT-Ref Topex/Poseidon, Jason-1 MSLA Error':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-ref-global-tpj1-msla-err',
u'Global DT-Ref Topex/Poseidon, Jason-1 MSLA SSH':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-ref-global-tpj1-msla-h',
u'Global DT-Upd Merged MADT SSH':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-upd-global-merged-madt-h',
u'Global DT-Upd Merged MSLA Error':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-upd-global-merged-msla-err',
u'Global DT-Upd Merged MSLA SSH':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-upd-global-merged-msla-h',
u'Global NRT (Over 30 Days) Merged MADT SSH':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-nrt-over30d-global-merged-madt-h',
u'Global NRT (Over 30 Days) Merged MSLA Error':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-nrt-over30d-global-merged-msla-err',
u'Global NRT (Over 30 Days) Merged MSLA SSH':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-nrt-over30d-global-merged-msla-h',
u'Mediterranean DT-Ref Merged MADT SSH':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-ref-medsea-merged-madt-h',
u'Mediterranean DT-Ref Merged MSLA Error':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-ref-medsea-merged-msla-err',
u'Mediterranean DT-Ref Merged MSLA SSH':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-ref-medsea-merged-msla-h',
u'Mediterranean DT-Upd Merged MADT SSH':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-upd-medsea-merged-madt-h',
u'Mediterranean DT-Upd Merged MSLA Error':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-upd-medsea-merged-msla-err',
u'Mediterranean DT-Upd Merged MSLA SSH':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-upd-medsea-merged-msla-h',
u'Mediterranean NRT (Over 30 Days) Merged MADT SSH':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-nrt-over30d-medsea-merged-madt-h',
u'Mediterranean NRT (Over 30 Days) Merged MSLA Error':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-nrt-over30d-medsea-merged-msla-err',
u'Mediterranean NRT (Over 30 Days) Merged MSLA SSH':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-nrt-over30d-medsea-merged-msla-h'
}
def _ReadNumpyArray(self, sliceList):
# In August 2010, I discovered that some of the Aviso SSH
# datasets contain a few pixels with extremely high SSH values
# that are obviously bogus. Set these bogus values to nodata.
import numpy
data, noDataValue = super(AvisoGriddedSSH,
self)._ReadNumpyArray(sliceList)
data[numpy.logical_or(data > 10000, data < -10000)] = noDataValue
return data, noDataValue
Products = OPeNDAPURLsForProducts.keys()
Products.sort()
ProductsForEddyDetection = filter(lambda p: 'error' not in p.lower(),
Products)
@classmethod
def CreateArcGISRasters(cls, username, password, productName,
temporalResolution,
outputWorkspace, mode=u'add',
rasterNameExpressions=['%(Region)s', '%(DataSeries)s', '%(Satellites)s',
'%(TemporalResolution)s', '%(Variable)s', '%%Y',
'%(DataSeries)s_%(Satellites)s_%(Variable)s_%%Y%%j.img'], rasterCatalog=None,
rotationOffset=None, spatialExtent=None,
linearUnit=u'Degrees', startDate=None, endDate=None,
timeout=60, maxRetryTime=120, cacheDirectory=None,
calculateStatistics=True, buildPyramids=False):
cls.__doc__.Obj.ValidateMethodInvocation()
grid = AvisoGriddedSSH(productName, temporalResolution, username,
password, timeout, maxRetryTime, cacheDirectory)
_AvisoGriddedProduct.CreateArcGISRasters(grid, outputWorkspace, mode,
rasterNameExpressions, rasterCatalog, rotationOffset, spatialExtent,
linearUnit, startDate, endDate, calculateStatistics, buildPyramids)
return outputWorkspace
@classmethod
def CreateClimatologicalArcGISRasters(cls, username, password,
productName, temporalResolution,
statistic, binType,
outputWorkspace, mode=u'add',
rasterNameExpressions=['%(Region)s', '%(DataSeries)s', '%(Satellites)s',
'%(TemporalResolution)s', '%(Variable)s',
u'%(ClimatologyBinType)s_Climatology',
u'%(DataSeries)s_%(Satellites)s_%(Variable)s_%(ClimatologyBinName)s_%(Statistic)s.img'],
binDuration=1, startDayOfYear=1,
rotationOffset=None,
spatialExtent=None, linearUnit=u'Degrees', startDate=None, endDate=None,
timeout=60, maxRetryTime=120,
cacheDirectory=None,
calculateStatistics=True,
buildPyramids=False):
cls.__doc__.Obj.ValidateMethodInvocation()
grid = AvisoGriddedSSH(productName, temporalResolution, username,
password, timeout, maxRetryTime, cacheDirectory)
_AvisoGriddedProduct.CreateClimatologicalArcGISRasters(grid,
statistic, binType, outputWorkspace, mode, rasterNameExpressions,
binDuration, startDayOfYear, rotationOffset, spatialExtent, linearUnit,
startDate, endDate, calculateStatistics, buildPyramids)
return outputWorkspace
@classmethod
def InterpolateAtArcGISPoints(cls, username, password, productName,
temporalResolution,
points, valueField, tField,
method=u'Nearest', where=None, noDataValue=None,
timeout=60, maxRetryTime=120,
cacheDirectory=None,
orderByFields=None,
numBlocksToCacheInMemory=128, xBlockSize=16, yBlockSize=16, tBlockSize=3):
cls.__doc__.Obj.ValidateMethodInvocation()
grid = AvisoGriddedSSH(productName, temporalResolution, username,
password, timeout, maxRetryTime, cacheDirectory)
_AvisoGriddedProduct.InterpolateAtArcGISPoints(grid, points,
valueField, tField, method, where, noDataValue, orderByFields,
numBlocksToCacheInMemory, xBlockSize, yBlockSize, tBlockSize)
return points
@classmethod
def FindOkuboWeissEddies(cls, username, password, productName,
temporalResolution,
outputWorkspace, mode=u'add',
rasterNameExpressions=['%(Region)s', '%(DataSeries)s', '%(Satellites)s',
'%(TemporalResolution)s', '%(Variable)s_%(ImageType)s', '%%Y',
'%(DataSeries)s_%(Satellites)s_%(Variable)s_%(ImageType)s_%%Y%%j.img'],
owThresholdType=u'Standard Deviation',
owThresholdValue=-0.2, minArea=4, minA2P=None, minDuration=4,
rotationOffset=None, spatialExtent=None,
linearUnit=u'Degrees', startDate=None, endDate=None,
timeout=60, maxRetryTime=120,
cacheDirectory=None,
calculateStatistics=True, buildRAT=True,
buildPyramids=False,
outputPolarityRasters=False,
outputAgeRasters=False):
cls.__doc__.Obj.ValidateMethodInvocation()
# Find the eddies.
grid = AvisoGriddedSSH(productName, temporalResolution, username,
password, timeout, maxRetryTime, cacheDirectory)
try:
from GeoEco.OceanographicAnalysis.Eddies import OkuboWeissEddies,
OkuboWeissEddyPolarities, OkuboWeissEddyAges
ssh = cls._RotateAndClip(grid, rotationOffset, spatialExtent,
linearUnit, startDate, endDate)
eddies = OkuboWeissEddies(ssh, owThresholdType=owThresholdType,
owThresholdValue=owThresholdValue, minArea=minArea, minA2P=minA2P,
minDuration=int(minDuration * 7 / (ssh.CoordIncrements[0] / 24)),
reportProgress=True)
# Create the eddy ID rasters.
from GeoEco.Datasets.ArcGIS import ArcGISWorkspace, ArcGISRaster
from GeoEco.Datasets.Virtual import GridSliceCollection
workspace = ArcGISWorkspace(outputWorkspace, ArcGISRaster,
pathCreationExpressions=rasterNameExpressions, cacheTree=True,
queryableAttributes=tuple(eddies.GetAllQueryableAttributes() +
[QueryableAttribute(u'DateTime', _(u'Date'), DateTimeTypeMetadata())]))
workspace.ImportDatasets(GridSliceCollection(eddies,
tQACoordType=u'center').QueryDatasets(), mode,
calculateStatistics=calculateStatistics, buildRAT=buildRAT,
buildPyramids=buildPyramids)
# If requested, also create the eddy polarity and age
# rasters.
if outputPolarityRasters:
workspace.ImportDatasets(GridSliceCollection(OkuboWeissEddyPolarities(eddies),
tQACoordType=u'center').QueryDatasets(), mode,
calculateStatistics=calculateStatistics, buildRAT=buildRAT,
buildPyramids=buildPyramids)
if outputAgeRasters:
workspace.ImportDatasets(GridSliceCollection(OkuboWeissEddyAges(eddies),
tQACoordType=u'center').QueryDatasets(), mode,
calculateStatistics=calculateStatistics, buildRAT=buildRAT,
buildPyramids=buildPyramids)
# Return successfully.
return outputWorkspace
finally:
grid.Close()
class AvisoGriddedGeostrophicCurrents(_AvisoGriddedProduct):
__doc__ = DynamicDocString()
def __init__(self, productName, vectorComponent, temporalResolution,
username, password, timeout=60, maxRetryTime=120, cacheDirectory=None):
self.__doc__.Obj.ValidateMethodInvocation()
super(AvisoGriddedGeostrophicCurrents,
self).__init__(AvisoGriddedGeostrophicCurrents.OPeNDAPURLsForProducts[productName]
+
self._GetURLSuffix(AvisoGriddedGeostrophicCurrents.OPeNDAPURLsForProducts[productName],
temporalResolution), username, password, {u'u': u'Grid_0001', u'v':
u'Grid_0002'}[vectorComponent], timeout=timeout, maxRetryTime=maxRetryTime,
cacheDirectory=cacheDirectory)
self._DisplayName = u'Aviso ' + productName + u' ' + vectorComponent
+ u'-component'
def _GetDisplayName(self):
return self._DisplayName
OPeNDAPURLsForProducts = {
u'Black Sea DT-Ref Merged MSLA':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-ref-blacksea-merged-msla-uv',
u'Black Sea DT-Upd Merged MSLA':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-upd-blacksea-merged-msla-uv',
u'Black Sea NRT (Over 30 Days) Merged MSLA':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-nrt-over30d-blacksea-merged-msla-uv',
u'Global DT-Ref Merged MADT':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-ref-global-merged-madt-uv',
u'Global DT-Ref Merged MSLA':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-ref-global-merged-msla-uv',
u'Global DT-Upd Merged MADT':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-upd-global-merged-madt-uv',
u'Global DT-Upd Merged MSLA':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-upd-global-merged-msla-uv',
u'Global NRT (Over 30 Days) Merged MADT':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-nrt-over30d-global-merged-madt-uv',
u'Global NRT (Over 30 Days) Merged MSLA':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-nrt-over30d-global-merged-msla-uv',
u'Mediterranean DT-Ref Merged MADT':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-ref-medsea-merged-madt-uv',
u'Mediterranean DT-Ref Merged MSLA':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-ref-medsea-merged-msla-uv',
u'Mediterranean DT-Upd Merged MADT':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-upd-medsea-merged-madt-uv',
u'Mediterranean DT-Upd Merged MSLA':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-dt-upd-medsea-merged-msla-uv',
u'Mediterranean NRT (Over 30 Days) Merged MADT':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-nrt-over30d-medsea-merged-madt-uv',
u'Mediterranean NRT (Over 30 Days) Merged MSLA':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-duacs-nrt-over30d-medsea-merged-msla-uv'
}
def _ReadNumpyArray(self, sliceList):
# Some of the Aviso geostrophic datasets contain a few pixels
# with extreme values that are obviously bogus. Set these
# bogus values to nodata.
import numpy
data, noDataValue = super(AvisoGriddedGeostrophicCurrents,
self)._ReadNumpyArray(sliceList)
data[numpy.logical_or(data > 1000000, data < -1000000)] = noDataValue
return data, noDataValue
Products = OPeNDAPURLsForProducts.keys()
Products.sort()
@classmethod
def _ConstructGridForParameter(cls, productName, parameter,
temporalResolution, username, password, timeout, maxRetryTime,
cacheDirectory):
# If the caller just wants u or v, construct and return a
# AvisoGriddedGeostrophicCurrents instance.
if parameter in [u'u', u'v']:
return AvisoGriddedGeostrophicCurrents(productName, parameter,
temporalResolution, username, password, timeout, maxRetryTime, cacheDirectory)
# The caller wants something derived from both u and v. First
# create u and v component grids.
uGrid = AvisoGriddedGeostrophicCurrents(productName, u'u',
temporalResolution, username, password, timeout, maxRetryTime, cacheDirectory)
vGrid = AvisoGriddedGeostrophicCurrents(productName, u'v',
temporalResolution, username, password, timeout, maxRetryTime, cacheDirectory)
# Now construct and return the appropriate DerivedGrid
# instance.
qav = {}
for qa in uGrid.GetAllQueryableAttributes():
qav[qa.Name] = uGrid.GetQueryableAttributeValue(qa.Name)
from GeoEco.Datasets.Virtual import DerivedGrid
if parameter == u'dir':
qav[u'Variable'] = qav[u'Variable'].split(u'_')[0] + u'_dir'
return DerivedGrid([uGrid, vGrid],
'numpy.arctan2(0 -
self._Grids[0].Data.__getitem__(tuple(sliceList)), 0 -
self._Grids[1].Data.__getitem__(tuple(sliceList))) / numpy.pi * 180 + 180',
# north = 0, east = 90, south = 180, west = 270
_(u'Aviso %(product)s geostrophic current
magnitude') % {u'product': productName},
u'float32',
noDataValue=uGrid.NoDataValue,
queryableAttributes=tuple(uGrid.GetAllQueryableAttributes()),
queryableAttributeValues=qav)
if parameter == u'ke':
qav[u'Variable'] = qav[u'Variable'].split(u'_')[0] + u'_ke'
return DerivedGrid([uGrid, vGrid],
'0.5 *
(self._Grids[0].Data.__getitem__(tuple(sliceList))**2 +
self._Grids[1].Data.__getitem__(tuple(sliceList))**2)',
_(u'Aviso %(product)s kinetic energy') %
{u'product': productName},
u'float32',
noDataValue=uGrid.NoDataValue,
queryableAttributes=tuple(uGrid.GetAllQueryableAttributes()),
queryableAttributeValues=qav)
if parameter == u'mag':
qav[u'Variable'] = qav[u'Variable'].split(u'_')[0] + u'_mag'
return DerivedGrid([uGrid, vGrid],
'(self._Grids[0].Data.__getitem__(tuple(sliceList))**2 +
self._Grids[1].Data.__getitem__(tuple(sliceList))**2) ** 0.5',
_(u'Aviso %(product)s geostrophic current
magnitude') % {u'product': productName},
u'float32',
noDataValue=uGrid.NoDataValue,
queryableAttributes=tuple(uGrid.GetAllQueryableAttributes()),
queryableAttributeValues=qav)
raise RuntimeError(_(u'Programming error in this tool:
AvisoGriddedGeostrophicCurrents._ConstructGridForParameter() does not
recognize parameter "%(parameter)s". Please contact the author of this tool
for assistance.') % {u'parameter': parameter})
@classmethod
def CreateArcGISRasters(cls, username, password, productName, parameter,
temporalResolution,
outputWorkspace, mode=u'add',
rasterNameExpressions=['%(Region)s', '%(DataSeries)s', '%(Satellites)s',
'%(TemporalResolution)s', '%(Variable)s', '%%Y',
'%(DataSeries)s_%(Satellites)s_%(Variable)s_%%Y%%j.img'], rasterCatalog=None,
rotationOffset=None, spatialExtent=None,
linearUnit=u'Degrees', startDate=None, endDate=None,
timeout=60, maxRetryTime=120, cacheDirectory=None,
calculateStatistics=True, buildPyramids=False):
cls.__doc__.Obj.ValidateMethodInvocation()
grid = cls._ConstructGridForParameter(productName, parameter,
temporalResolution, username, password, timeout, maxRetryTime, cacheDirectory)
_AvisoGriddedProduct.CreateArcGISRasters(grid, outputWorkspace, mode,
rasterNameExpressions, rasterCatalog, rotationOffset, spatialExtent,
linearUnit, startDate, endDate, calculateStatistics, buildPyramids)
return outputWorkspace
@classmethod
def CreateClimatologicalArcGISRasters(cls, username, password,
productName, parameter, temporalResolution,
statistic, binType,
outputWorkspace, mode=u'add',
rasterNameExpressions=['%(Region)s', '%(DataSeries)s', '%(Satellites)s',
'%(TemporalResolution)s', '%(Variable)s',
u'%(ClimatologyBinType)s_Climatology',
u'%(DataSeries)s_%(Satellites)s_%(Variable)s_%(ClimatologyBinName)s_%(Statistic)s.img'],
binDuration=1, startDayOfYear=1,
rotationOffset=None,
spatialExtent=None, linearUnit=u'Degrees', startDate=None, endDate=None,
timeout=60, maxRetryTime=120,
cacheDirectory=None,
calculateStatistics=True,
buildPyramids=False):
cls.__doc__.Obj.ValidateMethodInvocation()
grid = cls._ConstructGridForParameter(productName, parameter,
temporalResolution, username, password, timeout, maxRetryTime, cacheDirectory)
_AvisoGriddedProduct.CreateClimatologicalArcGISRasters(grid,
statistic, binType, outputWorkspace, mode, rasterNameExpressions,
binDuration, startDayOfYear, rotationOffset, spatialExtent, linearUnit,
startDate, endDate, calculateStatistics, buildPyramids)
return outputWorkspace
@classmethod
def InterpolateAtArcGISPoints(cls, username, password, productName,
parameter, temporalResolution,
points, valueField, tField,
method=u'Nearest', where=None, noDataValue=None,
timeout=60, maxRetryTime=120,
cacheDirectory=None,
orderByFields=None,
numBlocksToCacheInMemory=128, xBlockSize=16, yBlockSize=16, tBlockSize=3):
cls.__doc__.Obj.ValidateMethodInvocation()
grid = cls._ConstructGridForParameter(productName, parameter,
temporalResolution, username, password, timeout, maxRetryTime, cacheDirectory)
_AvisoGriddedProduct.InterpolateAtArcGISPoints(grid, points,
valueField, tField, method, where, noDataValue, orderByFields,
numBlocksToCacheInMemory, xBlockSize, yBlockSize, tBlockSize)
return points
@classmethod
def CreateVectorsAsArcGISFeatureClasses(cls, username, password,
productName, temporalResolution,
outputWorkspace, mode=u'add',
featureClassNameExpressions=['%(Region)s', '%(DataSeries)s',
'%(Satellites)s', '%(TemporalResolution)s', '%(Variable)s_uv_vectors', '%%Y',
'%(DataSeries)s_%(Satellites)s_uv_vectors_%%Y%%j.shp'],
scaleFactor=500.,
uniformLength=False,
rotationOffset=None,
spatialExtent=None, linearUnit=u'Degrees', startDate=None, endDate=None,
timeout=60, maxRetryTime=120,
cacheDirectory=None):
cls.__doc__.Obj.ValidateMethodInvocation()
# Create u and v component grids.
uGrid = AvisoGriddedGeostrophicCurrents(productName, u'u',
temporalResolution, username, password, timeout, maxRetryTime, cacheDirectory)
try:
vGrid = AvisoGriddedGeostrophicCurrents(productName, u'v',
temporalResolution, username, password, timeout, maxRetryTime, cacheDirectory)
try:
uGrid = cls._RotateAndClip(uGrid, rotationOffset,
spatialExtent, linearUnit, startDate, endDate)
vGrid = cls._RotateAndClip(vGrid, rotationOffset,
spatialExtent, linearUnit, startDate, endDate)
# Query for parallel lists of 2D u and v grid slices.
from GeoEco.Datasets.Virtual import GridSliceCollection
uSlices = GridSliceCollection(uGrid,
tQACoordType=u'center').QueryDatasets()
vSlices = GridSliceCollection(vGrid,
tQACoordType=u'center').QueryDatasets()
# Construct a list of
# ShapefileFromVectorComponentGrids from the slices.
from GeoEco.SpatialAnalysis.Lines import
ShapefileFromVectorComponentGrids
queryableAttributes = tuple(uGrid.GetAllQueryableAttributes()
+ [QueryableAttribute(u'DateTime', _(u'Date'), DateTimeTypeMetadata())])
vectorShapefiles = []
for i in range(len(uSlices)):
queryableAttributeValues = {}
for qa in queryableAttributes:
queryableAttributeValues[qa.Name] =
uSlices[i].GetQueryableAttributeValue(qa.Name)
queryableAttributeValues[u'Variable'] =
queryableAttributeValues[u'Variable'].split('_')[0]
vectorShapefiles.append(ShapefileFromVectorComponentGrids(uSlices[i],
vSlices[i], scaleFactor, uniformLength,
queryableAttributes=queryableAttributes,
queryableAttributeValues=queryableAttributeValues))
# Import the ShapefileFromVectorComponentGrids into
# the output workspace.
from GeoEco.Datasets.ArcGIS import ArcGISWorkspace,
ArcGISTable
workspace = ArcGISWorkspace(outputWorkspace, ArcGISTable,
pathCreationExpressions=featureClassNameExpressions, cacheTree=True,
queryableAttributes=queryableAttributes)
workspace.ImportDatasets(vectorShapefiles, mode)
# Return successfully.
return outputWorkspace
finally:
vGrid.Close()
finally:
uGrid.Close()
class AvisoGriddedWindSpeedModulus(_AvisoGriddedProduct):
__doc__ = DynamicDocString()
def __init__(self, productName, username, password, timeout=60,
maxRetryTime=120, cacheDirectory=None):
self.__doc__.Obj.ValidateMethodInvocation()
super(AvisoGriddedWindSpeedModulus,
self).__init__(AvisoGriddedWindSpeedModulus.OPeNDAPURLsForProducts[productName],
username, password, timeout=timeout, maxRetryTime=maxRetryTime,
cacheDirectory=cacheDirectory)
self._DisplayName = u'Aviso ' + productName
def _GetDisplayName(self):
return self._DisplayName
OPeNDAPURLsForProducts = {
u'Global NRT Merged MWIND':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-nrt-global-merged-mwind',
}
Products = OPeNDAPURLsForProducts.keys()
Products.sort()
@classmethod
def CreateArcGISRasters(cls, username, password, productName,
outputWorkspace, mode=u'add',
rasterNameExpressions=['%(Region)s', '%(DataSeries)s', '%(Satellites)s',
'%(TemporalResolution)s', '%(Variable)s', '%%Y',
'%(DataSeries)s_%(Satellites)s_%(Variable)s_%%Y%%j.img'], rasterCatalog=None,
rotationOffset=None, spatialExtent=None,
linearUnit=u'Degrees', startDate=None, endDate=None,
timeout=60, maxRetryTime=120, cacheDirectory=None,
calculateStatistics=True, buildPyramids=False):
cls.__doc__.Obj.ValidateMethodInvocation()
grid = AvisoGriddedWindSpeedModulus(productName, username, password,
timeout, maxRetryTime, cacheDirectory)
_AvisoGriddedProduct.CreateArcGISRasters(grid, outputWorkspace, mode,
rasterNameExpressions, rasterCatalog, rotationOffset, spatialExtent,
linearUnit, startDate, endDate, calculateStatistics, buildPyramids)
return outputWorkspace
@classmethod
def CreateClimatologicalArcGISRasters(cls, username, password,
productName,
statistic, binType,
outputWorkspace, mode=u'add',
rasterNameExpressions=['%(Region)s', '%(DataSeries)s', '%(Satellites)s',
'%(TemporalResolution)s', '%(Variable)s',
u'%(ClimatologyBinType)s_Climatology',
u'%(DataSeries)s_%(Satellites)s_%(Variable)s_%(ClimatologyBinName)s_%(Statistic)s.img'],
binDuration=1, startDayOfYear=1,
rotationOffset=None,
spatialExtent=None, linearUnit=u'Degrees', startDate=None, endDate=None,
timeout=60, maxRetryTime=120,
cacheDirectory=None,
calculateStatistics=True,
buildPyramids=False):
cls.__doc__.Obj.ValidateMethodInvocation()
grid = AvisoGriddedWindSpeedModulus(productName, username, password,
timeout, maxRetryTime, cacheDirectory)
_AvisoGriddedProduct.CreateClimatologicalArcGISRasters(grid,
statistic, binType, outputWorkspace, mode, rasterNameExpressions,
binDuration, startDayOfYear, rotationOffset, spatialExtent, linearUnit,
startDate, endDate, calculateStatistics, buildPyramids)
return outputWorkspace
@classmethod
def InterpolateAtArcGISPoints(cls, username, password, productName,
points, valueField, tField,
method=u'Nearest', where=None, noDataValue=None,
timeout=60, maxRetryTime=120,
cacheDirectory=None,
orderByFields=None,
numBlocksToCacheInMemory=128, xBlockSize=16, yBlockSize=16, tBlockSize=3):
cls.__doc__.Obj.ValidateMethodInvocation()
grid = AvisoGriddedWindSpeedModulus(productName, username, password,
timeout, maxRetryTime, cacheDirectory)
_AvisoGriddedProduct.InterpolateAtArcGISPoints(grid, points,
valueField, tField, method, where, noDataValue, orderByFields,
numBlocksToCacheInMemory, xBlockSize, yBlockSize, tBlockSize)
return points
class AvisoGriddedSignificantWaveHeight(_AvisoGriddedProduct):
__doc__ = DynamicDocString()
def __init__(self, productName, username, password, timeout=60,
maxRetryTime=120, cacheDirectory=None):
self.__doc__.Obj.ValidateMethodInvocation()
super(AvisoGriddedSignificantWaveHeight,
self).__init__(AvisoGriddedSignificantWaveHeight.OPeNDAPURLsForProducts[productName],
username, password, timeout=timeout, maxRetryTime=maxRetryTime,
cacheDirectory=cacheDirectory)
self._DisplayName = u'Aviso ' + productName
def _GetDisplayName(self):
return self._DisplayName
OPeNDAPURLsForProducts = {
u'Global NRT Merged MSWH':
u'http://opendap.aviso.oceanobs.com/thredds/dodsC/dataset-nrt-global-merged-mswh',
}
Products = OPeNDAPURLsForProducts.keys()
Products.sort()
@classmethod
def CreateArcGISRasters(cls, username, password, productName,
outputWorkspace, mode=u'add',
rasterNameExpressions=['%(Region)s', '%(DataSeries)s', '%(Satellites)s',
'%(TemporalResolution)s', '%(Variable)s', '%%Y',
'%(DataSeries)s_%(Satellites)s_%(Variable)s_%%Y%%j.img'], rasterCatalog=None,
rotationOffset=None, spatialExtent=None,
linearUnit=u'Degrees', startDate=None, endDate=None,
timeout=60, maxRetryTime=120, cacheDirectory=None,
calculateStatistics=True, buildPyramids=False):
cls.__doc__.Obj.ValidateMethodInvocation()
grid = AvisoGriddedSignificantWaveHeight(productName, username,
password, timeout, maxRetryTime, cacheDirectory)
_AvisoGriddedProduct.CreateArcGISRasters(grid, outputWorkspace, mode,
rasterNameExpressions, rasterCatalog, rotationOffset, spatialExtent,
linearUnit, startDate, endDate, calculateStatistics, buildPyramids)
return outputWorkspace
@classmethod
def CreateClimatologicalArcGISRasters(cls, username, password,
productName,
statistic, binType,
outputWorkspace, mode=u'add',
rasterNameExpressions=['%(Region)s', '%(DataSeries)s', '%(Satellites)s',
'%(TemporalResolution)s', '%(Variable)s',
u'%(ClimatologyBinType)s_Climatology',
u'%(DataSeries)s_%(Satellites)s_%(Variable)s_%(ClimatologyBinName)s_%(Statistic)s.img'],
binDuration=1, startDayOfYear=1,
rotationOffset=None,
spatialExtent=None, linearUnit=u'Degrees', startDate=None, endDate=None,
timeout=60, maxRetryTime=120,
cacheDirectory=None,
calculateStatistics=True,
buildPyramids=False):
cls.__doc__.Obj.ValidateMethodInvocation()
grid = AvisoGriddedSignificantWaveHeight(productName, username,
password, timeout, maxRetryTime, cacheDirectory)
_AvisoGriddedProduct.CreateClimatologicalArcGISRasters(grid,
statistic, binType, outputWorkspace, mode, rasterNameExpressions,
binDuration, startDayOfYear, rotationOffset, spatialExtent, linearUnit,
startDate, endDate, calculateStatistics, buildPyramids)
return outputWorkspace
@classmethod
def InterpolateAtArcGISPoints(cls, username, password, productName,
points, valueField, tField,
method=u'Nearest', where=None, noDataValue=None,
timeout=60, maxRetryTime=120,
cacheDirectory=None,
orderByFields=None,
numBlocksToCacheInMemory=128, xBlockSize=16, yBlockSize=16, tBlockSize=3):
cls.__doc__.Obj.ValidateMethodInvocation()
grid = AvisoGriddedSignificantWaveHeight(productName, username,
password, timeout, maxRetryTime, cacheDirectory)
_AvisoGriddedProduct.InterpolateAtArcGISPoints(grid, points,
valueField, tField, method, where, noDataValue, orderByFields,
numBlocksToCacheInMemory, xBlockSize, yBlockSize, tBlockSize)
return points
###############################################################################
# Metadata: module
###############################################################################
from GeoEco.ArcGIS import ArcGISDependency
from GeoEco.Datasets.ArcGIS import _UseUnscaledDataDescription,
_CalculateStatisticsDescription, _BuildRATDescription,
_BuildPyramidsDescription
from GeoEco.Dependencies import PythonAggregatedModuleDependency
from GeoEco.Metadata import *
from GeoEco.OceanographicAnalysis.Eddies import OkuboWeissEddies,
_OkuboWeissAlgorithmDescription, _OkuboWeissReferences
from GeoEco.Types import *
AddModuleMetadata(shortDescription=_(u'Altimetry-derived products from Aviso
(http://www.aviso.oceanobs.com).'))
###############################################################################
# Metadata: _AvisoGriddedProduct class
###############################################################################
AddClassMetadata(_AvisoGriddedProduct,
shortDescription=_(u'An OPeNDAPGrid for a gridded product from Aviso.'),
longDescription=_(
u"""This class is intended for private use within GeoEco and is not
intended for external callers."""))
_AvisoGriddedProduct_LongDescription = _(
u"""The `Archiving, Validation and Interpretation of Satellite Oceanographic
data (Aviso) <http://www.aviso.oceanobs.com/>`_
group publishes various products derived from satellite altimetry
data, including estimates of sea surface height (SSH), geostrophic
currents, wind speed modulus, and significant wave height. To maximize
accuracy and spatial and temporal resolution and extent, Aviso merges
observations from multiple satellites, including Topex/Poseidon,
Jason-1, Jason-2, GFO, ERS-1, ERS-2, and EnviSat. Most Aviso products
are one of these "merged" datasets, although a few products are based
on observations from a single satellite.
Aviso publishes both along-track and gridded products. This %(name)s
processes gridded products only.
For SSH and geostrophic currents, Aviso provides global products in
Mercator projection, with a nominal cell size of 1/3 degree at the
equator (about 37 km in the Mercator coordinate system) and a
latitudinal extent of about 82 S to 82 N. Aviso also publishes several
higher resolution regional products. At the time this %(name)s was
written, these included the Mediterranean Sea and the Black Sea. Both
of these are in a geographic coordinate system with a cell size of 1/8
degree.
The SSH and geostrophic currents products are available in two forms:
the Mean Absolute Dynamic Topography (MADT) and the Mean Sea Level
Anomalies (MSLA). The MADT data are the actual SSH or geostrophic
currents while the MSLA data are anomalies, i.e. the differences from
a multi-year mean of SSH or currents.
For wind speed modulus and significant wave height, Aviso publishes
global products in a geographic coordinate system with a cell size of
1 degree and a latitudinal extent of 90 S to 90 N.
All products appear to be based on a spherical model of the Earth,
although the Aviso documentation is not clear about this. At the time
this %(name)s was written, chapter 2.1.7.2. of the the SSALTO/DUACS
User Handbook, titled Maps Projection, presented equations that
implied a sphere. This %(name)s assumes a sphere with a radius of
6371000 m.
Aviso publishes two parallel collections of products, the Near Real
Time (NRT) products and the Delayed Time (DT) products. The NRT
products are intended for users who need quick access to recent
observations. They have a time step of 1 day and are updated on a
continual basis. Aviso typically archives only the most recent year or
two of NRT data.
At the time this %(name)s was written, Aviso made the NRT products
available via two mechanisms: OPenDAP and netCDF files via FTP. The
OPeNDAP products lag the FTP products by 30 days. This %(name)s uses
OPeNDAP, so it can only access data that is at least 30 days old. If
you need access to more recent data, you can download NRT files from
the Aviso FTP server and use other MGET tools to work with them.
The DT products are intended for users who need a long term, more
accurate time series. The DT products incorporate more error
corrections and other processing steps that improve accuracy. They are
updated only every year or so but extend back to 1992. When they are
updated, the entire time series is often reprocessed with improved
algorithms.
Starting in January 2012, the DT products are available at a time step
of 7 days (weekly) or 1 day (daily). You may specify which temporal
resolution you prefer. Note that, unlike many other oceanographic
datasets, the weekly images are not created by aggregating the daily
products together (they are not produced taking mean of seven daily
images, for example). They are just a sparse selection of the daily
images: every seventh daily image exactly matches a weekly image,
pixel for pixel. Please see the Aviso documentation for more
information.
The DT products are subdivided into two parallel collections: the
"reference" products (DT-Ref) and the "updated" products (DT-Upd). The
DT-Ref products are based on a smaller number of satellites but are
designed to provide a consistent level of accuracy throughout the
entire time range of the data. The DT-Upd products are based on more
satellites and have variable accuracy depending on how many satellites
were used on a given date. In general, the DT-Upd products are more
accurate later in the time range, as more satellites were available.
Please consult the SSALTO/DUACS User Handbook for more information on
the Aviso products.
**References**
The
`SSALTO/DUACS User Handbook: (M)SLA and (M)ADT Near-Real Time and Delayed
Time Products
<http://www.aviso.oceanobs.com/fileadmin/documents/data/tools/hdbk_duacs.pdf>`_
provides detailed documentation on the Aviso products and an extensive
bibliography.
Please see
`these instructions
<http://www.aviso.oceanobs.com/en/data/tools/citation/index.html>`_
on how to cite Aviso products in your publications.""")
###############################################################################
# Metadata: AvisoGriddedSSH class
###############################################################################
AddClassMetadata(AvisoGriddedSSH,
shortDescription=_(u'An OPeNDAPGrid for a gridded SSH product from
Aviso.'),
longDescription=_AvisoGriddedProduct_LongDescription % {u'name': 'class'})
# Constructor
AddMethodMetadata(AvisoGriddedSSH.__init__,
shortDescription=_(u'Constructs a new AvisoGriddedSSH instance.'),
isExposedToPythonCallers=True,
dependencies=[PythonAggregatedModuleDependency('numpy')])
AddArgumentMetadata(AvisoGriddedSSH.__init__, u'self',
typeMetadata=ClassInstanceTypeMetadata(cls=AvisoGriddedSSH),
description=_(u'AvisoGriddedSSH instance.'))
AddArgumentMetadata(AvisoGriddedSSH.__init__, u'productName',
typeMetadata=UnicodeStringTypeMetadata(allowedValues=AvisoGriddedSSH.Products),
description=_(
u"""Aviso product to use. Please see
http://www.aviso.oceanobs.com/en/data/ for descriptions of the
products.
At the time of this writing, this tool supported all of the products
that Aviso made available for download over OPeNDAP. If you find that
Aviso publishes a new product that is not supported by this tool,
please contact the author of this tool to have support for it added.
Aviso does not make all of its products available over OPeNDAP. If the
product you need is not available, you can download the netCDF files
and use MGET's conversion utilities to create ArcGIS rasters from
them.
The product name that you must pass for this parameter is case
sensitive. If you invoke this tool programmatically, be sure to
specify the product name using the proper case."""),
arcGISDisplayName=_(u'Aviso sea surface height product'))
AddArgumentMetadata(AvisoGriddedSSH.__init__, u'temporalResolution',
typeMetadata=UnicodeStringTypeMetadata(allowedValues=[u'Daily',
u'Weekly'], makeLowercase=True),
description=_(
u"""Temporal resolution to use, either daily or weekly.
As of January 2012, Aviso provides most Delayed Time (DT) products in
both resolutions. Aviso provides Near Real Time (NRT) products only in
daily resolution. To access an NRT product with this tool, you must
select daily resolution.
Note that, unlike many other oceanographic datasets, the weekly images
are not created by aggregating the daily products together (they are
not produced taking mean of seven daily images, for example). They are
just a sparse selection of the daily images: every seventh daily image
exactly matches a weekly image, pixel for pixel. Please see the Aviso
documentation for more information."""),
arcGISDisplayName=_(u'Temporal resolution'))
AddArgumentMetadata(AvisoGriddedSSH.__init__, u'username',
typeMetadata=UnicodeStringTypeMetadata(),
description=_(
u"""Your Aviso username.
To access Aviso datasets with OPeNDAP, you must first obtain a
username and password from Aviso. Please see
http://www.aviso.oceanobs.com/en/data/ for instructions on obtaining a
username and password.
Starting August 2010, Aviso allowed temporary access to the general
public with the username "aviso-users" and the password "grid2010". If
you do not have a username and password yet, you can try those ones.
Aviso explained that those credentials would only work for a limited
time. If they do not work for you, please contact Aviso to obtain your
own unique username and password."""),
arcGISDisplayName=_(u'Aviso username'))
AddArgumentMetadata(AvisoGriddedSSH.__init__, u'password',
typeMetadata=UnicodeStringTypeMetadata(),
description=_(
u"""Your Aviso password.
Please see the documentation for the Aviso Username parameter above
for more information about the username and password parameters."""),
arcGISDisplayName=_(u'Aviso password'))
CopyArgumentMetadata(THREDDSCatalog.__init__, u'timeout',
AvisoGriddedSSH.__init__, u'timeout')
CopyArgumentMetadata(THREDDSCatalog.__init__, u'maxRetryTime',
AvisoGriddedSSH.__init__, u'maxRetryTime')
CopyArgumentMetadata(THREDDSCatalog.__init__, u'cacheDirectory',
AvisoGriddedSSH.__init__, u'cacheDirectory')
AddResultMetadata(AvisoGriddedSSH.__init__, u'grid',
typeMetadata=ClassInstanceTypeMetadata(cls=AvisoGriddedSSH),
description=_(u'AvisoGriddedSSH instance.'))
# Public method: AvisoGriddedSSH.CreateArcGISRasters
AddMethodMetadata(AvisoGriddedSSH.CreateArcGISRasters,
shortDescription=_(u'Creates rasters for an Aviso gridded sea surface
height product.'),
longDescription=_AvisoGriddedProduct_LongDescription % {u'name': 'tool'},
isExposedToPythonCallers=True,
isExposedByCOM=True,
isExposedAsArcGISTool=True,
arcGISDisplayName=_(u'Create Rasters for Aviso SSH Product'),
arcGISToolCategory=_(u'Data Products\\Aviso\\Sea Surface Height
Products'),
dependencies=[ArcGISDependency(9, 1),
PythonAggregatedModuleDependency('numpy')])
AddArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'cls',
typeMetadata=ClassOrClassInstanceTypeMetadata(cls=AvisoGriddedSSH),
description=_(u'AvisoGriddedSSH class or instance.'))
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'username',
AvisoGriddedSSH.CreateArcGISRasters, u'username')
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'password',
AvisoGriddedSSH.CreateArcGISRasters, u'password')
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'productName',
AvisoGriddedSSH.CreateArcGISRasters, u'productName')
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'temporalResolution',
AvisoGriddedSSH.CreateArcGISRasters, u'temporalResolution')
AddArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'outputWorkspace',
typeMetadata=ArcGISWorkspaceTypeMetadata(createParentDirectories=True),
description=_(
u"""Directory or geodatabase to receive the rasters.
Unless you have a specific reason to store the rasters in a
geodatabase, we recommend you store them in a directory because it
will be much faster and allows the rasters to be organized in a tree.
If you do store the rasters in a geodatabase, you must change the
Raster Name Expressions parameter; see below for more
information."""),
arcGISDisplayName=_(u'Output workspace'))
AddArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'mode',
typeMetadata=UnicodeStringTypeMetadata(allowedValues=[u'Add',
u'Replace'], makeLowercase=True),
description=_(
u"""Overwrite mode, one of:
* Add - create rasters that do not exist and skip those that already
exist. This is the default.
* Replace - create rasters that do not exist and overwrite those that
already exist.
The ArcGIS Overwrite Outputs geoprocessing setting has no effect on
this tool. If 'Replace' is selected the rasters will be overwritten,
regardless of the ArcGIS Overwrite Outputs setting."""),
arcGISDisplayName=_(u'Overwrite mode'))
AddArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters,
u'rasterNameExpressions',
typeMetadata=ListTypeMetadata(elementType=UnicodeStringTypeMetadata(),
minLength=1),
description=_(
u"""List of expressions specifying how the output rasters should be
named.
The default expression assumes you are storing rasters in a file
system directory and creates them in a tree structure with levels for
the region, data series, satellite, variable name, and year. When
storing rasters in a directory, the final expression specifies the
file name of the raster and any preceding expressions specify
subdirectories. The extension of the final expression determines the
output raster format: .asc for ArcInfo ASCII Grid, .bmp for BMP, .gif
for GIF, .img for an ERDAS IMAGINE file, .jpg for JPEG, .jp2 for JPEG
2000, .png for PNG, .tif for GeoTIFF, or no extension for ArcInfo
Binary Grid. The default expression uses .img.
When storing rasters in a geodatabase, you should provide only one
expression. That expression specifies the raster's name.
Each expression may contain any sequence of characters permitted by
the output workspace. Each expression may optionally contain one or
more of the following case-sensitive codes. The tool replaces the
codes with appropriate values when creating each raster:
* %(Region)s - Region of the output raster, either "global",
"medsea", or "blacksea".
* %(DataSeries)s - Aviso data series of the output raster, either
"dt_ref", "dt_upd", or "nrt".
* %(Satellites)s - Satellites used to produce the raster, either
"merged" for multiple satellites or "tpj1" for the Topex/Poseidon /
Jason-1 sequential pair. Please see the Aviso documentation for more
information on how Aviso products are created.
* %(TemporalResolution)s - Temporal resolution of the output raster,
either "daily" or "weekly".
* %(Variable)s - Aviso variable represented in the output raster. With
the exception of the wind speed modulus ("mwind") and significant
wave height ("mswh") products, the variable name indicates whether
the data are absolute values (Mean Absolute Dynamic Topography, or
MADT) or anomalies (Mean Sea Level Anomalies, or MSLA), as well as
what geophysical variable is represented (h for sea surface height,
u for eastward geostrophic water velocity, v for northward
geostrophic water velocity, and err for formal mapping error). For
example, the variable name "msla_h" represents sea surface height
anomalies.
* %%Y - four-digit year of the raster.
* %%m - two-digit month of the raster.
* %%d - two-digit day of the month of the raster.
* %%j - three-digit day of the year of the raster.
"""),
arcGISDisplayName=_(u'Raster name expressions'))
AddArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'rasterCatalog',
typeMetadata=ArcGISRasterCatalogTypeMetadata(canBeNone=True,
mustBeDifferentThanArguments=[u'outputWorkspace'],
createParentDirectories=True),
description=_(
u"""Raster catalog to create.
This parameter requires ArcGIS 9.3 or later.
If this parameter is specified, after the tool finishes creating
rasters, it will create an unmanaged raster catalog and import all of
the rasters in the output workspace into it. The catalog will have
fields for all of the codes specified in the Raster Name Expressions
as well as fields for the start date, center date, and end date of
each raster. You can then use the catalog to create animations using
the ArcGIS 10 Time Slider.
WARNING: The raster catalog will be deleted and re-created each time
the tool is executed. Beware of this if you plan to add your own
fields to the catalog after it has been created."""),
direction=u'Output',
arcGISDisplayName=_(u'Output raster catalog'),
dependencies=[ArcGISDependency(9, 3)])
AddArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'rotationOffset',
typeMetadata=FloatTypeMetadata(canBeNone=True),
description=_(
u"""Distance to rotate the outputs about the polar axis, in the units
specified by the Linear Units parameter. If not provided, the outputs
will be centered on the meridian 179.83333333333333 (in the Pacific
ocean). This value was chosen by Aviso.
Use this parameter to shift the center longitude of the outputs to a
different location. Positive values shift it to the east, negative
values to the west. For example, to center the outputs on the Prime
Meridian, provide -180 for this parameter and set the Linear Units
parameter to Degrees.
The outputs can only be rotated in whole cells of the Aviso grids. The
value you provide will be rounded off to the closest cell. Because of
that, and because Aviso centered their images on meridian
179.83333333333333, it is not possible to center the images exactly on
the Prime Meridian."""),
arcGISDisplayName=_(u'Rotate by'),
arcGISCategory=_(u'Spatiotemporal extent'))
AddArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'spatialExtent',
typeMetadata=EnvelopeTypeMetadata(canBeNone=True),
description=_(
u"""Spatial extent of the outputs, in the units specified by the
Linear Units parameter.
This parameter is applied after the rotation parameter and uses
coordinates that result after rotation.
The outputs can only be clipped in whole grid cells. The values you
provide will be rounded off to the closest cell."""),
arcGISDisplayName=_(u'Spatial extent'),
arcGISCategory=_(u'Spatiotemporal extent'))
AddArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'linearUnit',
typeMetadata=UnicodeStringTypeMetadata(allowedValues=[u'Degrees',
u'Meters'], makeLowercase=True),
description=_(
u"""Specifies the unit of the Spatial Extent parameter, one of:
* Degrees - Decimal degrees.
* Meters - Meters, in the Aviso Mercator coordinate system. This
option is only valid for Aviso products that use that coordinate
system.
"""),
arcGISDisplayName=_(u'Linear unit'),
arcGISCategory=_(u'Spatiotemporal extent'))
AddArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'startDate',
typeMetadata=DateTimeTypeMetadata(canBeNone=True),
description=_(
u"""Start date for the outputs to create.
Outputs will be created for images that occur on or after the start
date and on or before the end date. If you do not provide a start
date, the date of the first available image will be used. For Delayed
Time (DT) products, it will ususally be 14 October 1992. For Near Real
Time (NRT) products, it will usually be much closer to the current
date.
The time component of the start date is ignored."""),
arcGISDisplayName=_(u'Start date'),
arcGISCategory=_(u'Spatiotemporal extent'))
AddArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'endDate',
typeMetadata=DateTimeTypeMetadata(canBeNone=True),
description=_(
u"""End date for the outputs to create.
Outputs will be created for images that occur on or after the start
date and on or before the end date. If you do not specify an end date,
the date of the most recent image will be used. For Delayed Time (DT)
products, this may be as much as a year or two old, depending on when
Aviso last reprocessed the product. For Near Real Time (NRT) products,
it will usually be 30 days before the current date.
The time component of the end date is ignored."""),
arcGISDisplayName=_(u'End date'),
arcGISCategory=_(u'Spatiotemporal extent'))
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'timeout',
AvisoGriddedSSH.CreateArcGISRasters, u'timeout')
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'maxRetryTime',
AvisoGriddedSSH.CreateArcGISRasters, u'maxRetryTime')
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'cacheDirectory',
AvisoGriddedSSH.CreateArcGISRasters, u'cacheDirectory')
AddArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters,
u'calculateStatistics',
typeMetadata=BooleanTypeMetadata(),
description=_CalculateStatisticsDescription,
arcGISDisplayName=_(u'Calculate statistics'),
arcGISCategory=_(u'Additional raster processing options'))
AddArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'buildPyramids',
typeMetadata=BooleanTypeMetadata(),
description=_BuildPyramidsDescription,
arcGISDisplayName=_(u'Build pyramids'),
arcGISCategory=_(u'Additional raster processing options'))
AddResultMetadata(AvisoGriddedSSH.CreateArcGISRasters,
u'updatedOutputWorkspace',
typeMetadata=ArcGISWorkspaceTypeMetadata(),
description=_(u'Updated output workspace.'),
arcGISDisplayName=_(u'Updated output workspace'),
arcGISParameterDependencies=[u'outputWorkspace'])
# Public method: AvisoGriddedSSH.CreateClimatologicalArcGISRasters
AddMethodMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
shortDescription=_(u'Creates climatological rasters for an Aviso gridded
sea surface height product.'),
longDescription=_(
u"""This tool produces rasters showing the climatological average
value (or other statistic) of an Aviso product. Given a desired
product, a statistic, and a climatological bin definition, this tool
efficiently downloads the product's images using the `OPeNDAP
<http://opendap.org/>`_ protocol, classifies them into bins, and
produces a single raster for each bin. Each cell of the raster is
produced by calculating the statistic on the values of that cell
extracted from all of the rasters in the bin.
""") + _AvisoGriddedProduct_LongDescription % {u'name': 'tool'},
isExposedToPythonCallers=True,
isExposedByCOM=True,
isExposedAsArcGISTool=True,
arcGISDisplayName=_(u'Create Climatological Rasters for Aviso SSH
Product'),
arcGISToolCategory=_(u'Data Products\\Aviso\\Sea Surface Height
Products'),
dependencies=[ArcGISDependency(9, 1),
PythonAggregatedModuleDependency('numpy')])
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'cls',
AvisoGriddedSSH.CreateClimatologicalArcGISRasters, u'cls')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'username',
AvisoGriddedSSH.CreateClimatologicalArcGISRasters, u'username')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'password',
AvisoGriddedSSH.CreateClimatologicalArcGISRasters, u'password')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'productName',
AvisoGriddedSSH.CreateClimatologicalArcGISRasters, u'productName')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters,
u'temporalResolution', AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'temporalResolution')
AddArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'statistic',
typeMetadata=UnicodeStringTypeMetadata(allowedValues=[u'Count',
u'Maximum', u'Mean', u'Minimum', u'Range', u'Standard Deviation', u'Sum'],
makeLowercase=True),
description=_(
u"""Statistic to calculate for each cell, one of:
* Count - number of images in which the cell had data.
* Maximum - maximum value for the cell.
* Mean - mean value for the cell, calculated as the sum divided by the
count.
* Minimum - minimum value for the cell.
* Range - range for the cell, calculated as the maximum minus the
minimum.
* Standard Deviation - sample standard deviation for the cell
(i.e. the standard deviation estimated using Bessel's correction).
In order to calculate this, there must be at least two images with
data for the cell.
* Sum - the sum for the cell.
"""),
arcGISDisplayName=_(u'Statistic'))
AddArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'binType',
typeMetadata=UnicodeStringTypeMetadata(allowedValues=[u'Daily',
u'Monthly', u'Cumulative'], makeLowercase=True),
description=_(
u"""Climatology bins to use, one of:
* Daily - daily bins. Images will be classified into bins according to
their days of the year. The number of days in each bin is determined
by the Climatology Bin Duration parameter (which defaults to 1). The
number of bins is calculated by dividing 365 by the bin duration. If
there is no remainder, then that number of bins will be created;
images for the 366th day of leap years will be counted in the bin
that includes day 365. For example, if the bin duration is 5, 73
bins will be created. The first will be for days 1-5, the second
will be for days 5-10, and so on; the 73rd bin will be for days
361-365 during normal years and 361-366 during leap years. If
dividing 365 by the bin duration does yield a remainder, then one
additional bin will be created to hold the remaining days. For
example, if the bin duration is 8, 46 bins will be created. The
first will be for days 1-8, the second for days 9-16, and so on; the
46th will be for days 361-365 during normal years and 361-366 during
leap years.
* Monthly - monthly bins. Images will be classified into bins according to
their months of the year. The number of months in each bin is
determined by the Climatology Bin Duration parameter (which defaults
to 1). The number of bins is calculated by dividing 12 by the bin
duration. If there is no remainder, then that number of bins will be
created. For example, if the bin duration is 3, there will be four
bins: January-March, April-June, July-September, and
October-December. If there is a remainder, then one additional bin
will be created. For example, if the bin duration is 5, 3 bins will
be created: January-May, June-October, November-December.
* Cumulative - one bin. A single climatology raster will be calculated
from the entire dataset. The Bin Duration parameter is ignored.
For Daily and Monthly, to adjust when the bins start (e.g. to center a
4-bin seasonal climatology on solstices and equinoxes), use the Start
Climatology At This Day Of The Year parameter."""),
arcGISDisplayName=_(u'Climatology bin type'))
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'outputWorkspace',
AvisoGriddedSSH.CreateClimatologicalArcGISRasters, u'outputWorkspace')
AddArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'mode',
typeMetadata=UnicodeStringTypeMetadata(allowedValues=[u'Add',
u'Replace'], makeLowercase=True),
description=_(
u"""Overwrite mode, one of:
* Add - create rasters that do not exist and skip those that already
exist. This is the default.
* Replace - create rasters that do not exist and overwrite those that
already exist. Choose this option when you want to regenerate the
climatologies using the latest satellite images.
The ArcGIS Overwrite Outputs geoprocessing setting has no effect on
this tool. If 'Replace' is selected the rasters will be overwritten,
regardless of the ArcGIS Overwrite Outputs setting."""),
arcGISDisplayName=_(u'Overwrite mode'))
AddArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'rasterNameExpressions',
typeMetadata=ListTypeMetadata(elementType=UnicodeStringTypeMetadata(),
minLength=1),
description=_(
u"""List of expressions specifying how the output rasters should be
named.
The default expression assumes you are storing rasters in a file
system directory and creates them in a tree structure with levels for
the region, data series, satellite, variable name, and climatology
type. When storing rasters in a directory, the final expression
specifies the file name of the raster and any preceding expressions
specify subdirectories. The extension of the final expression
determines the output raster format: .asc for ArcInfo ASCII Grid, .bmp
for BMP, .gif for GIF, .img for an ERDAS IMAGINE file, .jpg for JPEG,
.jp2 for JPEG 2000, .png for PNG, .tif for GeoTIFF, or no extension
for ArcInfo Binary Grid. The default expression uses .img.
When storing rasters in a geodatabase, you should provide only one
expression. That expression specifies the raster's name.
Each expression may contain any sequence of characters permitted by
the output workspace. Each expression may optionally contain one or
more of the following case-sensitive codes. The tool replaces the
codes with appropriate values when creating each raster:
* %(Region)s - Region of the output raster, either "global",
"medsea", or "blacksea".
* %(DataSeries)s - Aviso data series of the output raster, either
"dt_ref", "dt_upd", or "nrt".
* %(Satellites)s - Satellites used to produce the raster, either
"merged" for multiple satellites or "tpj1" for the Topex/Poseidon /
Jason-1 sequential pair. Please see the Aviso documentation for more
information on how Aviso products are created.
* %(TemporalResolution)s - Temporal resolution of the images used to
produce the raster, either "daily" or "weekly".
* %(Variable)s - Aviso variable represented in the output raster. With
the exception of the wind speed modulus ("mwind") and significant
wave height ("mswh") products, the variable name indicates whether
the data are absolute values (Mean Absolute Dynamic Topography, or
MADT) or anomalies (Mean Sea Level Anomalies, or MSLA), as well as
what geophysical variable is represented (h for sea surface height,
u for eastward geostrophic water velocity, v for northward
geostrophic water velocity, and err for formal mapping error). For
example, the variable name "msla_h" represents sea surface height
anomalies.
* %(ClimatologyBinType)s - type of the climatology bin, either "Daily"
if 1-day bins, "Xday" if multi-day bins (X is replaced by the
duration), "Monthly" if 1-month bins, "Xmonth" if multi-month bins,
or "Cumulative".
* %(ClimatologyBinName)s - name of the climatology bin corresponding
represented by the output raster, either "dayXXX" for 1-day bins
(XXX is replaced by the day of the year), "daysXXXtoYYY" for
multi-day bins (XXX is replaced by the first day of the bin, YYY is
replaced by the last day), "monthXX" for 1-month bins (XX is
replaced by the month), "monthXXtoYY" (XX is replaced by the first
month of the bin, YY by the last month), or "cumulative".
* %(Statistic)s - statistic that was calculated, in lowercase and with
spaces replaced by underscores; one of: "count", "maximum", "mean",
"minimum", "range", "standard_deviation", "sum".
If the Bin Type is "Daily", the following additional codes are
available:
* %(FirstDay)i - first day of the year of the climatology bin
represented by the output raster.
* %(LastDay)i - last day of the year of the climatology bin
represented by the output raster. For 1-day climatologies, this will
be the same as %(FirstDay)i.
If the Bin Type is "Monthly", the following additional codes are
available:
* %(FirstMonth)i - first month of the climatology bin represented by
the output raster.
* %(DayOfFirstMonth)i - first day of the first month of the
climatology bin represented by the output raster.
* %(LastMonth)i - last month of the climatology bin represented by
the output raster.
* %(DayOfLastMonth)i - last day of the last month of the climatology
bin represented by the output raster.
Note that the additional codes are integers and may be formatted using
"printf"-style formatting codes. For example, to format the FirstDay
as a three-digit number with leading zeros::
%(FirstDay)03i
"""),
arcGISDisplayName=_(u'Raster name expressions'))
AddArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'binDuration',
typeMetadata=IntegerTypeMetadata(minValue=1),
description=_(
u"""Duration of each bin, in days or months, when the Bin Type is
Daily or Monthly, respectively. The default is 1. See the Bin Type
parameter for more information."""),
arcGISDisplayName=_(u'Climatology bin duration'),
arcGISCategory=_(u'Climatology options'))
AddArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'startDayOfYear',
typeMetadata=IntegerTypeMetadata(minValue=1, maxValue=365),
description=_(
u"""Use this parameter to create bin defintions that deviate from the
traditional calendar. The interpretation of this parameter depends on
the Bin Type:
* Daily - this parameter defines the day of the year of the first
climatology bin. For example, if this parameter is 100 and the Bin
Duration is 10, the first bin will be numbered 100-109. The bin
spanning the end of the year will be numbered 360-004. The last bin
will be numbered 095-099. To define a four-bin climatology with bins
that are centered approximately on the equinoxes and solstices
(i.e., a seasonal climatology), set the Bin Duration to 91 and the
start day to 36 (February 5). This will produce bins with dates
036-126, 127-217, 218-308, and 309-035.
* Monthly - this parameter defines the day of the year of the first
climatology bin, and the day of the month of that bin will be used
as the first day of the month of all of the bins. For example, if
this parameter is 46, which is February 15, and the Bin Duration is
1, then the bins will be February 15 - March 14, March 15 - April
14, April 15 - May 14, and so on. Calculations involving this
parameter always assume a 365 day year (a non-leap year). To define
a four-bin climatology using the months traditionally associated
with spring, summer, fall, and winter in many northern hemisphere
cultures, set the Bin Duration to 3 and the start day to 60 (March
1). This will produce bins with months 03-05, 06-08, 09-11, and
12-02.
* Cumulative - this parameter is ignored.
"""),
arcGISDisplayName=_(u'Start climatology at this day of the year'),
arcGISCategory=_(u'Climatology options'))
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'rotationOffset',
AvisoGriddedSSH.CreateClimatologicalArcGISRasters, u'rotationOffset')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'spatialExtent',
AvisoGriddedSSH.CreateClimatologicalArcGISRasters, u'spatialExtent')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'linearUnit',
AvisoGriddedSSH.CreateClimatologicalArcGISRasters, u'linearUnit')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'startDate',
AvisoGriddedSSH.CreateClimatologicalArcGISRasters, u'startDate')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'endDate',
AvisoGriddedSSH.CreateClimatologicalArcGISRasters, u'endDate')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'timeout',
AvisoGriddedSSH.CreateClimatologicalArcGISRasters, u'timeout')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'maxRetryTime',
AvisoGriddedSSH.CreateClimatologicalArcGISRasters, u'maxRetryTime')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'cacheDirectory',
AvisoGriddedSSH.CreateClimatologicalArcGISRasters, u'cacheDirectory')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters,
u'calculateStatistics', AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'calculateStatistics')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'buildPyramids',
AvisoGriddedSSH.CreateClimatologicalArcGISRasters, u'buildPyramids')
CopyResultMetadata(AvisoGriddedSSH.CreateArcGISRasters,
u'updatedOutputWorkspace', AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'updatedOutputWorkspace')
# Public method: AvisoGriddedSSH.InterpolateAtArcGISPoints
AddMethodMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
shortDescription=_(u'Interpolates the values of an Aviso gridded sea
surface height product at points.'),
longDescription=_(
u"""This tool performs the same basic operation as the ArcGIS Spatial
Analyst's Extract Values to Points tool, but it reads data directly
from Aviso's servers using the `OPeNDAP <http://opendap.org/>`_
protocol, rather than reading rasters stored on your machine.
""") + _AvisoGriddedProduct_LongDescription % {u'name': 'tool'},
isExposedToPythonCallers=True,
isExposedByCOM=True,
isExposedAsArcGISTool=True,
arcGISDisplayName=_(u'Interpolate Aviso SSH Product at Points'),
arcGISToolCategory=_(u'Data Products\\Aviso\\Sea Surface Height
Products'),
dependencies=[ArcGISDependency(9, 1),
PythonAggregatedModuleDependency('numpy')])
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'cls',
AvisoGriddedSSH.InterpolateAtArcGISPoints, u'cls')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'username',
AvisoGriddedSSH.InterpolateAtArcGISPoints, u'username')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'password',
AvisoGriddedSSH.InterpolateAtArcGISPoints, u'password')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'productName',
AvisoGriddedSSH.InterpolateAtArcGISPoints, u'productName')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters,
u'temporalResolution', AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'temporalResolution')
AddArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'points',
typeMetadata=ArcGISFeatureLayerTypeMetadata(mustExist=True,
allowedShapeTypes=[u'Point']),
description=_(
u"""Points at which values should be interpolated.
The Aviso products use either a Mercator or a geographic coordinate
system, depending on the product. Both are based on a spherical model
of the Earth a with radius of 6371000 m. It is recommended but not
required that the points use the same coordinate system. If they do
not, this tool will attempt to project the points to the Aviso
coordinate system prior to doing the interpolation. This may fail if a
datum transformation is required, in which case you will have to
manually project the points to the Aviso coordinate system before
using this tool."""),
arcGISDisplayName=_(u'Point features'))
AddArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'valueField',
typeMetadata=ArcGISFieldTypeMetadata(mustExist=True,
allowedFieldTypes=[u'short', u'long', u'float', u'double']),
description=_(
u"""Field of the points to receive the interpolated values.
The field must have a floating-point or integer data type. If the
field cannot represent the interpolated value at full precision, the
closest approximation will be stored and a warning will be issued.
This will happen, for example, when you interpolate values into an
integer field."""),
arcGISDisplayName=_(u'Field to receive the interpolated values'),
arcGISParameterDependencies=[u'points'])
AddArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'tField',
typeMetadata=ArcGISFieldTypeMetadata(mustExist=True,
allowedFieldTypes=[u'date']),
description=_(
u"""Field of the points that specifies the date and time of the point.
The field must have a date or datetime data type. If the field can
only represent dates with no time component, the time will assumed to
be 00:00:00.
The Aviso products use the UTC time zone, and it is assumed that the
points do as well."""),
arcGISDisplayName=_(u'Date field'),
arcGISParameterDependencies=[u'points'])
AddArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'method',
typeMetadata=UnicodeStringTypeMetadata(allowedValues=[u'Nearest',
u'Linear'], makeLowercase=True),
description=_(
u"""Interpolation method to use, one of:
* Nearest - nearest neighbor interpolation. The interpolated value
will simply be the value of the cell that contains the point. This
is the default.
* Linear - linear interpolation (also known as trilinear
interpolation). This method averages the values of the eight nearest
cells in the x, y, and time dimensions, weighting the contribution
of each cell by the area of it that would be covered by a
hypothetical cell centered on the point being interpolated. If the
cell containing the point contains NoData, the result is NoData. If
any of the other seven cells contain NoData, they are omitted from
the average, and the result is based on the weighted average of the
cells that do contain data. This is the same algorithm implemented
by the ArcGIS Spatial Analyst's Extract Values to Points tool.
"""),
arcGISDisplayName=_(u'Interpolation method'))
AddArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'where',
typeMetadata=SQLWhereClauseTypeMetadata(canBeNone=True),
description=_(
u"""SQL WHERE clause expression that specifies the subset of points to
use. If this parameter is not provided, all of the points will be
used.
The exact syntax of this expression depends on the type of feature
class you're using. ESRI recommends you reference fields using the
following syntax:
* For shapefiles, ArcInfo coverages, or feature classes stored in file
geodatabases, ArcSDE geodatabases, or ArcIMS, enclose field names in
double quotes: "MY_FIELD"
* For feature classes stored in personal geodatabases, enclose field
names in square brackets: [MY_FIELD].
"""),
arcGISDisplayName=_(u'Where clause'),
arcGISCategory=_(u'Interpolation options'),
arcGISParameterDependencies=[u'points'])
AddArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'noDataValue',
typeMetadata=FloatTypeMetadata(canBeNone=True),
description=_(
u"""Value to use when the interpolated value is NoData.
If a value is not provided for this parameter, a database NULL value
will be stored in the field when the interpolated value is NoData. If
the field cannot store NULL values, as is the case with shapefiles,
the value -9999 will be used."""),
arcGISDisplayName=_(u'Value to use when the interpolated value is
NoData'),
arcGISCategory=_(u'Interpolation options'))
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'timeout',
AvisoGriddedSSH.InterpolateAtArcGISPoints, u'timeout')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'maxRetryTime',
AvisoGriddedSSH.InterpolateAtArcGISPoints, u'maxRetryTime')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'cacheDirectory',
AvisoGriddedSSH.InterpolateAtArcGISPoints, u'cacheDirectory')
AddArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'orderByFields',
typeMetadata=ListTypeMetadata(elementType=ArcGISFieldTypeMetadata(mustExist=True),
minLength=1, canBeNone=True),
description=_(
u"""Fields for defining the order in which the points are processed.
The points may be processed faster if they are ordered
spatiotemporally, such that points that are close in space and time
are processed sequentially. Ordering the points this way increases the
probability that the value of a given point can be interpolated from
data that is cached in memory, rather than from data that must be read
from the disk or network, which is much slower. Choose fields that
faciliate this. For example, if your points represent the locations of
animals tracked by satellite telemetry, order the processing first by
the animal ID and then by the transmission date or number.
If you omit this parameter, the Date Field will be used automatically.
This parameter requires ArcGIS 9.2 or later."""),
arcGISDisplayName=_(u'Order by fields'),
arcGISCategory=_(u'Performance tuning options'),
arcGISParameterDependencies=[u'points'],
dependencies=[ArcGISDependency(9, 2)])
AddArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'numBlocksToCacheInMemory',
typeMetadata=IntegerTypeMetadata(minValue=0, canBeNone=True),
description=_(
u"""Maximum number of blocks of Aviso data to cache in memory.
To minimize the number of times that the disk or network must be
accessed, this tool employs a simple caching strategy, in addition to
disk caching described by the Cache Directory parameter. When it
processes the first point, it reads a square block of cells centered
on that point and caches it in memory. When it processes the second
and subsequent points, it first checks whether the cells needed for
that point are contained by the block cached in memory. If so, it
processes that point using the in-memory block, rather than reading
from disk or the network again. If not, it reads another square block
centered on that point and adds it to the cache.
The tool processes the remaining points, adding additional blocks to
the cache, as needed. To prevent the cache from exhausing all memory,
it is only permitted to grow to the size specified by this parameter.
When the cache is full but a new block is needed, the oldest block is
discarded to make room for the newest block.
The maximum size of the cache in bytes may be calculated by
multiplying 4 by the number of blocks and by the block sizes. For
example, if there are 128 blocks with size x=32 by y=32 by t=2, the
maximum size of the cache is 1048576 bytes (1 MB).
If this parameter is 0, no blocks will be cached in memory."""),
arcGISDisplayName=_(u'Number of blocks of data to cache in memory'),
arcGISCategory=_(u'Performance tuning options'))
AddArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'xBlockSize',
typeMetadata=IntegerTypeMetadata(minValue=0, canBeNone=True),
description=_(
u"""Size of the blocks of Aviso data to cache in memory, in the x
direction (longitude). The size is given as the number of cells.
If this parameter is 0, no blocks will be cached in memory."""),
arcGISDisplayName=_(u'In-memory cache block size, in X direction'),
arcGISCategory=_(u'Performance tuning options'))
AddArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'yBlockSize',
typeMetadata=IntegerTypeMetadata(minValue=0, canBeNone=True),
description=_(
u"""Size of the blocks of Aviso data to cache in memory, in the y
direction (latitude). The size is given as the number of cells.
If this parameter is 0, no blocks will be cached in memory."""),
arcGISDisplayName=_(u'In-memory cache block size, in Y direction'),
arcGISCategory=_(u'Performance tuning options'))
AddArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'tBlockSize',
typeMetadata=IntegerTypeMetadata(minValue=0, canBeNone=True),
description=_(
u"""Size of the blocks of Aviso data to cache in memory, in the t
direction (time). The size is given as the number of cells.
If this parameter is 0, no blocks will be cached in memory."""),
arcGISDisplayName=_(u'In-memory cache block size, in T direction'),
arcGISCategory=_(u'Performance tuning options'))
AddResultMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'updatedPoints',
typeMetadata=ArcGISFeatureLayerTypeMetadata(),
description=_(u'Updated points.'),
arcGISDisplayName=_(u'Updated points'),
arcGISParameterDependencies=[u'points'])
# Public method: AvisoGriddedSSH.FindOkuboWeissEddies
AddMethodMetadata(AvisoGriddedSSH.FindOkuboWeissEddies,
shortDescription=_(u'Creates rasters showing the cores of geostrophic
eddies detected in an Aviso gridded sea surface height product using the
Okubo-Weiss algorithm.'),
longDescription=_(
u"""Given an Aviso sea surface height (SSH) product and Okubo-Weiss
algorithm parameters, this tool efficiently downloads SSH images using
the `OPeNDAP <http://opendap.org/>`_ protocol, executes the
Okubo-Weiss eddy-detection algorithm, and produces a time series of
rasters showing eddy cores.
To use this tool, MATLAB 2007b or the MATLAB Component Runtime (MCR)
7.7 must be installed. You can download a free copy of the MCR 7.7
from http://code.nicholas.duke.edu/projects/mget/wiki/MCR.
**The Okubo-Weiss Algorithm**
""") + _OkuboWeissAlgorithmDescription % {u'name': 'tool'} + _("""
**Aviso Products**
""") + _AvisoGriddedProduct_LongDescription % {u'name': 'tool'} + """
""" + _OkuboWeissReferences,
isExposedToPythonCallers=True,
isExposedByCOM=True,
isExposedAsArcGISTool=True,
arcGISDisplayName=_(u'Find Okubo-Weiss Eddies in Aviso SSH Product'),
arcGISToolCategory=_(u'Data Products\\Aviso\\Sea Surface Height
Products'),
dependencies=[ArcGISDependency(9, 1),
PythonAggregatedModuleDependency('numpy')])
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'cls',
AvisoGriddedSSH.FindOkuboWeissEddies, u'cls')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'username',
AvisoGriddedSSH.FindOkuboWeissEddies, u'username')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'password',
AvisoGriddedSSH.FindOkuboWeissEddies, u'password')
AddArgumentMetadata(AvisoGriddedSSH.FindOkuboWeissEddies, u'productName',
typeMetadata=UnicodeStringTypeMetadata(allowedValues=AvisoGriddedSSH.ProductsForEddyDetection),
description=_(
u"""Aviso SSH product to use for eddy detection. Please see
http://www.aviso.oceanobs.com/en/data/ for descriptions of the
products.
An important question is whether to use Mean Sea Level Anomalies
(MSLA) or Mean Absolute Dynamic Topography (MADT). Most published
studies that used the Okubo-Weiss algorithm for eddy detection used
the anomalies (MSLA). But it is not clear that MSLA is a better choice
than MADT.
According to Stephanie Henson, she used MSLA in Henson et al. (2007)
because her implementation of the algorithm determined eddy polarity
by checking whether the eddy had positive or negative SSH
(anticyclonic or cyclonic polarity, respectively). For that approach
to work, the algorithm needed to know whether the eddy's SSH was above
or below the mean sea surface. Thus, she needed anomalies.
The problem with anomalies is that they may not produce good results
in regions of persistent but dynamic SSH gradients, such as western
boundary currents like the Gulf Stream or Kuroshio Current. Henson et
al. did not suffer from that problem because their study concerned a
region that did not have such currents. To address this problem, our
implementation of the Okubo-Weiss method detects eddy polarity by
looking at the curvature of the sea surface for the eddy: a
concave-down eddy is anticyclonic; a concave-up eddy is cyclonic. This
approach allows the absolute sea surface (MADT) to be used instead of
the anomalies. If your study area includes strong persistent SSH
gradients, you may obtain better results with MADT instead of MSLA. We
recommend you try both and compare the results carefully.
At the time of this writing, this tool supported all of the products
that Aviso made available for download over OPeNDAP. If you find that
Aviso publishes a new product that is not supported by this tool,
please contact the author of this tool to have support for it added.
The product name that you must pass for this parameter is case
sensitive. If you invoke this tool programmatically, be sure to
specify the product name using the proper case."""),
arcGISDisplayName=_(u'Aviso sea surface height product'))
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters,
u'temporalResolution', AvisoGriddedSSH.FindOkuboWeissEddies,
u'temporalResolution')
AddArgumentMetadata(AvisoGriddedSSH.FindOkuboWeissEddies, u'outputWorkspace',
typeMetadata=ArcGISWorkspaceTypeMetadata(createParentDirectories=True),
description=_(
u"""Directory or geodatabase to receive the rasters.
The rasters will have the same geospatial characteristics as the Aviso
SSH product used to create them (e.g. spatial reference, cell size,
extent, and so on). They will contain 32-bit signed integers with the
following values:
* NoData - There was no Aviso SSH data for this cell (e.g. it was
land).
* 0 - There was Aviso SSH data for this cell but an eddy was not
detected.
* >0 - An eddy was detected in this cell; the cell value contains the
ID of the eddy. Eddy IDs are assigned arbitrarily starting with 1 at
the beginning of the time series. Because many eddies are usually
filtered out, there will usually be gaps in the range of IDs.
Unless you have a specific reason to store the rasters in a
geodatabase, we recommend you store them in a directory because it
will be much faster and allows the rasters to be organized in a tree.
If you do store the rasters in a geodatabase, you must change the
Raster Name Expressions parameter; see below for more
information."""),
arcGISDisplayName=_(u'Output workspace'))
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'mode',
AvisoGriddedSSH.FindOkuboWeissEddies, u'mode')
AddArgumentMetadata(AvisoGriddedSSH.FindOkuboWeissEddies,
u'rasterNameExpressions',
typeMetadata=ListTypeMetadata(elementType=UnicodeStringTypeMetadata(),
minLength=1),
description=_(
u"""List of expressions specifying how the output rasters should be
named.
The default expression assumes you are storing rasters in a file
system directory and creates them in a tree structure with levels for
the region, data series, satellite, variable name, and year. When
storing rasters in a directory, the final expression specifies the
file name of the raster and any preceding expressions specify
subdirectories. The extension of the final expression determines the
output raster format: .asc for ArcInfo ASCII Grid, .bmp for BMP, .gif
for GIF, .img for an ERDAS IMAGINE file, .jpg for JPEG, .jp2 for JPEG
2000, .png for PNG, .tif for GeoTIFF, or no extension for ArcInfo
Binary Grid. The default expression uses .img.
When storing rasters in a geodatabase, you should provide only one
expression. That expression specifies the raster's name.
Each expression may contain any sequence of characters permitted by
the output workspace. Each expression may optionally contain one or
more of the following case-sensitive codes. The tool replaces the
codes with appropriate values when creating each raster:
* %(Region)s - Region of the output raster, either "global",
"medsea", or "blacksea".
* %(DataSeries)s - Aviso data series of the output raster, either
"dt_ref", "dt_upd", or "nrt".
* %(Satellites)s - Satellites used to produce the raster, either
"merged" for multiple satellites or "tpj1" for the Topex/Poseidon /
Jason-1 sequential pair. Please see the Aviso documentation for more
information on how Aviso products are created.
* %(Variable)s - Aviso variable used during eddy detection, either
"msla_h" or "madt_h", for Mean Sea Level Anomalies (MSLA) or Mean
Absolute Dynamic Topography (MADT), respectively.
* %(ImageType)s - Type of image represented by the raster, either
"eddies" for eddy IDs, the main output of this tool, or
"eddy_polarities" or "eddy_ages" for the two optional outputs.
* %%Y - four-digit year of the raster.
* %%m - two-digit month of the raster.
* %%d - two-digit day of the month of the raster.
* %%j - three-digit day of the year of the raster.
"""),
arcGISDisplayName=_(u'Raster name expressions'))
CopyArgumentMetadata(OkuboWeissEddies.__init__, u'owThresholdType',
AvisoGriddedSSH.FindOkuboWeissEddies, u'owThresholdType')
CopyArgumentMetadata(OkuboWeissEddies.__init__, u'owThresholdValue',
AvisoGriddedSSH.FindOkuboWeissEddies, u'owThresholdValue')
CopyArgumentMetadata(OkuboWeissEddies.__init__, u'minArea',
AvisoGriddedSSH.FindOkuboWeissEddies, u'minArea')
CopyArgumentMetadata(OkuboWeissEddies.__init__, u'minA2P',
AvisoGriddedSSH.FindOkuboWeissEddies, u'minA2P')
AddArgumentMetadata(AvisoGriddedSSH.FindOkuboWeissEddies, u'minDuration',
typeMetadata=OkuboWeissEddies.MinDuration.__doc__.Obj.Type,
description=_(
u"""Minimum duration of eddy cores, in weeks (one week is seven days).
The eddy detection algorithm tracks each eddy core through consecutive
images by overlapping the eddy cells detected in the first image with
the eddy cells detected in the second. If the cells in the first image
overlap one or more in the second and they are the same polarity,
those cells in the second image are assumed to be the same eddy. If
none overlap, or they are the opposite polarity, the eddy is assumed
to have decohered (broken up).
Eddies can split. When this happens, one of the newly-split eddies
will retain the same ID as the original one. The other will be
assigned a new ID but retain the age of the original eddy. Eddies can
also merge. When this happens, the merged eddy will retain the ID and
age of the oldest eddy.
Use this parameter to filter out eddies that are too short-lived to be
of interest in your study. The default value filters out eddies that
are less than 4 weeks in duration.
You may reduce this parameter as low as 1, but this is not
recommended, as it may result in the labeling of many ephemeral,
non-eddy structures that marginally satisify the Okubo-Weiss criterion
as eddies."""),
arcGISDisplayName=_(u'Minimum duration of eddy cores'),
arcGISCategory=_(u'Okubo-Weiss algorithm parameters'))
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'rotationOffset',
AvisoGriddedSSH.FindOkuboWeissEddies, u'rotationOffset')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'spatialExtent',
AvisoGriddedSSH.FindOkuboWeissEddies, u'spatialExtent')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'linearUnit',
AvisoGriddedSSH.FindOkuboWeissEddies, u'linearUnit')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'startDate',
AvisoGriddedSSH.FindOkuboWeissEddies, u'startDate')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'endDate',
AvisoGriddedSSH.FindOkuboWeissEddies, u'endDate')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'timeout',
AvisoGriddedSSH.FindOkuboWeissEddies, u'timeout')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'maxRetryTime',
AvisoGriddedSSH.FindOkuboWeissEddies, u'maxRetryTime')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'cacheDirectory',
AvisoGriddedSSH.FindOkuboWeissEddies, u'cacheDirectory')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters,
u'calculateStatistics', AvisoGriddedSSH.FindOkuboWeissEddies,
u'calculateStatistics')
AddArgumentMetadata(AvisoGriddedSSH.FindOkuboWeissEddies, u'buildRAT',
typeMetadata=BooleanTypeMetadata(),
description=_BuildRATDescription,
arcGISDisplayName=_(u'Build raster attribute tables'),
arcGISCategory=_(u'Additional raster processing options'))
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'buildPyramids',
AvisoGriddedSSH.FindOkuboWeissEddies, u'buildPyramids')
AddArgumentMetadata(AvisoGriddedSSH.FindOkuboWeissEddies,
u'outputPolarityRasters',
typeMetadata=BooleanTypeMetadata(),
description=_(
u"""If True, eddy polarity rasters will also be written to the output
workspace.
The rasters will have the same geospatial characteristics as the Aviso
SSH product used to create them (e.g. spatial reference, cell size,
extent, and so on). They will contain 8-bit signed integers with the
following values:
* NoData - There was no Aviso SSH data for this cell (e.g. it was
land).
* -1 - A cyclonic eddy was detected in this cell.
* 0 - There was Aviso SSH data for this cell but an eddy was not
detected.
* 1 - An anticyclonic eddy was detected in this cell.
"""),
arcGISDisplayName=_(u'Output eddy polarity rasters'),
arcGISCategory=_(u'Optional output rasters'))
AddArgumentMetadata(AvisoGriddedSSH.FindOkuboWeissEddies, u'outputAgeRasters',
typeMetadata=BooleanTypeMetadata(),
description=_(
u"""If True, eddy age rasters will also be written to the output
workspace.
The rasters will have the same geospatial characteristics as the Aviso
SSH product used to create them (e.g. spatial reference, cell size,
extent, and so on). They will contain 16-bit signed integers with the
following values:
* NoData - There was no Aviso SSH data for this cell (e.g. it was
land).
* 0 - There was Aviso SSH data for this cell but an eddy was not
detected.
* >0 - An eddy was detected at this cell. The value of the cell
represents the age of the eddy, as a count of SSH images (i.e. the
value 1 indicates that this is the first image that the eddy appears
in, 2 indicates it is the second image, and so on).
"""),
arcGISDisplayName=_(u'Output eddy age rasters'),
arcGISCategory=_(u'Optional output rasters'))
CopyResultMetadata(AvisoGriddedSSH.CreateArcGISRasters,
u'updatedOutputWorkspace', AvisoGriddedSSH.FindOkuboWeissEddies,
u'updatedOutputWorkspace')
###############################################################################
# Metadata: AvisoGriddedGeostrophicCurrents class
###############################################################################
AddClassMetadata(AvisoGriddedGeostrophicCurrents,
shortDescription=_(u'An OPeNDAPGrid for a gridded geostrophic currents
product from Aviso.'),
longDescription=_AvisoGriddedProduct_LongDescription % {u'name': 'class'})
# Constructor
AddMethodMetadata(AvisoGriddedGeostrophicCurrents.__init__,
shortDescription=_(u'Constructs a new AvisoGriddedGeostrophicCurrents
instance.'),
isExposedToPythonCallers=True,
dependencies=[PythonAggregatedModuleDependency('numpy')])
AddArgumentMetadata(AvisoGriddedGeostrophicCurrents.__init__, u'self',
typeMetadata=ClassInstanceTypeMetadata(cls=AvisoGriddedGeostrophicCurrents),
description=_(u'AvisoGriddedGeostrophicCurrents instance.'))
AddArgumentMetadata(AvisoGriddedGeostrophicCurrents.__init__, u'productName',
typeMetadata=UnicodeStringTypeMetadata(allowedValues=AvisoGriddedGeostrophicCurrents.Products),
description=AvisoGriddedSSH.__init__.__doc__.Obj.GetArgumentByName(u'productName').Description,
arcGISDisplayName=_(u'Aviso geostrophic currents product'))
AddArgumentMetadata(AvisoGriddedGeostrophicCurrents.__init__,
u'vectorComponent',
typeMetadata=UnicodeStringTypeMetadata(allowedValues=[u'u', u'v'],
makeLowercase=True),
description=_(
u"""Geostrophic currents vector component to use, one of:
* u - Eastward water velocity, in cm/s.
* v - Northward water velocity, in cm/s.
"""),
arcGISDisplayName=_(u'Vector component'))
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'temporalResolution',
AvisoGriddedGeostrophicCurrents.__init__, u'temporalResolution')
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'username',
AvisoGriddedGeostrophicCurrents.__init__, u'username')
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'password',
AvisoGriddedGeostrophicCurrents.__init__, u'password')
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'timeout',
AvisoGriddedGeostrophicCurrents.__init__, u'timeout')
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'maxRetryTime',
AvisoGriddedGeostrophicCurrents.__init__, u'maxRetryTime')
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'cacheDirectory',
AvisoGriddedGeostrophicCurrents.__init__, u'cacheDirectory')
AddResultMetadata(AvisoGriddedGeostrophicCurrents.__init__, u'grid',
typeMetadata=ClassInstanceTypeMetadata(cls=AvisoGriddedGeostrophicCurrents),
description=_(u'AvisoGriddedGeostrophicCurrents instance.'))
# Public method: AvisoGriddedGeostrophicCurrents.CreateArcGISRasters
AddMethodMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
shortDescription=_(u'Creates rasters for an Aviso gridded geostrophic
currents product.'),
longDescription=_AvisoGriddedProduct_LongDescription % {u'name': 'tool'},
isExposedToPythonCallers=True,
isExposedByCOM=True,
isExposedAsArcGISTool=True,
arcGISDisplayName=_(u'Create Rasters for Aviso Geostrophic Currents
Product'),
arcGISToolCategory=_(u'Data Products\\Aviso\\Geostrophic Currents
Products'),
dependencies=[ArcGISDependency(9, 1),
PythonAggregatedModuleDependency('numpy')])
AddArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'cls',
typeMetadata=ClassOrClassInstanceTypeMetadata(cls=AvisoGriddedGeostrophicCurrents),
description=_(u'AvisoGriddedGeostrophicCurrents class or instance.'))
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.__init__, u'username',
AvisoGriddedGeostrophicCurrents.CreateArcGISRasters, u'username')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.__init__, u'password',
AvisoGriddedGeostrophicCurrents.CreateArcGISRasters, u'password')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.__init__,
u'productName', AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'productName')
AddArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'parameter',
typeMetadata=UnicodeStringTypeMetadata(allowedValues=[u'dir', u'ke',
u'mag', u'u', u'v'], makeLowercase=True),
description=_(
u"""Geophysical parameter to use, one of:
* dir - Direction of geostrophic water flow, in degrees. Due north is
0, due east is 90, due south is 180, due west is 270.
* ke - Kinetic energy, in cm^2/s^2, computed as 0.5*(u^2 + v^2). For
Aviso Mean Absolute Dynamic Topography (MADT) products, this result
is known as total kinetic energy (TKE). For Mean Sea Level Anomaly
(MSLA) products, it is known as eddy kinetic energy (EKE). Note that
oceanographers often apply a filter to a time series of sea surface
height anomaly images prior to computing eddy kinetic energy, to
remove anomalies not attributable to mesoscale eddy activity, such
as seasonal or interannual thermosteric effects. This tool does not
do that, and the resulting kinetic energy values include the
contributions of these non-eddy effects as well as those from
eddies.
* mag - Absolute magnitude (or modulus) of the geostrophic water
velocity vector, in cm/s.
* u - Eastward geostrophic water velocity, in cm/s.
* v - Northward geostrophic water velocity, in cm/s.
"""),
arcGISDisplayName=_(u'Geophysical parameter'))
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.__init__,
u'temporalResolution', AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'temporalResolution')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'outputWorkspace',
AvisoGriddedGeostrophicCurrents.CreateArcGISRasters, u'outputWorkspace')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'mode',
AvisoGriddedGeostrophicCurrents.CreateArcGISRasters, u'mode')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters,
u'rasterNameExpressions',
AvisoGriddedGeostrophicCurrents.CreateArcGISRasters, u'rasterNameExpressions')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'rasterCatalog',
AvisoGriddedGeostrophicCurrents.CreateArcGISRasters, u'rasterCatalog')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'rotationOffset',
AvisoGriddedGeostrophicCurrents.CreateArcGISRasters, u'rotationOffset')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'spatialExtent',
AvisoGriddedGeostrophicCurrents.CreateArcGISRasters, u'spatialExtent')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'linearUnit',
AvisoGriddedGeostrophicCurrents.CreateArcGISRasters, u'linearUnit')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'startDate',
AvisoGriddedGeostrophicCurrents.CreateArcGISRasters, u'startDate')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'endDate',
AvisoGriddedGeostrophicCurrents.CreateArcGISRasters, u'endDate')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.__init__, u'timeout',
AvisoGriddedGeostrophicCurrents.CreateArcGISRasters, u'timeout')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.__init__,
u'maxRetryTime', AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'maxRetryTime')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.__init__,
u'cacheDirectory', AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'cacheDirectory')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters,
u'calculateStatistics', AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'calculateStatistics')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'buildPyramids',
AvisoGriddedGeostrophicCurrents.CreateArcGISRasters, u'buildPyramids')
CopyResultMetadata(AvisoGriddedSSH.CreateArcGISRasters,
u'updatedOutputWorkspace',
AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'updatedOutputWorkspace')
# Public method:
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters
AddMethodMetadata(AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
shortDescription=_(u'Creates climatological rasters for an Aviso gridded
geostrophic currents product.'),
longDescription=AvisoGriddedSSH.CreateClimatologicalArcGISRasters.__doc__.Obj.LongDescription,
isExposedToPythonCallers=True,
isExposedByCOM=True,
isExposedAsArcGISTool=True,
arcGISDisplayName=_(u'Create Climatological Rasters for Aviso Geostrophic
Currents Product'),
arcGISToolCategory=_(u'Data Products\\Aviso\\Geostrophic Currents
Products'),
dependencies=[ArcGISDependency(9, 1),
PythonAggregatedModuleDependency('numpy')])
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'cls', AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'cls')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'username',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'username')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'password',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'password')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'productName',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'productName')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'parameter',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'parameter')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'temporalResolution',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'temporalResolution')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'statistic',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'statistic')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'binType',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters, u'binType')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'outputWorkspace',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'outputWorkspace')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'mode', AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'mode')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'rasterNameExpressions',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'rasterNameExpressions')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'binDuration',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'binDuration')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'startDayOfYear',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'startDayOfYear')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'rotationOffset',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'rotationOffset')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'spatialExtent',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'spatialExtent')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'linearUnit',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'linearUnit')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'startDate',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'startDate')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'endDate',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters, u'endDate')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'timeout',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters, u'timeout')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'maxRetryTime',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'maxRetryTime')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'cacheDirectory',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'cacheDirectory')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'calculateStatistics',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'calculateStatistics')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'buildPyramids',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'buildPyramids')
CopyResultMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'updatedOutputWorkspace',
AvisoGriddedGeostrophicCurrents.CreateClimatologicalArcGISRasters,
u'updatedOutputWorkspace')
# Public method:
AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses
AddMethodMetadata(AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
shortDescription=_(u'Creates line feature classes representing the
current vectors of an Aviso gridded geostrophic currents product.'),
longDescription=_(
u"""The lines output by this tool are similar to those in a "quiver
plot". When displayed on a map, they can help visualize the direction
and speed of ocean currents. In ArcMap, select the "Arrow at End"
symbology. You may also want to reduce the line decoration (the arrow)
to a small size, such as 2.0.
""") + _AvisoGriddedProduct_LongDescription % {u'name': 'tool'},
isExposedToPythonCallers=True,
isExposedByCOM=True,
isExposedAsArcGISTool=True,
arcGISDisplayName=_(u'Create Vectors for Aviso Geostrophic Currents
Product'),
arcGISToolCategory=_(u'Data Products\\Aviso\\Geostrophic Currents
Products'),
dependencies=[ArcGISDependency(9, 1),
PythonAggregatedModuleDependency('numpy')])
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'cls', AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
u'cls')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.__init__, u'username',
AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
u'username')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.__init__, u'password',
AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
u'password')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.__init__,
u'productName',
AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
u'productName')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.__init__,
u'temporalResolution',
AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
u'temporalResolution')
AddArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
u'outputWorkspace',
typeMetadata=ArcGISWorkspaceTypeMetadata(createParentDirectories=True),
description=_(
u"""Directory or geodatabase to receive the feature classes.
Unless you have a specific reason to store the feature classes in a
geodatabase, we recommend you store them in a directory because it
will be faster and allows them to be organized as a tree (of
shapefiles). If you do store the feature classes in a geodatabase, you
must change the Feature Class Name Expressions parameter; see below
for more information."""),
arcGISDisplayName=_(u'Output workspace'))
AddArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
u'mode',
typeMetadata=UnicodeStringTypeMetadata(allowedValues=[u'Add',
u'Replace'], makeLowercase=True),
description=_(
u"""Overwrite mode, one of:
* Add - create feature classes that do not exist and skip those that
already exist. This is the default.
* Replace - create feature classes that do not exist and overwrite
those that already exist.
The ArcGIS Overwrite Outputs geoprocessing setting has no effect on
this tool. If 'Replace' is selected the feature classes will be
overwritten, regardless of the ArcGIS Overwrite Outputs setting."""),
arcGISDisplayName=_(u'Overwrite mode'))
AddArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
u'featureClassNameExpressions',
typeMetadata=ListTypeMetadata(elementType=UnicodeStringTypeMetadata(),
minLength=1),
description=_(
u"""List of expressions specifying how the output feature classes
should be named.
The default expression assumes the output workspace is a directory and
creates shapefiles in a tree structure with levels for the region,
data series, satellite, variable, and year.
If the output workspace is a geodatabase, you should provide only one
or two expressions. If you provide one expression, it specifies the
feature class name. If you provide two, the first one specifies the
feature dataset name and the second specifies the feature class name.
Each expression may contain any sequence of characters permitted by
the output workspace. Each expression may optionally contain one or
more of the following case-sensitive codes. The tool replaces the
codes with appropriate values when creating each feature class:
* %(Region)s - Region of the output feature class, either "global",
"medsea", or "blacksea".
* %(DataSeries)s - Aviso data series of the output feature class,
either "dt_ref", "dt_upd", or "nrt".
* %(Satellites)s - Satellites used to produce the feature class. At
this time, only one such value exists, "merged", which means that
multiple satellites were used. Please see the Aviso documentation
for more information on how Aviso products are created.
* %(Variable)s - Aviso variable represented in the output feature
class, either "madt" for Mean Absolute Dynamic Topography vectors or
"msla" for Mean Sea Level Anomaly vectors. The MADT vectors
represent the actual ocean currents estimated by Aviso, while the
anomalies represent the difference of the actual currents from a
long term climatological mean.
* %%Y - four-digit year of the output feature class.
* %%m - two-digit month of the output feature class.
* %%d - two-digit day of the month of the output feature class.
* %%j - three-digit day of the year of the output feature class.
"""),
arcGISDisplayName=_(u'Feature class name expressions'))
AddArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
u'scaleFactor',
typeMetadata=FloatTypeMetadata(mustBeGreaterThan=0.0),
description=_(
u"""Factor for scaling lines lengths.
The length of each line is calculated by multiplying the magnitude of
the vector by this parameter. Use this parameter to scale the lines
output by this tool to lengths that are visually appealing. If the
lines are too short, they will resemble a grid of dots and you will
not be able to discern the flow of the vector field. If the lines are
too long, they will overlap each other and resemble a plate of
spaghetti.
If the vectors all have about the same magnitude, then a good approach
is to scale the lines so that the longest one is about as long as the
raster cell size. But if there are a few very long vectors, then you
may prefer to scale the lines so that the average-length vector is as
long as the raster cell size.
For Aviso geostrophic currents, the raster cell size is about 37,000 m
and currents are given in cm/s. So, if the maximum (or mean) velocity
in your region of interest is about 75 cm/s:
scale factor = 37000 / 75 = 493.333333
"""),
arcGISDisplayName=_(u'Scale factor'),
arcGISCategory=_(u'Vector options'))
AddArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
u'uniformLength',
typeMetadata=BooleanTypeMetadata(),
description=_(
u"""If False (the default) then the lengths of the lines are
determined by multiplying the magnitude of the vector by the Scale
Factor parameter.
If True, all lines will have the same length, which will be determined
by multiplying the cell size of the Aviso grids (e.g. 37,000 meters)
by the the Scale Factor. Use this option when you want to the lines'
colors to indicate the magnitude of the vector, rather than the lines'
lengths. Start with a Scale Factor of 1 and increase it or decrease it
slightly to achieve the desired visual effect."""),
arcGISDisplayName=_(u'Create all lines with the same length'),
arcGISCategory=_(u'Vector options'))
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'rotationOffset',
AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
u'rotationOffset')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'spatialExtent',
AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
u'spatialExtent')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'linearUnit',
AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
u'linearUnit')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'startDate',
AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
u'startDate')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'endDate',
AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
u'endDate')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'timeout',
AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
u'timeout')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'maxRetryTime',
AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
u'maxRetryTime')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'cacheDirectory',
AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
u'cacheDirectory')
CopyResultMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'updatedOutputWorkspace',
AvisoGriddedGeostrophicCurrents.CreateVectorsAsArcGISFeatureClasses,
u'updatedOutputWorkspace')
# Public method: AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints
AddMethodMetadata(AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints,
shortDescription=_(u'Interpolates the values of an Aviso gridded
geostrophic currents product at points.'),
longDescription=AvisoGriddedSSH.InterpolateAtArcGISPoints.__doc__.Obj.LongDescription,
isExposedToPythonCallers=True,
isExposedByCOM=True,
isExposedAsArcGISTool=True,
arcGISDisplayName=_(u'Interpolate Aviso Geostrophic Currents Product at
Points'),
arcGISToolCategory=_(u'Data Products\\Aviso\\Geostrophic Currents
Products'),
dependencies=[ArcGISDependency(9, 1),
PythonAggregatedModuleDependency('numpy')])
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'cls', AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints, u'cls')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'username', AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints,
u'username')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'password', AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints,
u'password')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'productName', AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints,
u'productName')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'parameter', AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints,
u'parameter')
CopyArgumentMetadata(AvisoGriddedGeostrophicCurrents.CreateArcGISRasters,
u'temporalResolution',
AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints,
u'temporalResolution')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'points',
AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints, u'points')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'valueField', AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints,
u'valueField')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'tField',
AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints, u'tField')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'method',
AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints, u'method')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'where',
AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints, u'where')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'noDataValue', AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints,
u'noDataValue')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'timeout',
AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints, u'timeout')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'maxRetryTime', AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints,
u'maxRetryTime')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'cacheDirectory', AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints,
u'cacheDirectory')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'orderByFields', AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints,
u'orderByFields')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'numBlocksToCacheInMemory',
AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints,
u'numBlocksToCacheInMemory')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'xBlockSize', AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints,
u'xBlockSize')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'yBlockSize', AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints,
u'yBlockSize')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'tBlockSize', AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints,
u'tBlockSize')
CopyResultMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'updatedPoints', AvisoGriddedGeostrophicCurrents.InterpolateAtArcGISPoints,
u'updatedPoints')
###############################################################################
# Metadata: AvisoGriddedWindSpeedModulus class
###############################################################################
AddClassMetadata(AvisoGriddedWindSpeedModulus,
shortDescription=_(u'An OPeNDAPGrid for a gridded wind speed modulus
product from Aviso.'),
longDescription=_AvisoGriddedProduct_LongDescription % {u'name': 'class'})
# Constructor
AddMethodMetadata(AvisoGriddedWindSpeedModulus.__init__,
shortDescription=_(u'Constructs a new AvisoGriddedWindSpeedModulus
instance.'),
isExposedToPythonCallers=True,
dependencies=[PythonAggregatedModuleDependency('numpy')])
AddArgumentMetadata(AvisoGriddedWindSpeedModulus.__init__, u'self',
typeMetadata=ClassInstanceTypeMetadata(cls=AvisoGriddedWindSpeedModulus),
description=_(u'AvisoGriddedWindSpeedModulus instance.'))
AddArgumentMetadata(AvisoGriddedWindSpeedModulus.__init__, u'productName',
typeMetadata=UnicodeStringTypeMetadata(allowedValues=AvisoGriddedWindSpeedModulus.Products),
description=AvisoGriddedSSH.__init__.__doc__.Obj.GetArgumentByName(u'productName').Description,
arcGISDisplayName=_(u'Aviso wind speed modulus product'))
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'username',
AvisoGriddedWindSpeedModulus.__init__, u'username')
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'password',
AvisoGriddedWindSpeedModulus.__init__, u'password')
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'timeout',
AvisoGriddedWindSpeedModulus.__init__, u'timeout')
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'maxRetryTime',
AvisoGriddedWindSpeedModulus.__init__, u'maxRetryTime')
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'cacheDirectory',
AvisoGriddedWindSpeedModulus.__init__, u'cacheDirectory')
AddResultMetadata(AvisoGriddedWindSpeedModulus.__init__, u'grid',
typeMetadata=ClassInstanceTypeMetadata(cls=AvisoGriddedWindSpeedModulus),
description=_(u'AvisoGriddedWindSpeedModulus instance.'))
# Public method: AvisoGriddedWindSpeedModulus.CreateArcGISRasters
AddMethodMetadata(AvisoGriddedWindSpeedModulus.CreateArcGISRasters,
shortDescription=_(u'Creates rasters for an Aviso gridded wind speed
modulus product.'),
longDescription=_AvisoGriddedProduct_LongDescription % {u'name': 'tool'},
isExposedToPythonCallers=True,
isExposedByCOM=True,
isExposedAsArcGISTool=True,
arcGISDisplayName=_(u'Create Rasters for Aviso Wind Speed Modulus
Product'),
arcGISToolCategory=_(u'Data Products\\Aviso\\Wind Speed Modulus
Products'),
dependencies=[ArcGISDependency(9, 1),
PythonAggregatedModuleDependency('numpy')])
AddArgumentMetadata(AvisoGriddedWindSpeedModulus.CreateArcGISRasters, u'cls',
typeMetadata=ClassOrClassInstanceTypeMetadata(cls=AvisoGriddedWindSpeedModulus),
description=_(u'AvisoGriddedWindSpeedModulus class or instance.'))
CopyArgumentMetadata(AvisoGriddedWindSpeedModulus.__init__, u'username',
AvisoGriddedWindSpeedModulus.CreateArcGISRasters, u'username')
CopyArgumentMetadata(AvisoGriddedWindSpeedModulus.__init__, u'password',
AvisoGriddedWindSpeedModulus.CreateArcGISRasters, u'password')
CopyArgumentMetadata(AvisoGriddedWindSpeedModulus.__init__, u'productName',
AvisoGriddedWindSpeedModulus.CreateArcGISRasters, u'productName')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'outputWorkspace',
AvisoGriddedWindSpeedModulus.CreateArcGISRasters, u'outputWorkspace')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'mode',
AvisoGriddedWindSpeedModulus.CreateArcGISRasters, u'mode')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters,
u'rasterNameExpressions', AvisoGriddedWindSpeedModulus.CreateArcGISRasters,
u'rasterNameExpressions')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'rasterCatalog',
AvisoGriddedWindSpeedModulus.CreateArcGISRasters, u'rasterCatalog')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'rotationOffset',
AvisoGriddedWindSpeedModulus.CreateArcGISRasters, u'rotationOffset')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'spatialExtent',
AvisoGriddedWindSpeedModulus.CreateArcGISRasters, u'spatialExtent')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'linearUnit',
AvisoGriddedWindSpeedModulus.CreateArcGISRasters, u'linearUnit')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'startDate',
AvisoGriddedWindSpeedModulus.CreateArcGISRasters, u'startDate')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'endDate',
AvisoGriddedWindSpeedModulus.CreateArcGISRasters, u'endDate')
CopyArgumentMetadata(AvisoGriddedWindSpeedModulus.__init__, u'timeout',
AvisoGriddedWindSpeedModulus.CreateArcGISRasters, u'timeout')
CopyArgumentMetadata(AvisoGriddedWindSpeedModulus.__init__, u'maxRetryTime',
AvisoGriddedWindSpeedModulus.CreateArcGISRasters, u'maxRetryTime')
CopyArgumentMetadata(AvisoGriddedWindSpeedModulus.__init__,
u'cacheDirectory', AvisoGriddedWindSpeedModulus.CreateArcGISRasters,
u'cacheDirectory')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters,
u'calculateStatistics', AvisoGriddedWindSpeedModulus.CreateArcGISRasters,
u'calculateStatistics')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'buildPyramids',
AvisoGriddedWindSpeedModulus.CreateArcGISRasters, u'buildPyramids')
CopyResultMetadata(AvisoGriddedSSH.CreateArcGISRasters,
u'updatedOutputWorkspace', AvisoGriddedWindSpeedModulus.CreateArcGISRasters,
u'updatedOutputWorkspace')
# Public method:
AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters
AddMethodMetadata(AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
shortDescription=_(u'Creates climatological rasters for an Aviso gridded
wind speed modulus product.'),
longDescription=AvisoGriddedSSH.CreateClimatologicalArcGISRasters.__doc__.Obj.LongDescription,
isExposedToPythonCallers=True,
isExposedByCOM=True,
isExposedAsArcGISTool=True,
arcGISDisplayName=_(u'Create Climatological Rasters for Aviso Wind Speed
Modulus Product'),
arcGISToolCategory=_(u'Data Products\\Aviso\\Wind Speed Modulus
Products'),
dependencies=[ArcGISDependency(9, 1),
PythonAggregatedModuleDependency('numpy')])
CopyArgumentMetadata(AvisoGriddedWindSpeedModulus.CreateArcGISRasters,
u'cls', AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'cls')
CopyArgumentMetadata(AvisoGriddedWindSpeedModulus.CreateArcGISRasters,
u'username', AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'username')
CopyArgumentMetadata(AvisoGriddedWindSpeedModulus.CreateArcGISRasters,
u'password', AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'password')
CopyArgumentMetadata(AvisoGriddedWindSpeedModulus.CreateArcGISRasters,
u'productName',
AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'productName')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'statistic', AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'statistic')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'binType', AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'binType')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'outputWorkspace',
AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'outputWorkspace')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'mode', AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'mode')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'rasterNameExpressions',
AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'rasterNameExpressions')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'binDuration',
AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'binDuration')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'startDayOfYear',
AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'startDayOfYear')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'rotationOffset',
AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'rotationOffset')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'spatialExtent',
AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'spatialExtent')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'linearUnit',
AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters, u'linearUnit')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'startDate', AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'startDate')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'endDate', AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'endDate')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'timeout', AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'timeout')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'maxRetryTime',
AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'maxRetryTime')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'cacheDirectory',
AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'cacheDirectory')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'calculateStatistics',
AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'calculateStatistics')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'buildPyramids',
AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'buildPyramids')
CopyResultMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'updatedOutputWorkspace',
AvisoGriddedWindSpeedModulus.CreateClimatologicalArcGISRasters,
u'updatedOutputWorkspace')
# Public method: AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints
AddMethodMetadata(AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints,
shortDescription=_(u'Interpolates the values of an Aviso gridded wind
speed modulus product at points.'),
longDescription=AvisoGriddedSSH.InterpolateAtArcGISPoints.__doc__.Obj.LongDescription,
isExposedToPythonCallers=True,
isExposedByCOM=True,
isExposedAsArcGISTool=True,
arcGISDisplayName=_(u'Interpolate Aviso Wind Speed Modulus Product at
Points'),
arcGISToolCategory=_(u'Data Products\\Aviso\\Wind Speed Modulus
Products'),
dependencies=[ArcGISDependency(9, 1),
PythonAggregatedModuleDependency('numpy')])
CopyArgumentMetadata(AvisoGriddedWindSpeedModulus.CreateArcGISRasters,
u'cls', AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints, u'cls')
CopyArgumentMetadata(AvisoGriddedWindSpeedModulus.CreateArcGISRasters,
u'username', AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints,
u'username')
CopyArgumentMetadata(AvisoGriddedWindSpeedModulus.CreateArcGISRasters,
u'password', AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints,
u'password')
CopyArgumentMetadata(AvisoGriddedWindSpeedModulus.CreateArcGISRasters,
u'productName', AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints,
u'productName')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'points',
AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints, u'points')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'valueField', AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints,
u'valueField')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'tField',
AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints, u'tField')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'method',
AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints, u'method')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'where',
AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints, u'where')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'noDataValue', AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints,
u'noDataValue')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'timeout',
AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints, u'timeout')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'maxRetryTime', AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints,
u'maxRetryTime')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'cacheDirectory', AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints,
u'cacheDirectory')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'orderByFields', AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints,
u'orderByFields')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'numBlocksToCacheInMemory',
AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints,
u'numBlocksToCacheInMemory')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'xBlockSize', AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints,
u'xBlockSize')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'yBlockSize', AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints,
u'yBlockSize')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'tBlockSize', AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints,
u'tBlockSize')
CopyResultMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'updatedPoints', AvisoGriddedWindSpeedModulus.InterpolateAtArcGISPoints,
u'updatedPoints')
###############################################################################
# Metadata: AvisoGriddedSignificantWaveHeight class
###############################################################################
AddClassMetadata(AvisoGriddedSignificantWaveHeight,
shortDescription=_(u'An OPeNDAPGrid for a gridded significant wave height
product from Aviso.'),
longDescription=_AvisoGriddedProduct_LongDescription % {u'name': 'class'})
# Constructor
AddMethodMetadata(AvisoGriddedSignificantWaveHeight.__init__,
shortDescription=_(u'Constructs a new AvisoGriddedSignificantWaveHeight
instance.'),
isExposedToPythonCallers=True,
dependencies=[PythonAggregatedModuleDependency('numpy')])
AddArgumentMetadata(AvisoGriddedSignificantWaveHeight.__init__, u'self',
typeMetadata=ClassInstanceTypeMetadata(cls=AvisoGriddedSignificantWaveHeight),
description=_(u'AvisoGriddedSignificantWaveHeight instance.'))
AddArgumentMetadata(AvisoGriddedSignificantWaveHeight.__init__,
u'productName',
typeMetadata=UnicodeStringTypeMetadata(allowedValues=AvisoGriddedSignificantWaveHeight.Products),
description=AvisoGriddedSSH.__init__.__doc__.Obj.GetArgumentByName(u'productName').Description,
arcGISDisplayName=_(u'Aviso significant wave height product'))
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'username',
AvisoGriddedSignificantWaveHeight.__init__, u'username')
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'password',
AvisoGriddedSignificantWaveHeight.__init__, u'password')
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'timeout',
AvisoGriddedSignificantWaveHeight.__init__, u'timeout')
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'maxRetryTime',
AvisoGriddedSignificantWaveHeight.__init__, u'maxRetryTime')
CopyArgumentMetadata(AvisoGriddedSSH.__init__, u'cacheDirectory',
AvisoGriddedSignificantWaveHeight.__init__, u'cacheDirectory')
AddResultMetadata(AvisoGriddedSignificantWaveHeight.__init__, u'grid',
typeMetadata=ClassInstanceTypeMetadata(cls=AvisoGriddedSignificantWaveHeight),
description=_(u'AvisoGriddedSignificantWaveHeight instance.'))
# Public method: AvisoGriddedSignificantWaveHeight.CreateArcGISRasters
AddMethodMetadata(AvisoGriddedSignificantWaveHeight.CreateArcGISRasters,
shortDescription=_(u'Creates rasters for an Aviso gridded significant
wave height product.'),
longDescription=_AvisoGriddedProduct_LongDescription % {u'name': 'tool'},
isExposedToPythonCallers=True,
isExposedByCOM=True,
isExposedAsArcGISTool=True,
arcGISDisplayName=_(u'Create Rasters for Aviso Significant Wave Height
Product'),
arcGISToolCategory=_(u'Data Products\\Aviso\\Significant Wave Height
Products'),
dependencies=[ArcGISDependency(9, 1),
PythonAggregatedModuleDependency('numpy')])
AddArgumentMetadata(AvisoGriddedSignificantWaveHeight.CreateArcGISRasters,
u'cls',
typeMetadata=ClassOrClassInstanceTypeMetadata(cls=AvisoGriddedSignificantWaveHeight),
description=_(u'AvisoGriddedSignificantWaveHeight class or instance.'))
CopyArgumentMetadata(AvisoGriddedSignificantWaveHeight.__init__, u'username',
AvisoGriddedSignificantWaveHeight.CreateArcGISRasters, u'username')
CopyArgumentMetadata(AvisoGriddedSignificantWaveHeight.__init__, u'password',
AvisoGriddedSignificantWaveHeight.CreateArcGISRasters, u'password')
CopyArgumentMetadata(AvisoGriddedSignificantWaveHeight.__init__,
u'productName', AvisoGriddedSignificantWaveHeight.CreateArcGISRasters,
u'productName')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'outputWorkspace',
AvisoGriddedSignificantWaveHeight.CreateArcGISRasters, u'outputWorkspace')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'mode',
AvisoGriddedSignificantWaveHeight.CreateArcGISRasters, u'mode')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters,
u'rasterNameExpressions',
AvisoGriddedSignificantWaveHeight.CreateArcGISRasters,
u'rasterNameExpressions')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'rasterCatalog',
AvisoGriddedSignificantWaveHeight.CreateArcGISRasters, u'rasterCatalog')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'rotationOffset',
AvisoGriddedSignificantWaveHeight.CreateArcGISRasters, u'rotationOffset')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'spatialExtent',
AvisoGriddedSignificantWaveHeight.CreateArcGISRasters, u'spatialExtent')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'linearUnit',
AvisoGriddedSignificantWaveHeight.CreateArcGISRasters, u'linearUnit')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'startDate',
AvisoGriddedSignificantWaveHeight.CreateArcGISRasters, u'startDate')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'endDate',
AvisoGriddedSignificantWaveHeight.CreateArcGISRasters, u'endDate')
CopyArgumentMetadata(AvisoGriddedSignificantWaveHeight.__init__, u'timeout',
AvisoGriddedSignificantWaveHeight.CreateArcGISRasters, u'timeout')
CopyArgumentMetadata(AvisoGriddedSignificantWaveHeight.__init__,
u'maxRetryTime', AvisoGriddedSignificantWaveHeight.CreateArcGISRasters,
u'maxRetryTime')
CopyArgumentMetadata(AvisoGriddedSignificantWaveHeight.__init__,
u'cacheDirectory', AvisoGriddedSignificantWaveHeight.CreateArcGISRasters,
u'cacheDirectory')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters,
u'calculateStatistics',
AvisoGriddedSignificantWaveHeight.CreateArcGISRasters, u'calculateStatistics')
CopyArgumentMetadata(AvisoGriddedSSH.CreateArcGISRasters, u'buildPyramids',
AvisoGriddedSignificantWaveHeight.CreateArcGISRasters, u'buildPyramids')
CopyResultMetadata(AvisoGriddedSSH.CreateArcGISRasters,
u'updatedOutputWorkspace',
AvisoGriddedSignificantWaveHeight.CreateArcGISRasters,
u'updatedOutputWorkspace')
# Public method:
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters
AddMethodMetadata(AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
shortDescription=_(u'Creates climatological rasters for an Aviso gridded
significant wave height product.'),
longDescription=AvisoGriddedSSH.CreateClimatologicalArcGISRasters.__doc__.Obj.LongDescription,
isExposedToPythonCallers=True,
isExposedByCOM=True,
isExposedAsArcGISTool=True,
arcGISDisplayName=_(u'Create Climatological Rasters for Aviso Significant
Wave Height Product'),
arcGISToolCategory=_(u'Data Products\\Aviso\\Significant Wave Height
Products'),
dependencies=[ArcGISDependency(9, 1),
PythonAggregatedModuleDependency('numpy')])
CopyArgumentMetadata(AvisoGriddedSignificantWaveHeight.CreateArcGISRasters,
u'cls', AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'cls')
CopyArgumentMetadata(AvisoGriddedSignificantWaveHeight.CreateArcGISRasters,
u'username',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'username')
CopyArgumentMetadata(AvisoGriddedSignificantWaveHeight.CreateArcGISRasters,
u'password',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'password')
CopyArgumentMetadata(AvisoGriddedSignificantWaveHeight.CreateArcGISRasters,
u'productName',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'productName')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'statistic',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'statistic')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'binType',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'binType')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'outputWorkspace',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'outputWorkspace')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'mode', AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'mode')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'rasterNameExpressions',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'rasterNameExpressions')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'binDuration',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'binDuration')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'startDayOfYear',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'startDayOfYear')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'rotationOffset',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'rotationOffset')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'spatialExtent',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'spatialExtent')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'linearUnit',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'linearUnit')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'startDate',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'startDate')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'endDate',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'endDate')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'timeout',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'timeout')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'maxRetryTime',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'maxRetryTime')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'cacheDirectory',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'cacheDirectory')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'calculateStatistics',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'calculateStatistics')
CopyArgumentMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'buildPyramids',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'buildPyramids')
CopyResultMetadata(AvisoGriddedSSH.CreateClimatologicalArcGISRasters,
u'updatedOutputWorkspace',
AvisoGriddedSignificantWaveHeight.CreateClimatologicalArcGISRasters,
u'updatedOutputWorkspace')
# Public method: AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints
AddMethodMetadata(AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints,
shortDescription=_(u'Interpolates the values of an Aviso gridded
significant wave height product at points.'),
longDescription=AvisoGriddedSSH.InterpolateAtArcGISPoints.__doc__.Obj.LongDescription,
isExposedToPythonCallers=True,
isExposedByCOM=True,
isExposedAsArcGISTool=True,
arcGISDisplayName=_(u'Interpolate Aviso Significant Wave Height Product
at Points'),
arcGISToolCategory=_(u'Data Products\\Aviso\\Significant Wave Height
Products'),
dependencies=[ArcGISDependency(9, 1),
PythonAggregatedModuleDependency('numpy')])
CopyArgumentMetadata(AvisoGriddedSignificantWaveHeight.CreateArcGISRasters,
u'cls', AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints, u'cls')
CopyArgumentMetadata(AvisoGriddedSignificantWaveHeight.CreateArcGISRasters,
u'username', AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints,
u'username')
CopyArgumentMetadata(AvisoGriddedSignificantWaveHeight.CreateArcGISRasters,
u'password', AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints,
u'password')
CopyArgumentMetadata(AvisoGriddedSignificantWaveHeight.CreateArcGISRasters,
u'productName', AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints,
u'productName')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'points',
AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints, u'points')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'valueField', AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints,
u'valueField')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'tField',
AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints, u'tField')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'method',
AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints, u'method')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'where',
AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints, u'where')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'noDataValue', AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints,
u'noDataValue')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints, u'timeout',
AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints, u'timeout')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'maxRetryTime', AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints,
u'maxRetryTime')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'cacheDirectory',
AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints,
u'cacheDirectory')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'orderByFields',
AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints, u'orderByFields')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'numBlocksToCacheInMemory',
AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints,
u'numBlocksToCacheInMemory')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'xBlockSize', AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints,
u'xBlockSize')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'yBlockSize', AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints,
u'yBlockSize')
CopyArgumentMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'tBlockSize', AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints,
u'tBlockSize')
CopyResultMetadata(AvisoGriddedSSH.InterpolateAtArcGISPoints,
u'updatedPoints',
AvisoGriddedSignificantWaveHeight.InterpolateAtArcGISPoints, u'updatedPoints')
###############################################################################
# Names exported by this module
###############################################################################
__all__ = ['AvisoGriddedSSH',
'AvisoGriddedGeostrophicCurrents',
'AvisoGriddedWindSpeedModulus',
'AvisoGriddedSignificantWaveHeight']
Archives powered by MHonArc.