Sky Mapは、National Geographic Information Bureauによって構築された包括的な地理情報サービスWebサイトであり、National Geographic Information Public ServicePlatformのパブリックバージョンです。
一般的に使用されているGoogleマップ、Tencentマップ、Baiduマップ、Microsoftマップ、Bingマップと比較して、Skyマップの違いは何ですか?主にデータの権限と正確性に反映されます。 Tiantuが公開している国境と9本の破線は正確です。さらに、中国のTiantu画像の座標のみにオフセットがなく、他のマップの座標は暗号化されています。
CartopyはPythonベースのマッピングモジュールであり、オンラインマップをロードする機能を提供します。では、マップサービスを呼び出す機能を追加するにはどうすればよいですか?
実際、初期の段階で関連作業がありましたが、スカイマップサービスのアップグレードにより、元の方法は適用できなくなりました。最新の呼び出し方法は次のとおりです。
ウェブサイト:スカイマップ
まず、アカウントを登録してから、[開発リソース]→[マップAPI]を選択する必要があります
コンソールに入り、[Create New Application]をクリックし、サーバー側を選択して、キーを取得できるようにします
TiandiのマップサービスはOGCWMTS標準を採用していますが、これまでのところうまく試行されていないため、XYZタイルの形式を採用しています。
次のコードを追加し、コード内の「your_key」を以前に取得したキーに置き換えるように注意してください
import cartopy.io.img_tiles as cimgt
# スカイマップベクトル
classTDT_vec(cimgt.GoogleWTS):
def _image_url(self, tile):
x, y, z = tile
key ='your_key'
url ='http://t0.tianditu.gov.cn/DataServer?T=vec_w&x=%s&y=%s&l=%s&tk=%s'%(x, y, z, key)return url
# スカイマップリモートセンシング
classTDT_img(cimgt.GoogleWTS):
def _image_url(self, tile):
x, y, z = tile
key ='your_key'
url ='http://t0.tianditu.gov.cn/DataServer?T=img_w&x=%s&y=%s&l=%s&tk=%s'%(x, y, z, key)return url
# スカイマップの地形
classTDT_ter(cimgt.GoogleWTS):
def _image_url(self, tile):
x, y, z = tile
key ='your_key'
url ='http://t0.tianditu.gov.cn/DataServer?T=ter_w&x=%s&y=%s&l=%s&tk=%s'%(x, y, z, key)return url
1、 ベクトルベースマップ、画像ベースマップ、地形ベースマップ
# インポートモジュール
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeat
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
from cartopy.mpl.ticker import LongitudeFormatter,LatitudeFormatter
import cartopy.io.shapereader as shpreader
import numpy as np
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']= False
fig = plt.figure(figsize=(18,12))
ax = fig.add_subplot(1,3,1, projection=ccrs.PlateCarree())
ax.set_extent([118,122,28,32],crs=ccrs.PlateCarree())
request =TDT_vec()
ax.add_image(request,9)
ax.set_title('スカイマップベクトルベースマップ',fontsize=15)
gl = ax.gridlines(draw_labels=True, linewidth=1, color='k', alpha=0.5, linestyle='--')
gl.xlabels_top = gl.ylabels_right = False
gl.xformatter = LONGITUDE_FORMATTER
gl.yformatter = LATITUDE_FORMATTER
ax = fig.add_subplot(1,3,2, projection=ccrs.PlateCarree())
ax.set_extent([118,122,28,32],crs=ccrs.PlateCarree())
request =TDT_img()
ax.add_image(request,9)
ax.set_title('スカイマップ画像ベースマップ',fontsize=15)
gl = ax.gridlines(draw_labels=True, linewidth=1, color='k', alpha=0.5, linestyle='--')
gl.xlabels_top = gl.ylabels_right = False
gl.xformatter = LONGITUDE_FORMATTER
gl.yformatter = LATITUDE_FORMATTER
ax = fig.add_subplot(1,3,3, projection=ccrs.PlateCarree())
ax.set_extent([118,122,28,32],crs=ccrs.PlateCarree())
request =TDT_ter()
ax.add_image(request,9)
ax.set_title('スカイマップ地形ベースマップ',fontsize=15)
gl = ax.gridlines(draw_labels=True, linewidth=1, color='k', alpha=0.5, linestyle='--')
gl.xlabels_top = gl.ylabels_right = False
gl.xformatter = LONGITUDE_FORMATTER
gl.yformatter = LATITUDE_FORMATTER
plt.show()
2、 さまざまなレベルのベースマップ
fig = plt.figure(figsize=(18,12))for i inrange(6,9):
ax = fig.add_subplot(1,3, i-5, projection=ccrs.PlateCarree())
ax.set_extent([120.4,122.1,30.6,32.1],crs=ccrs.PlateCarree())
request =TDT_img()
ax.add_image(request, i)
ax.set_title('Level='+str(i),fontsize=15)
gl = ax.gridlines(xlocs=np.arange(120.5,122.5,0.5),
ylocs=np.arange(30,32.5,0.5),
draw_labels=True,linewidth =0.5,color='k',
alpha=0.5,linestyle='--')
gl.xlabels_top = gl.ylabels_right = False
plt.show()
参照: