异步cogeotiff读取器

aiocogeo的Python项目详细描述


航空地理CircleCIcodecov

安装

pip install aiocogeo

# With S3 filesystem
pip install aiocogeo[s3]

使用

{cd1>使用异步上下文管理器^打开:

^{pr2}$

支持多种文件系统:

  • HTTP/HTTPShttp://https://
  • S3s3://
  • File/

元数据

为COG生成rasterio-style profile

asyncwithCOGReader("https://async-cog-reader-test-data.s3.amazonaws.com/lzw_cog.tif")ascog:print(cog.profile)>>>{'driver':'GTiff','width':10280,'height':12190,'count':3,'dtype':'uint8','transform':Affine(0.6,0.0,367188.0,0.0,-0.6,3777102.0),'blockxsize':512,'blockysize':512,'compress':'lzw','interleave':'pixel','crs':'EPSG:26911','tiled':True,'photometric':'rgb'}

低级元数据

COG由多个IFD组成,每个IFD都有许多TIFF标记:

fromaiocogeo.ifdimportIFDfromaiocogeo.tagimportTagasyncwithCOGReader("https://async-cog-reader-test-data.s3.amazonaws.com/lzw_cog.tif")ascog:forifdincog:assertisinstance(ifd,IFD)fortaginifd:assertisinstance(tag,Tag)

每个IFD包含的关于映像的粒度元数据比概要文件中包含的元数据更多。例如,查找 每个IFD的瓷砖大小:

asyncwithCOGReader("https://async-cog-reader-test-data.s3.amazonaws.com/lzw_cog.tif")ascog:forifdincog:print(ifd.TileWidth.value,ifd.TileHeight.value)>>>512512128128128128128128128128128128

更高级的用例可能需要访问标记级别的元数据:

asyncwithCOGReader("https://async-cog-reader-test-data.s3.amazonaws.com/lzw_cog.tif")ascog:first_ifd=cog.ifds[0]assertfirst_ifd.tag_count==24fortaginfirst_ifd:print(tag)>>>Tag(code=258,name='BitsPerSample',tag_type=TagType(format='H',size=2),count=3,length=6,value=(8,8,8))Tag(code=259,name='Compression',tag_type=TagType(format='H',size=2),count=1,length=2,value=5)Tag(code=257,name='ImageHeight',tag_type=TagType(format='H',size=2),count=1,length=2,value=12190)Tag(code=256,name='ImageWidth',tag_type=TagType(format='H',size=2),count=1,length=2,value=10280)...

图像数据

读取器还具有读取内部图像块和执行部分读取的方法。目前只支持jpeg、lzw、deflate、packbits和webp压缩。在

图像平铺

以本机分辨率读取图像左上角的平铺图:

asyncwithCOGReader("https://async-cog-reader-test-data.s3.amazonaws.com/webp_cog.tif")ascog:x=y=z=0tile=awaitcog.get_tile(x,y,z)ifd=cog.ifds[z]asserttile.shape==(ifd.bands,ifd.TileHeight.value,ifd.TileWidth.value)

部分读取

您可以通过在图像的本机crs中指定边界框和输出形状来读取图像的一部分:

asyncwithCOGReader("https://async-cog-reader-test-data.s3.amazonaws.com/webp_cog.tif")ascog:assertcog.epsg==26911partial_data=awaitcog.read(bounds=(368461,3770591,368796,3770921),shape=(512,512))

内部掩码

如果COG有一个内部掩码,则返回的数组将是一个掩码数组:

importnumpyasnpasyncwithCOGReader("https://async-cog-reader-test-data.s3.amazonaws.com/naip_image_masked.tif")ascog:assertcog.is_maskedtile=awaitcog.get_tile(0,0,0)assertnp.ma.is_masked(tile)

配置

配置选项通过环境变量公开:

  • incented_BYTES_AT_OPEN定义文件打开时第一个GET请求中的字节数(默认为16KB)
  • HEADER_CHUNK_SIZE-用于读取头的块大小(默认为16KB)
  • ENABLE_BLOCK_CACHE确定是否在内存中缓存图像块(默认为TRUE)
  • ENABLE_HEADER_CACHE-确定COG头是否缓存在内存中(默认为TRUE)
  • HTTP_MERGE_continuous_RANGES确定是否将连续范围合并到单个请求中(默认为FALSE)
  • BOUNDLESS_READ确定是否读取IFD边界之外的内部分片(默认为TRUE)
  • BOUNDLESS_READ_FILL_VALUE确定用于填充无边界读取的值(默认为0)
  • LOG_LEVEL确定包使用的日志级别(默认为ERROR)
  • VERBOSE_LOGS—启用详细日志记录,设计用于LOG_LEVEL=DEBUG(默认为FALSE)时使用
  • AWS\u REQUEST_PAYER-设置为requester以启用从S3 RequesterPays存储桶读取。在

有关配置选项的详细信息,请参阅^{}。在

命令行接口

$ aiocogeo --help
Usage: aiocogeo [OPTIONS] COMMAND [ARGS]...

Options:
  --install-completion [bash|zsh|fish|powershell|pwsh]
                                  Install completion for the specified shell.
  --show-completion [bash|zsh|fish|powershell|pwsh]
                                  Show completion for the specified shell, to
                                  copy it or customize the installation.

  --help                          Show this message and exit.

Commands:
  create-tms  Create OGC TileMatrixSet.
  info        Read COG metadata.

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为什么只为字符数组重载println方法,而不为字符串、整数等其他数组重载?   java将快速线程返回到池中,而不是等待慢速线程   创建jar文件时java SwingWorker不工作   java如何将依赖注入RabbitListener   java如何在gradle任务中通过scp复制目录?   java在MySql数据库中创建表时,遇到NullPointerException   java HTTP Status 500 Servlet执行引发异常   在JAVA中对arraylist使用继承时出错   java PowerMockito未完成存根异常   如果没有错误/警告增加到某个极限,java是否停止在eclipse中构建项目或使用maven?   java Robolectric如何测试DateFormat。getBestDateTimePattern()   google云平台GCP数据存储Java API,构建一个空值实体   VerifyListener和FocusListener之间的java冲突   安卓是否可以在Java中的另一个方法内部强制调用一个方法?   JavaWindows7、JDK1.8、SpringBoot应用程序JAR在方法安全性方面占用了大量时间。getProviders()返回   Bean提供程序的java错误消息   java Slick动画每帧必须有一个持续时间   java无法在Trie中设置isLeaf标志   java为什么JVM不能创建包含main方法的类的对象,以便从该类访问main方法,如果它具有该类的名称?   java Apache Camel+CXF端点身份验证