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
def SpatialRangeQuery(self, spatialRDD: SpatialRDD, rangeQueryWindow: BaseGeometry, considerBoundaryIntersection: bool, usingIndex: bool): """ :param spatialRDD: :param rangeQueryWindow: :param considerBoundaryIntersection: :param usingIndex: :return: """ jvm = spatialRDD._jvm sc = spatialRDD._sc jvm_geom = GeometryAdapter.create_jvm_geometry_from_base_geometry(jvm, rangeQueryWindow) srdd = jvm.\ RangeQuery.SpatialRangeQuery( spatialRDD._srdd, jvm_geom, considerBoundaryIntersection, usingIndex ) serialized = JvmGeoSparkPythonConverter(jvm).translate_spatial_rdd_to_python(srdd) return RDD(serialized, sc, GeoSparkPickler())
def test_polygon(self): polygon = Polygon([(0, 0), (0, 1), (1, 1), (1, 0), (0, 0)]) jvm_geom = GeometryAdapter.create_jvm_geometry_from_base_geometry(self.sc._jvm, polygon) assert jvm_geom.toString() == "POLYGON ((0 0, 0 1, 1 1, 1 0, 0 0))" ext = [(0, 0), (0, 2), (2, 2), (2, 0), (0, 0)] int = [(1, 1), (1, 1.5), (1.5, 1.5), (1.5, 1), (1, 1)] polygon = Polygon(ext, [int]) jvm_geom = GeometryAdapter.create_jvm_geometry_from_base_geometry(self.sc._jvm, polygon) assert jvm_geom.toString() == "POLYGON ((0 0, 0 2, 2 2, 2 0, 0 0), (1 1, 1.5 1, 1.5 1.5, 1 1.5, 1 1))" wkt = "POLYGON ((-71.1776585052917 42.3902909739571, -71.1776820268866 42.3903701743239, -71.1776063012595 42.3903825660754, -71.1775826583081 42.3903033653531, -71.1776585052917 42.3902909739571))" polygon = loads(wkt) jvm_geom = GeometryAdapter.create_jvm_geometry_from_base_geometry(self.sc._jvm, polygon) assert jvm_geom.toString() == wkt
def test_linestring(self): wkt = 'LINESTRING (-71.160281 42.258729, -71.160837 42.259113, -71.161144 42.25932)' linestring = loads(wkt) jvm_geom = GeometryAdapter.create_jvm_geometry_from_base_geometry(self.sc._jvm, linestring) assert jvm_geom.toString() == wkt
def test_point(self): wkt = "POINT (-71.064544 42.28787)" point = loads(wkt) jvm_geom = GeometryAdapter.create_jvm_geometry_from_base_geometry(self.sc._jvm, point) assert jvm_geom.toString() == wkt