def serialize_polygon(self, geometry: Polygon) -> gpb.Geometry:
        # get outer ring
        exterior_linestring = geometry.exterior
        # get inner linear rings
        interior_rings = geometry.interiors

        exterior_coords = [
            self.create_coordinate_from_tuple(coord)
            for coord in list(exterior_linestring.coords)
        ]
        external_geo = gpb.Geometry(coordinates=exterior_coords)

        geo_polygon = None

        if len(interior_rings) > 0:
            interior_geometries = []
            for linear_ring in interior_rings:
                ring_coords = [
                    self.create_coordinate_from_tuple(coord)
                    for coord in linear_ring.coords
                ]
                iGeo = gpb.Geometry(coordinates=ring_coords, )
                interior_geometries.append(iGeo)
            interiorGeos = gpb.Geometry(geometries=interior_geometries, )
            geo_polygon = gpb.Geometry(type=gpb.Type.POLYGON,
                                       geometries=[external_geo, interiorGeos])
        else:
            geo_polygon = gpb.Geometry(type=gpb.Type.POLYGON,
                                       geometries=[external_geo])

        return geo_polygon
示例#2
0
    def serialize_point(self, p: Point) -> gpb.Geometry:
        try:
            coordinate = gpb.Coordinate(x=p.x, y=p.y, z=p.z)
        except shapely.errors.DimensionError:
            coordinate = gpb.Coordinate(x=p.x, y=p.y)

        return gpb.Geometry(type=gpb.Type.POINT, coordinates=[coordinate])
    def serialize_point(self, p: Point) -> gpb.Geometry:
        try:
            coordinate = gpb.Coordinate(x=p.x, y=p.y, z=p.z, has_z=True)
        except DimensionError:
            coordinate = gpb.Coordinate(x=p.x, y=p.y, has_z=False)

        return gpb.Geometry(type=gpb.Type.POINT, coordinates=[coordinate])
示例#4
0
 def serialize_linearing(self, l: LinearRing):
     if (len(l.coords) < 2):
         raise 'Insufficient Coordinates'
     else:
         coords = [
             self.create_coordinate_from_tuple(coord)
             for coord in list(l.coords)
         ]
         return gpb.Geometry(type=gpb.Type.LINEARRING, coordinates=coords)
 def serialize_linearing(self, l: LinearRing):
     coords = [
         self.create_coordinate_from_tuple(coord)
         for coord in list(l.coords)
     ]
     return gpb.Geometry(type=gpb.Type.LINEARRING, coordinates=coords)
 def serialize_geometry_collection(self, gc: GeometryCollection):
     geometries = [self.serialize(geom) for geom in gc.geoms]
     return gpb.Geometry(
         type=gpb.Type.GEOMETRYCOLLECTION,
         geometries=geometries,
     )
 def serialize_multi_polygon(self, mp: MultiPolygon):
     return gpb.Geometry(
         type=gpb.Type.MULTIPOLYGON,
         geometries=[self.serialize_polygon(p) for p in mp.geoms],
     )
 def serialize_multi_linestring(self, ls: MultiLineString):
     return gpb.Geometry(
         type=gpb.Type.MULTILINESTRING,
         geometries=[self.serialize_linestring(line) for line in ls.geoms],
     )
 def serialize_multi_point(self, mp: MultiPoint):
     return gpb.Geometry(
         type=gpb.Type.MULTIPOINT,
         geometries=[self.serialize_point(point) for point in mp.geoms],
     )