Pythonで多数のポイントを逆ジオコーディングするにはどうすればよいですか?

オースティン・スミス

現在、GeoJson ファイルがあり、次の関数で shapely を使用しています。

座標を取り、近隣の名前を返します

    def get_neighb(lat, lon):
    """Input Latitude and Longitude, Returns Neighborhood Name"""
    point = Point(lon, lat)
    found = False
    for feature in geo_data['features']:
        polygon = shape(feature['geometry'])
        if polygon.contains(point):
            return(feature['properties']['neighborhood'])
            found = True
    if found is False:
        return('NA')

# Initialize list
tn = ['']*data.shape[0]
for i in range(len(tn)):
    tn[i] = get_neighb(data.latitude[i], data.longitude[i])

これは機能しますが、非常に遅いため、どのように高速化できるかを考え、現在 4,000,000 行で実行しています。

おそらく

たとえば、PostGIS データベースの高負荷な機械を避けたい場合は、rtreeパッケージを (ドキュメントに記載されているように) 「cheapo 空間データベース」として使用することをお勧めします。考え方は主に次のようになります。

#!/usr/bin/env python
from itertools import product
from random import uniform, sample, seed
from rtree import index
from shapely.geometry import Point, Polygon, box, shape
from shapely.affinity import translate

seed(666)

#generate random polygons, in your case, the polygons are stored
#in geo_data['features']
P = Polygon([(0, 0), (0.5, 0), (0.5, 0.5), (0, 0.5), (0, 0)])
polygons = []
for dx, dy in product(range(0, 100), range(0, 100)):
    polygons.append(translate(P, dx, dy))

#construct the spatial index and insert bounding boxes of all polygons
idx = index.Index()
for pid, P in enumerate(polygons):
    idx.insert(pid, P.bounds)

delta = 0.5
for i in range(0, 1000):
    #generate random points
    x, y = uniform(0, 10), uniform(0, 10)
    pnt = Point(x, y)

    #create a region around the point of interest
    bounds = (x-delta, y-delta, x+delta, y+delta)

    #also possible, but much slower
    #bounds = pnt.buffer(delta).bounds

    #the index tells us which polygons are worth checking, i.e.,
    #the bounding box of which intersects with the region constructed in previous step
    for candidate in idx.intersection(bounds):
        P = polygons[candidate]

        #test only these candidates
        if P.contains(pnt):
            print(pnt, P)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Python 3でバイトオブジェクトのエンコーディングを変更するにはどうすればよいですか?

分類Dev

逆ジオコーディングを使用してMapboxの市/州/国を取得するにはどうすればよいですか?

分類Dev

入力フィールドに逆ジオコーディング値を取得するにはどうすればよいですか?

分類Dev

AndroidでジオコーディングAPI(JSON)を使用するにはどうすればよいですか?

分類Dev

すべてのイオンページのパディングのデフォルト値を変更するにはどうすればよいですか?

分類Dev

BIRT Excelレポートで多数の行(50kのオーダー)をレンダリングするにはどうすればよいですか?

分類Dev

Androidデータバインディングでオブジェクトのメソッドを使用するにはどうすればよいですか?

分類Dev

テキストファイルのエンコーディング/コードページを検出するにはどうすればよいですか?

分類Dev

SELECTコンポーネントを使用してBlazorで双方向バインディングを取得するにはどうすればよいですか?

分類Dev

AngularおよびPolymerWebコンポーネントに双方向バインディングを実装するにはどうすればよいですか?

分類Dev

オブジェクトの名前を取得するために、reactコンポーネントのIDでデータのリストをフィルタリングするにはどうすればよいですか?

分類Dev

多数のオンラインメンバーを取得するにはどうすればよいですか?

分類Dev

このアコーディオンをレスポンシブにし、ページの中央に配置するにはどうすればよいですか?

分類Dev

HTMLにブートストラップポップオーバーバインディングを追加するにはどうすればよいですか?

分類Dev

配列内の各オブジェクトのコンポーネントをレンダリングするにはどうすればよいですか?

分類Dev

mockito / powermockを使用してGoogleのジオコーディングAPIリクエストをモックするにはどうすればよいですか?

分類Dev

ジオメトリタイプでジオデータフレームをフィルタリングするにはどうすればよいですか?

分類Dev

プラグインをgrailsのデフォルトのgspエンコーディングから除外するにはどうすればよいですか?

分類Dev

カスタムコンポーネントとして使用する場合、ラジオボタンにngModel(双方向バインディング)を実装するにはどうすればよいですか?

分類Dev

Springでデフォルトのオーバーライド可能なコンポーネントを作成するにはどうすればよいですか?

分類Dev

Springでデフォルトのオーバーライド可能なコンポーネントを作成するにはどうすればよいですか?

分類Dev

キーにポインタが存在するjsonオブジェクトを逆シリアル化するにはどうすればよいですか?

分類Dev

サーバー/クライアントのビデオおよびオーディオストリーミングアプリケーションをコーディングするにはどうすればよいですか?

分類Dev

ngx-bootstrapアコーディオングループの見出しにアイコンを追加するにはどうすればよいですか?

分類Dev

Circeでオプションタイプのカスタムエンコーディングを作成するにはどうすればよいですか?

分類Dev

LightTableのデフォルトのキーバインディングをオーバーライドするにはどうすればよいですか?

分類Dev

xamlでnullコントロールではなくバインディングのみを作成するにはどうすればよいですか?

分類Dev

コンポーネントにディレクティブのバインディングが含まれているかどうかを確認するにはどうすればよいですか

分類Dev

pメニューコンポーネントの幅/パディングを変更するにはどうすればよいですか?

Related 関連記事

  1. 1

    Python 3でバイトオブジェクトのエンコーディングを変更するにはどうすればよいですか?

  2. 2

    逆ジオコーディングを使用してMapboxの市/州/国を取得するにはどうすればよいですか?

  3. 3

    入力フィールドに逆ジオコーディング値を取得するにはどうすればよいですか?

  4. 4

    AndroidでジオコーディングAPI(JSON)を使用するにはどうすればよいですか?

  5. 5

    すべてのイオンページのパディングのデフォルト値を変更するにはどうすればよいですか?

  6. 6

    BIRT Excelレポートで多数の行(50kのオーダー)をレンダリングするにはどうすればよいですか?

  7. 7

    Androidデータバインディングでオブジェクトのメソッドを使用するにはどうすればよいですか?

  8. 8

    テキストファイルのエンコーディング/コードページを検出するにはどうすればよいですか?

  9. 9

    SELECTコンポーネントを使用してBlazorで双方向バインディングを取得するにはどうすればよいですか?

  10. 10

    AngularおよびPolymerWebコンポーネントに双方向バインディングを実装するにはどうすればよいですか?

  11. 11

    オブジェクトの名前を取得するために、reactコンポーネントのIDでデータのリストをフィルタリングするにはどうすればよいですか?

  12. 12

    多数のオンラインメンバーを取得するにはどうすればよいですか?

  13. 13

    このアコーディオンをレスポンシブにし、ページの中央に配置するにはどうすればよいですか?

  14. 14

    HTMLにブートストラップポップオーバーバインディングを追加するにはどうすればよいですか?

  15. 15

    配列内の各オブジェクトのコンポーネントをレンダリングするにはどうすればよいですか?

  16. 16

    mockito / powermockを使用してGoogleのジオコーディングAPIリクエストをモックするにはどうすればよいですか?

  17. 17

    ジオメトリタイプでジオデータフレームをフィルタリングするにはどうすればよいですか?

  18. 18

    プラグインをgrailsのデフォルトのgspエンコーディングから除外するにはどうすればよいですか?

  19. 19

    カスタムコンポーネントとして使用する場合、ラジオボタンにngModel(双方向バインディング)を実装するにはどうすればよいですか?

  20. 20

    Springでデフォルトのオーバーライド可能なコンポーネントを作成するにはどうすればよいですか?

  21. 21

    Springでデフォルトのオーバーライド可能なコンポーネントを作成するにはどうすればよいですか?

  22. 22

    キーにポインタが存在するjsonオブジェクトを逆シリアル化するにはどうすればよいですか?

  23. 23

    サーバー/クライアントのビデオおよびオーディオストリーミングアプリケーションをコーディングするにはどうすればよいですか?

  24. 24

    ngx-bootstrapアコーディオングループの見出しにアイコンを追加するにはどうすればよいですか?

  25. 25

    Circeでオプションタイプのカスタムエンコーディングを作成するにはどうすればよいですか?

  26. 26

    LightTableのデフォルトのキーバインディングをオーバーライドするにはどうすればよいですか?

  27. 27

    xamlでnullコントロールではなくバインディングのみを作成するにはどうすればよいですか?

  28. 28

    コンポーネントにディレクティブのバインディングが含まれているかどうかを確認するにはどうすればよいですか

  29. 29

    pメニューコンポーネントの幅/パディングを変更するにはどうすればよいですか?

ホットタグ

アーカイブ