用于查询地图服务的库,包括ArcGIS、THREDDS、WMS和ScienceBase
项目描述
mapservice-clientlib
一个库,用于简化对地图服务REST API的Web服务调用。目前支持
- ArcGIS(版本10.1及以上)
- THREDDS
- WMS / NcWMS(版本1.1.1和1.3.0)
- ScienceBase
每个都利用restle库将查询到的地图服务数据表示为Python对象。每个还提供了一些将投影的地图服务数据渲染为图像的默认功能,这些功能可以根据需要按类覆盖。
除此之外,还有一些用于处理图像(PIL)和范围(主要是地理、Web Mercator和其他proj4兼容投影)的实用工具。
安装
使用pip install mapservice-clientlib
安装。
用法
以下是每个支持的地图服务Web API标准的示例。
ArcGIS资源
可以查询ArcGIS地图、要素和图像服务。
from clients.arcgis import MapServerResource, ArcGISSecureResource
from clients.arcgis import FeatureLayerResource, FeatureServerResource, ImageServerResource
from clients.utils.geometry import Extent
# Query the feature service, or an individual layer (lazy=False: query executed right away)
client = FeatureServerResource.get(service_url, lazy=False)
layer = FeatureLayerResource.get(service_url + "/0", lazy=False)
# Query an image service lazily (default behavior: executes query on property reference)
client = ImageServerResource.get(service_url, lazy=True)
client.extent # Query executes here
# Query a map service and generate an image
arcgis_image = MapServerResource.get(service_url).get_image(
extent, width=400, height=200,
layers="show:0",
layer_defs="<arcgis_layer_defs>",
time="<arcgis_time_val>",
custom_renderers={} # Renderer JSON
)
# Query a secure map service (generates token from URL and credentials)
client = MapServerResource.get(service_url, username="user", password="pass")
# Query a secure map service with existing token
token_obj = ArcGISSecureResource.generate_token(
service_url, "user", "pass", duration=15
)
client = MapServerResource.get(service_url, token=token_obj.token)
# Reproject an ArcGIS extent to Web Mercator
old_extent = Extent(
{'xmin': -180.0000, 'xmax': 180.0000, 'ymin': -90.0000, 'ymax': 90.0000},
spatial_reference={'wkid': 4326}
)
geometry_url = 'http://tasks.arcgisonline.com/arcgis/rest/services/Geometry/GeometryServer'
client = GeometryServiceClient(geometry_url)
extent = client.project_extent(old_extent, {'wkid': 3857}).limit_to_global_extent()
WMS
可以查询WMS服务,支持NcWMS。
from clients.wms import WMSResource
# Query a secure WMS service
client = WMSResource.get(
url=wms_url, token="token", token_id="josso", version="1.3.0", spatial_ref="EPSG:3857"
)
# Query a public WMS service and generate an image (supports NcWMS as well)
wms_image = WMSResource.get(
wms_url
).get_image(
extent, width=400, height=200,
layer_ids=[...],
style_ids=[...],
time_range="<wms_time_val>",
params={...}, # Additional image params
image_format="png"
)
THREDDS
可以查询THREDDS资源,并从相关WMS端点获取元数据。
from clients.thredds import ThreddsResource
client = ThreddsResource.get(url)
# See gis-metadata-parser for more
metadata = client._metadata_parser
metadata.data_credits
metadata.use_constraints
# Makes a WMS image request
thredds_image = client.get_image(
extent, width, height,
layer_ids=[...],
style_ids=[...],
time_range="<wms_time_val>",
params={...}, # Additional image params
image_format="png"
)
ScienceBase
可以查询公共和私有ScienceBase项目。
from clients.sciencebase import ScienceBaseResource, ScienceBaseSession
# Query a public ScienceBase item
client = ScienceBaseResource.get(service_url, lazy=False)
client.summary
# Query a private WMS-backed ScienceBase item
sb_session = ScienceBaseSession(
josso_session_id="token",
username="sciencebase_user"
)
sb_session.login("sciencebase_user", "pass")
client = ScienceBaseResource.get(
url=service_url,
lazy=False,
session=sb_session,
# Same token for WMS as for base item
token=sb_session._jossosessionid
)
client.service_client.full_extent # WMSResource.full_extent
# Query a private ArcGIS-backed ScienceBase item
sb_session = ScienceBaseSession(
josso_session_id="token",
username="sciencebase_user"
)
sb_session.login("sciencebase_user", "pass")
client = ScienceBaseResource.get(
url=service_url,
lazy=False,
session=sb_session,
token=sb_session._jossosessionid,
# Separate credentials for ArcGIS service
arcgis_credentials={
# Or just use "token": "existing_token"
"username": "arcgis_user",
"password": "arcgis_pass"
}
)
client.service_client.full_extent # ArcGISResource.full_extent
范围工具
范围对象具有许多有用的方法。以下是支持投影的一些示例。
from clients.utils.geometry import Extent
extent_from_dict = Extent({
"xmin": -180.0, "ymin": -90.0, "xmax": 180.0, "ymax": 90.0,
"spatial_reference": {"wkid": 4326}
})
web_mercator_extent = extent_from_dict.project_to_web_mercator()
extent_from_list = Extent(
# In order of xmin, ymin, xmax, ymax
[-20037508.342789244, -20037471.205137067, 20037508.342789244, 20037471.20513706],
spatial_reference="EPSG:3857"
)
geographic_extent = extent_from_dict.project_to_geographic()
投影详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源分发
mapservice_clientlib-2.3.0.tar.gz (128.7 kB 查看散列值)
构建分发
mapservice_clientlib-2.3.0-py3-none-any.whl (168.5 kB 查看散列值)
关闭
散列值 for mapservice_clientlib-2.3.0-py3-none-any.whl
算法 | 散列摘要 | |
---|---|---|
SHA256 | 988090d32071046c936169cc3a694d156a05ecd1f661d528583cc22648d5b6cb |
|
MD5 | 1d539f7792b1efb1ec6668f768b2dd6a |
|
BLAKE2b-256 | 4c01dafea82345a514535a0a0e2edfa1b26d384c8c97f6eb6b657b2dc61a3c84 |