Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
rgb = element.rgb
array = np.dstack([np.flipud(rgb.dimension_values(d, flat=False))
for d in rgb.vdims])
else:
array = element.dimension_values(2, flat=False)
(x0, y0, x1, y1) = element.bounds.lbrt()
width = int(w) if self.p.width is None else self.p.width
height = int(h) if self.p.height is None else self.p.height
bounds = _determine_bounds(xs, ys, element.crs)
yb = bounds['y']
resampled = []
xvalues = []
for xb in bounds['x']:
px0, py0, px1, py1 = project_extents((xb[0], yb[0], xb[1], yb[1]), element.crs, proj)
if len(bounds['x']) > 1:
xfraction = (xb[1]-xb[0])/(x1-x0)
fraction_width = int(width*xfraction)
else:
fraction_width = width
xs = np.linspace(px0, px1, fraction_width)
ys = np.linspace(py0, py1, height)
cxs, cys = cartesian_product([xs, ys])
pxs, pys, _ = element.crs.transform_points(proj, np.asarray(cxs), np.asarray(cys)).T
icxs = (((pxs-x0) / (x1-x0)) * w).astype(int)
icys = (((pys-y0) / (y1-y0)) * h).astype(int)
xvalues.append(xs)
icxs[icxs<0] = 0
icys[icys<0] = 0
def project_ranges(cb, msg, attributes):
"""
Projects ranges supplied by a callback.
"""
if skip(cb, msg, attributes):
return msg
plot = get_cb_plot(cb)
x0, x1 = msg.get('x_range', (0, 1000))
y0, y1 = msg.get('y_range', (0, 1000))
extents = x0, y0, x1, y1
x0, y0, x1, y1 = project_extents(extents, plot.projection,
plot.current_frame.crs)
coords = {'x_range': (x0, x1), 'y_range': (y0, y1)}
return {k: v for k, v in coords.items() if k in attributes}
"""
Subclasses the get_extents method using the GeoAxes
set_extent method to project the extents to the
Elements coordinate reference system.
"""
proj = self.projection
if self.global_extent and range_type in ('combined', 'data'):
(x0, x1), (y0, y1) = proj.x_limits, proj.y_limits
return (x0, y0, x1, y1)
extents = super(ProjectionPlot, self).get_extents(element, ranges, range_type)
if not getattr(element, 'crs', None) or not self.geographic:
return extents
elif any(e is None or not np.isfinite(e) for e in extents):
extents = None
else:
extents = project_extents(extents, element.crs, proj)
return (np.NaN,)*4 if not extents else extents
rgb = element.rgb
array = np.dstack([np.flipud(rgb.dimension_values(d, flat=False))
for d in rgb.vdims])
else:
array = element.dimension_values(2, flat=False)
(x0, y0, x1, y1) = element.bounds.lbrt()
width = int(w) if self.p.width is None else self.p.width
height = int(h) if self.p.height is None else self.p.height
bounds = _determine_bounds(xs, ys, element.crs)
yb = bounds['y']
resampled = []
xvalues = []
for xb in bounds['x']:
px0, py0, px1, py1 = project_extents((xb[0], yb[0], xb[1], yb[1]), element.crs, proj)
if len(bounds['x']) > 1:
xfraction = (xb[1]-xb[0])/(x1-x0)
fraction_width = int(width*xfraction)
else:
fraction_width = width
xs = np.linspace(px0, px1, fraction_width)
ys = np.linspace(py0, py1, height)
cxs, cys = cartesian_product([xs, ys])
pxs, pys, _ = element.crs.transform_points(proj, np.asarray(cxs), np.asarray(cys)).T
icxs = (((pxs-x0) / (x1-x0)) * w).astype(int)
icys = (((pys-y0) / (y1-y0)) * h).astype(int)
xvalues.append(xs)
icxs[icxs<0] = 0
icys[icys<0] = 0
def _process_msg(self, msg):
msg = super(GeoBoundsYCallback, self)._process_msg(msg)
if skip(self, msg, ('boundsy',)): return msg
y0, y1 = msg['boundsy']
plot = get_cb_plot(self)
_, y0, _, y1 = project_extents((0, y0, 0, y1), plot.projection,
plot.current_frame.crs)
return {'boundsy': (y0, y1)}
'install -c pyviz geoviews')
if self.geo:
if self.kind not in self._geo_types:
param.main.warning(
"geo option cannot be used with kind=%r plot "
"type. Geographic plots are only supported for "
"following plot types: %r" % (self.kind, self._geo_types))
from cartopy import crs as ccrs
from geoviews.util import project_extents
proj_crs = projection or ccrs.GOOGLE_MERCATOR
if self.crs != proj_crs:
px0, py0, px1, py1 = ccrs.GOOGLE_MERCATOR.boundary.bounds
x0, x1 = xlim or (px0, px1)
y0, y1 = ylim or (py0, py1)
extents = (x0, y0, x1, y1)
x0, y0, x1, y1 = project_extents(extents, self.crs, proj_crs)
if xlim:
xlim = (x0, x1)
if ylim:
ylim = (y0, y1)
# Operations
self.datashade = datashade
self.rasterize = rasterize
self.dynspread = dynspread
self.aggregator = aggregator
self.precompute = precompute
self.x_sampling = x_sampling
self.y_sampling = y_sampling
# By type
self.subplots = subplots
def _process(self, img, key=None):
if self.p.fast:
return self._fast_process(img, key)
proj = self.p.projection
x0, x1 = img.range(0)
y0, y1 = img.range(1)
xn, yn = img.interface.shape(img, gridded=True)[:2]
px0, py0, px1, py1 = project_extents((x0, y0, x1, y1),
img.crs, proj)
src_ext, trgt_ext = (x0, x1, y0, y1), (px0, px1, py0, py1)
arrays = []
for vd in img.vdims:
arr = img.dimension_values(vd, flat=False)
if arr.size:
projected, extents = warp_array(arr, proj, img.crs, (xn, yn),
src_ext, trgt_ext)
else:
projected, extents = arr, trgt_ext
arrays.append(projected)
xunit = ((extents[1]-extents[0])/float(xn))/2.
yunit = ((extents[3]-extents[2])/float(yn))/2.
xs = np.linspace(extents[0]+xunit, extents[1]-xunit, xn)
ys = np.linspace(extents[2]+yunit, extents[3]-yunit, yn)
return img.clone((xs, ys, *arrays), bounds=None, kdims=img.kdims,
def _process_msg(self, msg):
msg = super(GeoBoxEditCallback, self)._process_msg(msg)
proj = self.plot.projection
element = self.source
if isinstance(element, UniformNdMapping):
element = element.last
if not isinstance(element, _Element) or element.crs == proj:
return msg
boxes = msg['data']
data = {'x0': [], 'y0': [], 'x1': [], 'y1': []}
for extent in zip(boxes['x0'], boxes['y0'], boxes['x1'], boxes['y1']):
x0, y0, x1, y1 = project_extents(extent, proj, element.crs)
data['x0'].append(x0)
data['y0'].append(y0)
data['x1'].append(x1)
data['y1'].append(y1)
return {'data': data}