跳转到主要内容

用于查询地图服务的库,包括ArcGIS、THREDDS、WMS和ScienceBase

项目描述

mapservice-clientlib

Published Coverage Status

一个库,用于简化对地图服务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 查看散列值)

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面