15

Python 3 を使用しており、postGIS 拡張機能を使用して postGre に接続する必要があります。psycopg2 ドライバーを使用するつもりです。
このPPyGISは私が見つけた唯一の拡張機能ですが、3.3.0 ではなく python 2.7 で動作します。
3.3.0 で動作するソリューションを知っている人はいますか?

4

3 に答える 3

13

クライアント側 (Python) でジオメトリ オブジェクトに特別なことをしていない場合、psycopg2 は、ジオメトリ アクセサーを持つネイティブ データ型、またはGeoJSONなどの他の GIS出力形式を使用して、最も基本的な情報を取得できます。サーバー (PostgreSQL/PostGIS) に大変な作業を任せてください。

以下は、関心のあるポイントから 1 km 以内にある形状に GeoJSON を返すランダムな例です。

import psycopg2
conn = psycopg2.connect(database='postgis', user='postgres')
curs = conn.cursor()

# Find the distance within 1 km of point-of-interest
poi = (-124.3, 53.2)  # longitude, latitude

# Table 'my_points' has a geography column 'geog'
curs.execute("""\
SELECT gid, ST_AsGeoJSON(geog), ST_Distance(geog, poi)
FROM my_points, (SELECT ST_MakePoint(%s, %s)::geography AS poi) AS f
WHERE ST_DWithin(geog, poi, 1000);""", poi)

for row in curs.fetchall():
    print(row)
于 2013-02-18T22:10:52.760 に答える
3

実際にはShapelyまたはGDAL/OGRを使用できますが、どちらのライブラリにも依存関係の長いリストがあります。

ユースケースが非常に少ない場合は、以下の例のように、非常に洗練されたpygeoifライブラリに基づいて、小さなプロトコルを自分で実装することもできます。

from psycopg2.extensions import register_adapter, AsIs, adapt
from pygeoif.geometry import Point

def adapt_point(pt):
    return AsIs("ST_SetSRID(ST_MakePoint({}, {}), 4326)".format(adapt(pt.x), adapt(pt.y)))

register_adapter(Point, adapt_point)
于 2017-01-12T17:22:01.987 に答える