Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def testDispatcherClassifierThreeRule(self):
# create polygons to test
box1 = box(0, 0, 100, 100)
box2 = box(0, 0, 10, 10)
poly = Polygon([(0, 0), (0, 1000), (50, 1250), (1000, 1000), (1000, 0), (0, 0)])
dispatcher = RuleBasedDispatcher([QuadrilaterRule(), NotQuadrilaterRule()])
dispatcher_classifier = DispatcherClassifier(dispatcher, [AreaClassifier(500), AreaClassifier(500)])
# simple dispatch test
cls, probability, dispatch, _ = dispatcher_classifier.dispatch_classify(None, box1)
self.assertEqual(1, cls)
self.assertEqual(1.0, probability)
self.assertEqual(0, dispatch)
# batch dispatch test
classes, probas, dispatches, _ = dispatcher_classifier.dispatch_classify_batch(None, [box1, box2, poly])
self.assertEqual(1, classes[0])
self.assertEqual(0, classes[1])
def test_antimeridian(self):
ds1, ds2 = _get_antimeridian_datasets()
bounds = get_dataset_geometry(ds1)
self.assertEqual(shapely.geometry.MultiPolygon(
polygons=[
shapely.geometry.box(165.0, -15.0, 180.0, 15.0),
shapely.geometry.box(-180.0, -15.0, -155.0, 15.0)
]),
bounds)
bounds = get_dataset_geometry(ds2)
self.assertEqual(shapely.geometry.MultiPolygon(
polygons=[
shapely.geometry.box(165.0, -15.0, 180.0, 15.0),
shapely.geometry.box(-180.0, -15.0, -155.0, 15.0)
]),
bounds)
if bounds is None:
bounds = list(shape.bounds)
else:
# expand the bounding box
bounds[:2] = np.minimum(bounds[:2], shape.bounds[:2])
bounds[2:] = np.maximum(bounds[2:], shape.bounds[2:])
if geomType == 'Point':
ax.scatter(shape.coords[0][0], shape.coords[0][1], s=9,
transform=cartopy.crs.PlateCarree(), marker='o',
color='blue', edgecolor='blue')
else:
ax.add_geometries((shape,), crs=refProjection, **props)
box = shapely.geometry.box(*bounds)
if(maxLength > 0.0):
box = subdivide_geom(box, 'Polygon', maxLength)
boxProjected = projection.project_geometry(box, src_crs=refProjection)
try:
x1, y1, x2, y2 = boxProjected.bounds
ax.set_xlim([x1, x2])
ax.set_ylim([y1, y2])
except ValueError:
print("Warning: bounding box could not be projected into "
"projection {}".format(projectionName))
print("Defaulting to global bounds.")
ax.set_global()
fig.canvas.draw()
plt.tight_layout(pad=4.)
def _area_at_zoom(self, zoom):
if zoom not in self._cache_area_at_zoom:
# use union of all input items and, if available, intersect with
# init_bounds
if "input" in self._params_at_zoom[zoom]:
input_union = cascaded_union([
self.input[get_hash(v)].bbox(self.process_pyramid.crs)
for k, v in six.iteritems(
self._params_at_zoom[zoom]["input"])
if v is not None
])
self._cache_area_at_zoom[zoom] = input_union.intersection(
box(*self.init_bounds)
) if self.init_bounds else input_union
# if no input items are available, just use init_bounds
else:
self._cache_area_at_zoom[zoom] = box(*self.init_bounds)
return self._cache_area_at_zoom[zoom]
start = (pytz.UTC.localize(beginning_of_month) - EPOCH).total_seconds()
end = (pytz.UTC.localize(end_of_month) - EPOCH).total_seconds()
tile_stats = self._get_tile_service().find_tiles_in_polygon(bounding_polygon, ds, start, end,
fl=('id,'
'tile_avg_val_d,tile_count_i,'
'tile_min_val_d,tile_max_val_d,'
'tile_min_lat,tile_max_lat,'
'tile_min_lon,tile_max_lon'),
fetch_data=False)
if len(tile_stats) == 0:
continue
# Split list into tiles on the border of the bounding box and tiles completely inside the bounding box.
border_tiles, inner_tiles = [], []
for tile in tile_stats:
inner_tiles.append(tile) if bounding_polygon.contains(shapely.geometry.box(tile.bbox.min_lon,
tile.bbox.min_lat,
tile.bbox.max_lon,
tile.bbox.max_lat)) else border_tiles.append(
tile)
# We can use the stats of the inner tiles directly
tile_means = [tile.tile_stats.mean for tile in inner_tiles]
tile_mins = [tile.tile_stats.min for tile in inner_tiles]
tile_maxes = [tile.tile_stats.max for tile in inner_tiles]
tile_counts = [tile.tile_stats.count for tile in inner_tiles]
# Border tiles need have the data loaded, masked, and stats recalculated
border_tiles = list(self._get_tile_service().fetch_data_for_tiles(*border_tiles))
border_tiles = self._get_tile_service().mask_tiles_to_polygon(bounding_polygon, border_tiles)
for tile in border_tiles:
tile.update_stats()
def width_height(bounds):
try:
l, b, r, t = reproject_geometry(
box(*bounds), src_crs=tile.crs, dst_crs=dst_pyramid.crs
).bounds
except ValueError:
raise TopologicalError("bounds cannot be translated into target CRS")
return r - l, t - b
print('Must provide either a list of features or a query or an image')
return
if styles is not None and not isinstance(styles, list):
styles = [styles]
geojson = {"type":"FeatureCollection", "features": features}
if center is None and features is not None:
union = cascaded_union([shape(f['geometry']) for f in features])
lon, lat = union.centroid.coords[0]
elif center is None and image is not None:
try:
lon, lat = shape(image).centroid.coords[0]
except:
lon, lat = box(*image_bounds).centroid.coords[0]
else:
lat, lon = center
map_id = "map_{}".format(str(int(time.time())))
map_data = VectorGeojsonLayer(geojson, styles=styles, **kwargs)
image_layer = self._build_image_layer(image, image_bounds, cmap)
template = BaseTemplate(map_id, **{
"lat": lat,
"lon": lon,
"zoom": zoom,
"datasource": json.dumps(map_data.datasource),
"layers": json.dumps(map_data.layers),
"image_layer": image_layer,
"mbkey": api_key,
"token": 'dummy'
def get_support_bbox(i, j):
pol_i = box(i.bbox_min[0], i.bbox_min[1], i.bbox_max[0], i.bbox_max[1])
pol_j = box(j.bbox_min[0], j.bbox_min[1], j.bbox_max[0], j.bbox_max[1])
pol_support = pol_i.intersects(pol_j)
return pol_support
height, width = self.data.shape
minx = max(minx, self.x)
miny = max(miny, self.y)
maxx = min(maxx, self.x + width)
maxy = min(maxy, self.y + height)
from shapely import prepared
from shapely.geometry import box
cells = np.zeros_like(self.data, dtype=np.bool)
prep = prepared.prep(geometry)
res = self.resolution
for iy, y in enumerate(range(miny * res, maxy * res, res), start=miny - self.y):
for ix, x in enumerate(range(minx * res, maxx * res, res), start=minx - self.x):
if prep.intersects(box(x, y, x + res, y + res)):
cells[iy, ix] = True
return cells
mask |= new_mask
shapes = rasterio.features.shapes(mask.astype('uint8'), mask=mask)
shape = shapely.ops.unary_union([shapely.geometry.shape(shape) for shape, val in shapes if val == 1])
# convex hull
geom = shape.convex_hull
# buffer by 1 pixel
geom = geom.buffer(1, join_style=3, cap_style=3)
# simplify with 1 pixel radius
geom = geom.simplify(1)
# intersect with image bounding box
geom = geom.intersection(shapely.geometry.box(0, 0, mask.shape[1], mask.shape[0]))
# transform from pixel space into CRS space
geom = shapely.affinity.affine_transform(geom, (transform.a, transform.b, transform.d,
transform.e, transform.xoff, transform.yoff))
output = shapely.geometry.mapping(geom)
output['coordinates'] = _to_lists(output['coordinates'])
return output