Beispiel #1
0
    def loads(self, obj, encoding="bytes"):
        binary_parser = BinaryParser(obj)
        spatial_parser_number = binary_parser.read_int()
        spatial_parser = self.get_parser(spatial_parser_number)
        parsed_row = spatial_parser.deserialize(binary_parser)

        return parsed_row
Beispiel #2
0
def read_geometry_from_bytes(bin_parser: BinaryParser):
    geom_data_length = bin_parser.read_int()
    user_data_length = bin_parser.read_int()
    geom = bin_parser.read_geometry(geom_data_length)
    user_data = bin_parser.read_string(user_data_length)

    return (geom, user_data)
Beispiel #3
0
    def SpatialKnnQuery(self, spatialRDD: SpatialRDD,
                        originalQueryPoint: BaseGeometry, k: int,
                        useIndex: bool):
        """

        :param spatialRDD: spatialRDD
        :param originalQueryPoint: shapely.geometry.Point
        :param k: int
        :param useIndex: bool
        :return: pyspark.RDD
        """
        jvm = spatialRDD._jvm
        jvm_geom = GeometryAdapter.create_jvm_geometry_from_base_geometry(
            jvm, originalQueryPoint)

        knn_neighbours = jvm.KNNQuery.SpatialKnnQuery(spatialRDD._srdd,
                                                      jvm_geom, k, useIndex)

        srdd = JvmGeoSparkPythonConverter(
            jvm).translate_geometry_seq_to_python(knn_neighbours)

        geoms_data = []
        for arr in srdd:
            binary_parser = BinaryParser(arr)
            geom = SpatialRDDParserData.deserialize(binary_parser)
            geoms_data.append(geom)

        return geoms_data
Beispiel #4
0
    def geometry_from_bytes(cls, bin_parser: BinaryParser) -> BaseGeometry:
        g_type = bin_parser.read_byte()
        shape_type = ShapeEnum.get_name(g_type)

        if shape_type == ShapeEnum.circle.name:
            return CircleParser.deserialize(bin_parser)

        elif shape_type == ShapeEnum.shape.name:
            gm_type = bin_parser.read_byte()
            if GeomEnum.has_value(gm_type):
                name = GeomEnum.get_name(gm_type)
                parser = PARSERS[name]
                geom = parser.deserialize(bin_parser)
                return geom
            else:
                raise GeometryUnavailableException(
                    f"Can not deserialize object")
Beispiel #5
0
    def __setstate__(self, attributes):
        bin_parser = BinaryParser(attributes["geom"])
        is_circle = bin_parser.read_byte()
        geom_bytes = attributes["geom"]

        if is_circle:
            radius = bin_parser.read_double()
            geom = bin_parser.read_geometry(geom_bytes.__len__() - 9)
            self._geom = Circle(geom, radius)
        else:
            self._geom = bin_parser.read_geometry(geom_bytes.__len__() - 1)

        self._userData = attributes["userData"]
Beispiel #6
0
    def deserialize(self, datum):
        bin_parser = BinaryParser(datum)
        geom = GeometryFactory.geometry_from_bytes(bin_parser)

        return geom
Beispiel #7
0
 def geom_from_bytes_data(cls, bin_data: List):
     bin_parser = BinaryParser(bin_data)
     return cls.geometry_from_bytes(bin_parser)
Beispiel #8
0
 def geometry_from_bytes(cls, bin_parser: BinaryParser) -> GeoData:
     geom, user_data = read_geometry_from_bytes(bin_parser)
     radius = bin_parser.read_double()
     geo_data = GeoData(geom=Circle(geom, radius), userData=user_data)
     return geo_data