3

こんにちは私はベースマップ(matplot libの一部)の大圏関数を使用してIPアドレスのグラフを世界地図にマッピングしようとしていますが、太平洋にまたがる2つのポイントを接続するたびに(つまり、米国西海岸のどこかとオーストラリア)私のプロットに表示される水平線があります。

私はそれがこの問題のせいであることを知っています:

Note Cannot handle situations in which the great circle intersects the edge of the map projection domain, and then re-enters the domain. (http://matplotlib.org/basemap/api/basemap_api.html#mpl_toolkits.basemap.Basemap.drawgreatcircle)

誰かがそれを修正する方法を知っているのか、それともこの問題がない別のパッケージを知っているのか疑問に思っています。ありがとう!

4

2 に答える 2

8

特定の場合にベースマップでこれを解決するために、結果のパスのx頂点の違いを確認できます。そこから、悪い道を2つのセクションに分けることができます。ベースマップを使用してこれを行う独自の例をまとめました。

from mpl_toolkits.basemap import Basemap
import numpy as np
import matplotlib.pyplot as plt


m = Basemap(projection='cyl', lon_0=0, resolution='c')

m.fillcontinents(color='coral',lake_color='aqua')
m.drawmapboundary(fill_color='aqua')

places = {'Mexico City': (19.05, -99.366667),
          'London': (51.507222, -0.1275),
          'Sydney': (-33.859972, 151.211111),
          'Cape Town': (-33.925278, 18.423889),
          'Delhi': (28.61, 77.23),
          }

network = [
           ('London', 'Delhi'),
           ('Mexico City', 'Sydney'),
           ]


for source, target in network:
    lat1, lon1 = places[source]
    lat2, lon2 = places[target]
    line, = m.drawgreatcircle(lon1, lat1, lon2, lat2, lw=3)

    p = line.get_path()
    # find the index which crosses the dateline (the delta is large)
    cut_point = np.where(np.abs(np.diff(p.vertices[:, 0])) > 200)[0]
    if cut_point:
        cut_point = cut_point[0]

        # create new vertices with a nan inbetween and set those as the path's vertices
        new_verts = np.concatenate(
                                   [p.vertices[:cut_point, :], 
                                    [[np.nan, np.nan]], 
                                    p.vertices[cut_point+1:, :]]
                                   )
        p.codes = None
        p.vertices = new_verts


plt.show()

結果:

出力例

これは一般的な解決策ではなく、緯度と経度がある場合にのみ機能します。一般的な問題を解決することは、はるかに困難であり、cartopy(http://scitools.org.uk/cartopy/docs/latest/)の焦点です。これをカートピーでまったく同じプロットを行う例を、数日以内に投稿します。

HTH

于 2013-01-04T09:40:11.840 に答える
0

この問題がない別のパッケージ:cartopy(まだ発表されていません)。ここにある例は関連性があります。

HTH

于 2013-01-04T08:40:28.477 に答える