Python的Terraserver模块
项目描述
pyTerra是一个Python模块,允许您向微软的Terraserver(http://msrmaps.com/)发出请求。使用它,您可以下载(较旧的)美国几乎所有地理范围的地图图像。
Terraserver为两个非常重要的地图产品提供了对美国几乎全部的覆盖,即地形图和数字正射影像(有时称为DOQs或DOQQs)。您可以在http://mapping.usgs.gov/www/ndop/了解更多关于DOQs的信息,以及更多关于地形图的信息http://mac.usgs.gov/mac/isb/pubs/booklets/symbols/。Terraserver已有一段时间没有更新,现在有许多其他图像源可用,但Terraserver是第一个拥有全国覆盖的。
所有方法都反映TerraService API。有关如何发出调用的更多信息,请参阅http://msrmaps.com/TerraService2.asmx?WSDL处的WSDL文件。
Terraserver将图像存储为瓦片金字塔。每个瓦片始终是200像素的平方,与其实际的地面分辨率无关。航空照片的分辨率有1、2、4、8、16、32和64米。地形图的所有上述分辨率都可用,除了1米。
获取指定区域的图像涉及三个步骤:1. 定义要下载区域的边界框。边界框是一个由框的左上角和左下角点定义的框。该点可以是地理坐标(北纬42.9332度 x 西经-93.2112度)或投影UTM坐标(东经437679.183和北纬4658340.891)。2. 向TerraServer发送请求,返回所有位于边界框内的瓦片。3. 向TerraServer发送请求以获取每个瓦片中的图像数据,并将其粘贴到新的PIL图像中。
历史
这个版本,0.9,使pyTerra与过去几年中发生的许多TerraServer变化保持最新。API已经略有变动,以避免与TerraServer USA的商业产品混淆,并且由于基于四叉树的图像缓存现在非常流行,TerraServer的SOAP API似乎有些过时。它确实提供了一些独特的东西,如元数据和地名录,这可能使它在其他环境中变得有用。我曾使用pyTerra作为avTerra的基础,avTerra是一个ArcView 3.x扩展,用于获取TerraServer图像。我怀疑pyTerra缺乏维护意味着avTerra处于混乱状态,但通过这次更新,它有可能被重新激活。
此代码的先前版本是PSF许可的,但这样做似乎有些愚蠢。0.9+现在是MIT许可,许可文本包含在源代码发布中。
除此之外,使这个代码库现代化的大部分工作都是为了虚荣心,尽管我仍然有一两样东西可能需要它。看看代码,很难相信它已经近九年了……
变更日志
0.9为pyTerra带来了许多变化。首先,SOAPpy已被移除,以换取suds。Suds对于简单任务来说比SOAPpy更好,并且它能够很好地处理Microsoft WSDL。转向Suds大大简化了内部结构,应该更容易理解。
我还将setup.py
现代化,并基于distribute,声明了依赖项PIL
和suds
。此外,之前必须手动运行的单元测试现在可以通过简单的python setup.py test
调用获取。
最后,外部API已经以多种方式进行了更新。这包括诸如在适当的地方返回datetime
实例、支持PNG等。由于多年未见有人使用pyTerra,我怀疑我做的API更改不会有太大影响。
用法
pyTerra现在包含两个模块——api
和image
。这些以前是TerraImage.TerraImage和pyTerra.pyTerra的混乱模块结构。
简短示例
from pyTerra import image class Object: pass lg_ul = Object() lg_ul.X = 433714.25 lg_ul.Y = 4661043.80 lg_ul.Zone = 15 lg_lr = Object() lg_lr.X = 438603.35 lg_lr.Y = 4656591.96 lg_lr.Zone = 15 scale = 'Scale2m' theme = 'Ortho' img = image.TerraImage(ul, lr, scale, theme, lr.Zone, "/tmp") t = img.download() # <-- PIL.Image instance you can do what you need with
有关在获取瓦片信息后获取图像的更多示例,请参阅pyTerra.image
。测试目录还包含各种API方法的良好示例调用和预期输出。
项目详情
下载文件
下载适用于您平台的应用程序文件。如果您不确定选择哪个,请了解有关安装包的更多信息。