本文整理匯總了Python中shapely.geometry.box方法的典型用法代碼示例。如果您正苦於以下問題:Python geometry.box方法的具體用法?Python geometry.box怎麽用?Python geometry.box使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類shapely.geometry
的用法示例。
在下文中一共展示了geometry.box方法的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Python代碼示例。
示例1: _to_polygon
# 需要導入模塊: from shapely import geometry [as 別名]
# 或者: from shapely.geometry import box [as 別名]
def _to_polygon(polys):
r"""Convert 4 or 8 dimensional array to Polygons
Args:
polys (numpy.ndarray): An N x 4 numpy array, each line represent a rectangle
(left, top, width, height); or an N x 8 numpy array, each line represent
the coordinates (x1, y1, x2, y2, x3, y3, x4, y4) of 4 corners.
"""
def to_polygon(x):
assert len(x) in [4, 8]
if len(x) == 4:
return box(x[0], x[1], x[0] + x[2], x[1] + x[3])
elif len(x) == 8:
return Polygon([(x[2 * i], x[2 * i + 1]) for i in range(4)])
if polys.ndim == 1:
return to_polygon(polys)
else:
return [to_polygon(t) for t in polys]
示例2: snwe2file
# 需要導入模塊: from shapely import geometry [as 別名]
# 或者: from shapely.geometry import box [as 別名]
def snwe2file(snwe):
"""Use Shapely to convert to GeoJSON & WKT.
Save local text files in variety of formats to record bounds: snwe.json,
snwe.wkt, snwe.txt.
Parameters
----------
snwe : list
bounding coordinates [south, north, west, east].
"""
S, N, W, E = snwe
roi = box(W, S, E, N)
with open("snwe.json", "w") as j:
json.dump(mapping(roi), j)
with open("snwe.wkt", "w") as w:
w.write(roi.wkt)
with open("snwe.txt", "w") as t:
snweList = "[{0:.3f}, {1:.3f}, {2:.3f}, {3:.3f}]".format(S, N, W, E)
t.write(snweList)
示例3: get_rect_bbox
# 需要導入模塊: from shapely import geometry [as 別名]
# 或者: from shapely.geometry import box [as 別名]
def get_rect_bbox(self, layer):
# type: (Union[str, Tuple[str, str]]) -> BBox
"""Returns the overall bounding box of all rectangles on the given layer.
Note: currently this does not check primitive instances or vias.
Parameters
----------
layer : Union[str, Tuple[str, str]]
the layer name.
Returns
-------
box : BBox
the overall bounding box of the given layer.
"""
return self._layout.get_rect_bbox(layer)
示例4: add_res_metal
# 需要導入模塊: from shapely import geometry [as 別名]
# 或者: from shapely.geometry import box [as 別名]
def add_res_metal(self, layer_id, bbox, **kwargs):
# type: (int, Union[BBox, BBoxArray], **Any) -> List[Rect]
"""Add a new metal resistor.
Parameters
----------
layer_id : int
the metal layer ID.
bbox : Union[BBox, BBoxArray]
the resistor bounding box. If BBoxArray is given, its arraying parameters will
be used instead.
**kwargs : Any
optional arguments to add_rect()
Returns
-------
rect_list : List[Rect]
list of rectangles defining the metal resistor.
"""
rect_list = []
rect_layers = self.grid.tech_info.get_res_metal_layers(layer_id)
for lay in rect_layers:
rect_list.append(self.add_rect(lay, bbox, **kwargs))
return rect_list
示例5: add_label
# 需要導入模塊: from shapely import geometry [as 別名]
# 或者: from shapely.geometry import box [as 別名]
def add_label(self, label, layer, bbox):
# type: (str, Union[str, Tuple[str, str]], BBox) -> None
"""Adds a label to the layout.
This is mainly used to add voltage text labels.
Parameters
----------
label : str
the label text.
layer : Union[str, Tuple[str, str]]
the pin layer name.
bbox : BBox
the pin bounding box.
"""
self._layout.add_label(label, layer, bbox)
示例6: _cover_geometry
# 需要導入模塊: from shapely import geometry [as 別名]
# 或者: from shapely.geometry import box [as 別名]
def _cover_geometry(tilescheme, curr_tile, prep_geom, geom, zooms):
"""Covers geometries with tiles by recursion.
Args:
tilescheme: The tile scheme to use. This needs to implement
the public protocal of the schemes defined within
tiletanic.
curr_tile: The current tile in the recursion scheme.
prep_geom: The prepared version of the geometry we would like to cover.
geom: The shapely geometry we would like to cover.
zooms: The zoom levels to recurse to.
Yields:
An iterator of Tile objects ((x, y, z) tuples) that
cover the input geometry.
"""
if prep_geom.intersects(geometry.box(*tilescheme.bbox(curr_tile))):
if curr_tile.z in zooms:
yield curr_tile
else:
for tile in (tile for child_tile in tilescheme.children(curr_tile)
for tile in _cover_geometry(tilescheme, child_tile,
prep_geom, geom,
zooms)):
yield tile
示例7: add_frame
# 需要導入模塊: from shapely import geometry [as 別名]
# 或者: from shapely.geometry import box [as 別名]
def add_frame(self, padding=30., line_width=1., frame_layer: int = std_layers.framelayer, bounds=None):
"""
Generates a rectangular frame around the contents of the cell.
:param padding: Add a padding of the given value around the contents of the cell
:param line_width: Width of the frame line
:param frame_layer: Layer to put the frame on.
:param bounds: Optionally, an explicit extent in the form (min_x, min_y, max_x, max_y) can be passed to
the function. If `None` (default), the current extent of the cell will be chosen.
"""
padding = padding + line_width
bounds = bounds or self.bounds
frame = box(bounds[0] - padding, bounds[1] - padding, bounds[2] + padding, bounds[3] + padding)
frame = frame.difference(frame.buffer(-line_width))
self.add_to_layer(frame_layer, frame)
示例8: __init__
# 需要導入模塊: from shapely import geometry [as 別名]
# 或者: from shapely.geometry import box [as 別名]
def __init__(self, url, zoom=18, bounds=None):
self.zoom_level = zoom
self._name = "image-{}".format(str(uuid.uuid4()))
self._url = url
_first_tile = mercantile.Tile(z=self.zoom_level, x=0, y=0)
_last_tile = mercantile.Tile(z=self.zoom_level, x=180, y=-85.05)
g = box(*mercantile.xy_bounds(_first_tile)).union(box(*mercantile.xy_bounds(_last_tile)))
self._full_bounds = g.bounds
# TODO: populate rest of fields automatically
self._tile_size = 256
self._nbands = 3
self._dtype = "uint8"
self.bounds = self._expand_bounds(bounds)
示例9: __getitem__
# 需要導入模塊: from shapely import geometry [as 別名]
# 或者: from shapely.geometry import box [as 別名]
def __getitem__(self, geometry):
if isinstance(geometry, BaseGeometry) or getattr(geometry, "__geo_interface__", None) is not None:
if self._tms_meta._bounds is None:
return self.aoi(geojson=mapping(geometry), from_proj=self.proj)
image = GeoDaskImage.__getitem__(self, geometry)
image._tms_meta = self._tms_meta
return image
else:
result = super(TmsImage, self).__getitem__(geometry)
image = super(TmsImage, self.__class__).__new__(self.__class__, result)
if all([isinstance(e, slice) for e in geometry]) and len(geometry) == len(self.shape):
xmin, ymin, xmax, ymax = geometry[2].start, geometry[1].start, geometry[2].stop, geometry[1].stop
xmin = 0 if xmin is None else xmin
ymin = 0 if ymin is None else ymin
xmax = self.shape[2] if xmax is None else xmax
ymax = self.shape[1] if ymax is None else ymax
g = ops.transform(self.__geo_transform__.fwd, box(xmin, ymin, xmax, ymax))
image.__geo_interface__ = mapping(g)
image.__geo_transform__ = self.__geo_transform__ + (xmin, ymin)
else:
image.__geo_interface__ = self.__geo_interface__
image.__geo_transform__ = self.__geo_transform__
image._tms_meta = self._tms_meta
return image
示例10: histogram_match
# 需要導入模塊: from shapely import geometry [as 別名]
# 或者: from shapely.geometry import box [as 別名]
def histogram_match(self, use_bands, blm_source='browse', **kwargs):
''' Match the histogram to existing imagery '''
warnings.warn('Histogram matching has changed due to the Maps API deprecation, see https://github.com/DigitalGlobe/gbdxtools/issues/778')
assert has_rio, "To match image histograms please install rio_hist"
data = self._read(self[use_bands,...], **kwargs)
data = np.rollaxis(data.astype(np.float32), 0, 3)
if 0 in data:
data = np.ma.masked_values(data, 0)
bounds = self._reproject(box(*self.bounds), from_proj=self.proj, to_proj="EPSG:4326").bounds
ref = BrowseImage(self.cat_id, bbox=bounds).read()
out = np.dstack([rio_match(data[:,:,idx], ref[:,:,idx].astype(np.double)/255.0)
for idx in range(data.shape[-1])])
if 'stretch' in kwargs or 'gamma' in kwargs:
return self._histogram_stretch(out, **kwargs)
else:
return out
示例11: window_at
# 需要導入模塊: from shapely import geometry [as 別名]
# 或者: from shapely.geometry import box [as 別名]
def window_at(self, geom, window_shape):
"""Return a subsetted window of a given size, centered on a geometry object
Useful for generating training sets from vector training data
Will throw a ValueError if the window is not within the image bounds
Args:
geom (shapely,geometry): Geometry to center the image on
window_shape (tuple): The desired shape of the image as (height, width) in pixels.
Returns:
image: image object of same type
"""
# Centroids of the input geometry may not be centered on the object.
# For a covering image we use the bounds instead.
# This is also a workaround for issue 387.
y_size, x_size = window_shape[0], window_shape[1]
bounds = box(*geom.bounds)
px = ops.transform(self.__geo_transform__.rev, bounds).centroid
miny, maxy = int(px.y - y_size/2), int(px.y + y_size/2)
minx, maxx = int(px.x - x_size/2), int(px.x + x_size/2)
_, y_max, x_max = self.shape
if minx < 0 or miny < 0 or maxx > x_max or maxy > y_max:
raise ValueError("Input geometry resulted in a window outside of the image")
return self[:, miny:maxy, minx:maxx]
示例12: _parse_geoms
# 需要導入模塊: from shapely import geometry [as 別名]
# 或者: from shapely.geometry import box [as 別名]
def _parse_geoms(self, **kwargs):
""" Finds supported geometry types, parses them and returns the bbox """
bbox = kwargs.get('bbox', None)
wkt_geom = kwargs.get('wkt', None)
geojson = kwargs.get('geojson', None)
if bbox is not None:
g = box(*bbox)
elif wkt_geom is not None:
g = wkt.loads(wkt_geom)
elif geojson is not None:
g = shape(geojson)
else:
return None
if self.proj is None:
return g
else:
return self._reproject(g, from_proj=kwargs.get('from_proj', 'EPSG:4326'))
示例13: poly_iou
# 需要導入模塊: from shapely import geometry [as 別名]
# 或者: from shapely.geometry import box [as 別名]
def poly_iou(polys1, polys2, bound=None):
r"""Intersection over union of polygons.
"""
assert len(polys1) == len(polys2)
polys1 = _to_poly(polys1)
polys2 = _to_poly(polys2)
if bound is not None:
bound = box(0, 0, bound[0] - 1, bound[1] - 1)
polys1 = [p.intersection(bound) for p in polys1]
polys2 = [p.intersection(bound) for p in polys2]
ious = []
eps = np.finfo(float).eps
for poly1, poly2 in zip(polys1, polys2):
area_inter = poly1.intersection(poly2).area
area_union = poly1.union(poly2).area
ious.append(area_inter / (area_union + eps))
return np.clip(np.asarray(ious), 0.0, 1.0)
示例14: get_geometry_cells
# 需要導入模塊: from shapely import geometry [as 別名]
# 或者: from shapely.geometry import box [as 別名]
def get_geometry_cells(self, geometry, bounds=None):
if bounds is None:
bounds = self._get_geometry_bounds(geometry)
minx, miny, maxx, maxy = bounds
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
示例15: __init__
# 需要導入模塊: from shapely import geometry [as 別名]
# 或者: from shapely.geometry import box [as 別名]
def __init__(self, width: int, height: int, xoff=0, yoff=0, zoff=0,
scale=1, buffer=0, background='#FFFFFF', min_width=None, center=True):
self.width = width
self.height = height
self.minx = xoff
self.miny = yoff
self.base_z = zoff
self.scale = scale
self.orig_buffer = buffer
self.buffer = int(math.ceil(buffer*self.scale))
self.background = background
self.min_width = min_width
self.maxx = self.minx + width / scale
self.maxy = self.miny + height / scale
self.bbox = box(self.minx, self.miny, self.maxx, self.maxy)
# how many pixels around the image should be added and later cropped (otherwise rsvg does not blur correctly)
self.buffer = int(math.ceil(buffer*self.scale))
self.buffered_width = self.width + 2 * self.buffer
self.buffered_height = self.height + 2 * self.buffer
self.buffered_bbox = self.bbox.buffer(buffer, join_style=JOIN_STYLE.mitre)
self.background_rgb = tuple(int(background[i:i + 2], 16)/255 for i in range(1, 6, 2))