(12) Análisis del código fuente de Geospark(1)
Geospark ha personalizado un RDD SpatialRDD, que es una clase general y requiere una subclase de geometría. Para la geometría, sus subclases son puntos, líneas, polígonos, etc. Puede ver JTS Library/JTS/main.html. Luego enumero un miembro importante de SpatialRDD aquí. Para rawSpatialRDD, almacena la geometría que necesitamos analizar.
GeoSpark proporciona PointRDD, PolygonRDD, etc. Todos heredan de SpatialRDD. Tomemos PointRDD como ejemplo para analizar cómo GeoSpark transforma geojson en RDD.
Este es un constructor comúnmente utilizado para PointRDD, en el que la cuarta línea JavaRDD rawTextRDD = particiones! = nulo? contexto de chispa (ubicación de entrada, particiones): contexto de chispa (ubicación de entrada) es utilizar el método nativo de Spark para convertir primero geojson en RDD, su tipo puede entenderse como Cadena, línea 7 if (sourceepsgrscode! = null & amp& amptargetEpsgCode! = nulo) {este. CRS transform(sourcepsgrscode, targetEpsgCode);} es hacer una transformación de coordenadas, la clave es la quinta línea de esto. setrawspacialrdd(rawtextrdd.mappartitions(new pointformatmapper(offset, splitter, carry input data));,
En la línea 5, Geospark primero llama al método mapPartitions para convertir cada fila en rawTextRDD en una geometría, hay una método en pointFormatMapper.
Es una sobrecarga. El parámetro de función stringIterator son todas las cadenas en cada partición. GeoSpark atraviesa esta colección y llama al método addGeometry en cada fila. No se explicará en detalle. Si está interesado, puede consultar el código fuente de Geospark.
Una vez completada esta construcción, GeoJson se transforma en un RDD. pero podemos usar el RDD de Spark para realizar cálculos paralelos en grandes cantidades de datos espaciales.
Aquí miramos la línea 16, devuelve el rdd espacial (nuevo filtro de rango (consulta geometría, considera intersección de límites, verdadero)); en la línea 9, si (useIndex == true) determina que no se necesita ningún índice, saltará a la línea 16. En esencia, RDD todavía se usa para usar funciones personalizadas. Si es verdadero, filtre. p> Tenga en cuenta el método de llamada del método de coincidencia, que se define de la siguiente manera en la clase principal JudgmentBase.
Aquí podemos ver que las líneas 4 y 7 son juzgadas por JTS. Aquí está claro de un vistazo. De hecho, todavía proporcionamos métodos de coincidencia y utilizamos Spark para calcular.
En este artículo, no cubrimos el índice GeoSpark y el principio es el mismo que el anterior. el siguiente artículo.