1

最初に、英国の郵便番号エリアのインタラクティブ マップを作成しました。ここでは、個々のエリアがその値 (たとえば、その郵便番号エリアの人口) に基づいて次のように色で表されます。

from bokeh.plotting import figure
from bokeh.palettes import Viridis256 as palette
from bokeh.models import LinearColorMapper
from bokeh.models import ColumnDataSource
import geopandas as gpd

shp = 'file_path_to_the_downloaded_shapefile'
#read shape file into dataframe using geopandas
df = gpd.read_file(shp)

def expandMultiPolygons(row, geometry):
    if row[geometry].type = 'MultiPolygon':
       row[geometry] = [p for p in row[geometry]]
    return row
#Some rows were in MultiPolygons instead of Polygons.
#Expand MultiPolygons to multi rows of Polygons
df = df.apply(expandMultiPolygons, geometry='geometry', axis=1)
df = df.set_index('Area')['geometry'].apply(pd.Series).stack().reset_index()

#Visualize the polygons. To visualize different colors for different post areas, I added another column called 'value' which has some random integer value. 

p = figure()
color_mapper = LinearColorMapper(palette=palette)
source = ColumnDataSource(df)
p.patches('x', 'y', source=source,\
            fill_color={'field': 'value', 'transform': color_mapper},\
            fill_alpha=1.0, line_color="black", line_width=0.05)

ここで、df は 4 つの列のデータフレームです: 郵便番号エリア、x 座標、y 座標、値 (人口)。

上記のコードは Web ブラウザー上でインタラクティブなマップを作成しますが、これは素晴らしいものですが、インタラクティブ性があまりスムーズではないことに気付きました。マップを拡大または移動すると、レンダリングが遅くなります。データフレームのサイズはわずか 1106 行なので、なぜこんなに遅いのか、かなり混乱しています。

考えられる解決策の 1 つとして、データシェーダー ( https://datashader.readthedocs.io/en/latest/ ) を見つけましたが、サンプル スクリプトは非常に複雑であり、それらのほとんどは Jupyter ノートブックのホロビュー パッケージを使用していますが、私はBokeh を使用してダッシュボードを作成したい。

上記のボケスクリプトにデータシェーダーを組み込むことについて誰かにアドバイスしてもらえますか? bokeh のパッチ関数を使用する代わりに、データシェーダー内でシェイプ マップを作成する別の関数が必要ですか?

どんな提案でも大歓迎です!!!

4

3 に答える 3

1

私のコメントで述べたように、ポリゴンの複雑さが問題を引き起こす可能性があると思います。リンク先のファイルには、サイズと複雑さが異なるいくつかのシェープファイルが含まれています。それらを単純化できます。つまり、各ポリゴンのポイント数を減らします。これにより、見た目が変わる場合があります。もう少し「エッジの効いた」ものから角ばった外観まで、ほとんど違いはありません。これは、選択した単純化のレベルによって異なります。必要に応じて、さまざまなレベルのシンプルさを選択できます。

これを行うための 3 つの簡単なオプションを知っています。

  1. GUI: QGisを試してください。これは、地理空間データ処理のための優れたオープンソース ツールです。Shapefile を新しいレイヤーとして読み込みます。次に、[ベクター] メニューの [ジオメトリの単純化] ツールを使用します。
  2. コマンドライン: GDALはオープンソース ライブラリです。便利なコマンドライン ツールが付属しています。次のように使用できます。ogr2ogr outfile.shp infile.shp -simplify 0.000001
  3. オンライン: mapshaderにアクセスしてください。ファイルをインポートします。シンプルを選択し、レベルを選択します。次に、結果をエクスポートします。ここで私が本当に気に入っているのは、ファイルが即座にレンダリングされることです。したがって、単純化の結果をすぐに確認できます。

それ以外に、ボケのバージョンも更新する必要があります。定期的に更新され、それ以来、いくつかのパフォーマンスが向上しています。

HoloViews または GeoViews を使用しても、パフォーマンスにプラスの影響はありません。したがって、それはあなたの問題とは関係ありません。@James A. Bednarは、そこでいくつかの副次的なアドバイスを与えていたと思います。

于 2017-09-27T20:40:55.043 に答える