mpl_toolkits.basemap 開発はストップ、cartopy 使えやヲラ、てことなので (6.5) – add_wmts (+ GeoSeer)

(6) への追記にするか迷った内容。

(6)で WMS へのアクセスである add_wms については触れたが、同じく owslib を入れて出来るようになる add_wmts については触れるのを避けた。問題を見つけていたからなの。

WMTS サーバ含め「いろんな地図サービスはないかいね」を検索するのに、GeoSeer という凄まじいのを見つけた。いつもながら「ありがとう、StackExchange」。してたとえば q=wmts+United+States して見つかるもので:

 1 # -*- coding: utf-8 -*-
 2 import matplotlib.pyplot as plt
 3 import cartopy.crs as ccrs
 4 
 5 
 6 def main():
 7     url = "http://geoserver.usanpn.org/geoserver/gwc/service/wmts"
 8     layers = ["si-x:bloom_return_interval"]
 9 
10     fig = plt.figure()
11     fig.set_size_inches(16.53*2, 11.69*2)
12     ax = fig.add_subplot(projection=ccrs.GOOGLE_MERCATOR)
13     clon, clat = -85.781, 41.112
14     ax.set_extent([clon - 45, clon + 22, clat - 18, clat + 4])
15     for layer in layers:
16         ax.add_wmts(url, layer)
17     ax.coastlines("110m")
18     ax.set_title(
19         "Spring Indices, Yearly Return Interval - Spring Index Bloom Return Interval")
20     import os, sys
21     plt.savefig(os.path.basename(sys.argv[0]) + ".png", bbox_inches="tight")
22     #plt.show()
23     plt.close(fig)
24 
25 
26 if __name__ == '__main__':
27     main()

wmts_exam_01.py
いいね、すはらしい。

けれども、というかワタシはこっちを先に喰らったのであるが:

 1 # -*- coding: utf-8 -*-
 2 import matplotlib.pyplot as plt
 3 import cartopy.crs as ccrs
 4 
 5 
 6 def main():
 7     url = 'https://mrdata.usgs.gov/mapcache/wmts'
 8     layers = ['mrds-PGE_OS', 'mrds-STN_D_G', 'mrds-DIT', 'mrdsc']
 9 
10     fig = plt.figure()
11     fig.set_size_inches(16.53, 11.69)
12     ax = fig.add_subplot(projection=ccrs.GOOGLE_MERCATOR)
13     clon, clat = -85.781, 41.112
14     ax.set_extent([clon - 45, clon + 22, clat - 18, clat + 4])
15     for layer in layers:
16         ax.add_wmts(url, layer)
17     ax.coastlines("110m")
18     import os, sys
19     plt.savefig(os.path.basename(sys.argv[0]) + ".png", bbox_inches="tight")
20     #plt.show()
21     plt.close(fig)
22 
23 
24 if __name__ == '__main__':
25     main()
 1 Traceback (most recent call last):
 2   File "c:\Users\hhsprings\wmts_exam_02.py", line 27, in <module>
 3     main()
 4   File "c:\Users\hhsprings\wmts_exam_02.py", line 17, in main
 5     ax.add_wmts(url, layer)
 6   File "C:\Program Files\Python39\lib\site-packages\cartopy\mpl\geoaxes.py", line 2141, in add_wmts
 7     return self.add_raster(wmts, **kwargs)
 8   File "C:\Program Files\Python39\lib\site-packages\cartopy\mpl\geoaxes.py", line 1224, in add_raster
 9     raster_source.validate_projection(self.projection)
10   File "C:\Program Files\Python39\lib\site-packages\cartopy\io\ogc_clients.py", line 421, in validate_projection
11     self._matrix_set_name(projection)
12   File "C:\Program Files\Python39\lib\site-packages\cartopy\io\ogc_clients.py", line 416, in _matrix_set_name
13     raise ValueError(msg)
14 ValueError: Unable to find tile matrix for projection.
15     Projection: <cartopy.crs.Mercator object at 0x000001C339933900>
16     Available tile CRS URNs:
17         urn:ogc:def:crs:EPSG:6.3:3857
18         urn:ogc:def:crs:EPSG:6.3:4326
19         urn:ogc:def:crs:EPSG:6.3:900913

#1796 参照。この措置後の越後製菓:
wmts_exam_02.py

あと、この #1796 とは無関係の問題も見つけてるが、なんというかこっちはどうしようもない気がしてる。NOAA のこれなんだけれど、このサーバそのものが非常にマズくて、「GetTile」を受け付けずに「gettile」でないといけない。一応 owslib/wmts.py の WebMapTileService#buildTileRequest に手を入れることで措置は可能だが、これを owslib に対処求めるのもヘンだと思うし、NOAA のサービス側に要求するのもなんかちょっと違う気もして、どうしたもんかと。

これらの WMTS の問題はともかくとして、GeoSeer はいいね。地図サーバ関係って、結構ユーザ登録しないと使えないものとかも多くて、ヘビィなものだと住所氏名年齢等の個人情報をかなり入力しないといけないものが結構多い。GeoSeer から見つかるものはとにかく数が多いので、実験用に相手にするものには事欠かない。



Related Posts