直接使用geopyspark提供的测试代码,我这里稍微进行了改造,步骤如下:
1、pycharm创建python项目geotrellis-python-temple。
2、创建py文件:geotrellis-hello.py
3、代码如下:
#引入以下三个包
import geopyspark as gps
from pyspark import SparkContext
from shapely.geometry import box
def test():
#创建spark配置及上下文
conf = gps.geopyspark_conf(appName="geopyspark-example")
sc = SparkContext(conf=conf)
#获取GeoTiff文件并加载
#注意路径,windows使用绝对路径并输入file:///标识,linux不需要盘符,由于spark使用本地模式,不需要hdfs
#如果使用hdfs,则使用hdfs://l目录
raster_layer = gps.geotiff.get(layer_type=gps.LayerType.SPATIAL,
uri='file:///D:/geotrellis/data/hum_daily_2003152.tif',
#uri='file:///D:/geotrellis/data/MODIS_MODIS_EFinst_250m_2003.tif', #local
num_partitions=100)
# 切片图层设置,坐标系设为wgs84,这个建议和输入tif的坐标一致。
tiled_layer = raster_layer.tile_to_layout(layout=gps.GlobalLayout(), target_crs=4326)
#坐标裁剪范围,按照输入tif的extent设置
#area_of_interest = box(138.833923847899, 34.9568230249776, 141.45036774169,37.109457868982)
area_of_interest = box(0, -90.25, 360, 90) #hum_daily_2003152
#area_of_interest = box(87.5781665097915, 29.10363837291, 103.055919463787, 39.3026410747203) #MODIS_MODIS_EFinst_250m_2003
# 根据范围创建切片
masked = tiled_layer.mask(geometries=area_of_interest)
# 创建金字塔
pyramided_mask = masked.pyramid()
# 根据金字塔进行切片
#注意输出路径,要求同输入路径
for pyramid in pyramided_mask.levels.values():
gps.write(#uri='file:///D:/geotrellis/data/python_tem1/output',
uri='file:///D:/geotrellis/data/python_tem1/output_1', #local
layer_name='north-west-philly',
tiled_raster_layer=pyramid)
if __name__ == '__main__':
test()
4、提交给spark执行
由于我是在windows下部署的spark,所以只能使用local模式进行测试。如下:
spark-submit
--jars D:\pythonSystem\Python37\Lib\site-packages\geopyspark\jars\geotrellis-backend-assembly-0.2.0.jar
—master local
--py-files D:\geotrellis\geotrellis-python-temple\build\geotrellis_hello\base_library.zip
D:\geotrellis\geotrellis-python-temple\geotrellis_hello.py
注意:提交的时候需要同时提交geopyspark的jar包,否则报错。
执行结果如下:
说明切片成功。如果需要展示的话还需要进一步渲染。