pymssqlを使用してSQL Serverにポイントを挿入しますか?


12

pythonスクリプトを使用して、Webサービス(Twitter)からX値とY値を収集しています。長期的には、これは数か月にわたって実行され、600万ポイント前後で停止する予定です。

取得する元の座標は地理的なWGS84ですが、これらを投影されたWGS Webメルカトルに変換する必要があります。後でこのテーブルをArcGIS Serverマップサービスに公開し、キャッシュします。

これは、期限なしでpythonを学習するための個人的なプロジェクトであり、SQL Serverのネイティブな空間タイプのみを使用することをお勧めしますか?

私の現在のテストされていない計画:

  • GEOMETRYフィールドの設定(およびその他の属性)を使用して、SSMSでテーブルを作成します。
  • 私のPythonスクリプトでは、arcpyまたはpyprojを使用してWGS84のlat / lonsをWGS84 Webメルカトルに変換します(またはこれをどうにかしてSQLで達成できますか?)
  • pymssqlを使用してレコードを挿入し、テーブルのGEOMETRYフィールドにポイントを挿入します。

私の質問は、WGS84で緯度/経度のペアを取得し、SQL Serverの空間タイプを使用してSQL Serverテーブルに挿入し、結果のポイントレイヤーを作成するための良い、シンプルで効率的なアプローチは何ですか? WGS84 Webメルカトル、ArcGIS Desktop 10.1でレンダリング/クエリを実行できるようにするには?

必要に応じてarcpy / ArcSDE 10.1にアクセスできますが、ArcSDEを必要としない例としてこれを使用したいと考えていました。


最初にpyprojデータを使用してから、MS SQLデータベースにデータを挿入します。geometry :: STPointFromText( 'POINT(' + p.longitude + '' + p.latitude + ')'、4326)はWKTを作成します
simplexio

そして、できればPostGISを使用します
-simplexio

感謝しますが、これを回答に入れて、PostGISを使用する理由について詳しく説明してください。
サイモン

回答:


6

質問で述べたように、私は計画を進めました。

SQL Serverにポイントを挿入するために、この投稿は非常に役に立ちました。

ここに私のために働いたものがあります:

import pymssql

# connect to SQL Server instance
conn = pymssql.connect(host='localhost', user='sa', password='sa', database='nosde')

# commits every transaction automatically and setup cursor
conn.autocommit(True)
cur = conn.cursor()

# !!Chunk of code stripped out on how I get my coords, unrelated to Q.

# Store projected coords in a GEOMETRY type field
geom_type = "geometry::STPointFromText('POINT(%s %s)', 3857)" % (x, y)
    try:
        cur.execute("INSERT INTO tweets (geom) VALUES (%s)" % (geom_type))
    except TypeError:
        print "Could not INSERT", clean

    conn.close()

座標をWGS84からWebメルカトルにどのように変換しましたか?あなたがそうしてきたかのように見える上記で
ピーターHorsbøllMollerの

1
pyprojライブラリを見てください。御works走!uが詳細を知りたい場合は別の質問をしてください。
サイモン

2

ワークフローの要件全体がわかりませんが、arcpyにアクセスできる場合arcpy.ConvertCoordinateNotation_managementは、SQLテーブルのポイントを使用して、必要な投影法でポイントフィーチャクラスに変換できます。SQLの必要はありませんサーバー空間タイプまたはArcSDE。


可能な解決策。しかし、6Mポイントを集めると、最後にこのツールを実行するのに時間がかかると思っていました。その場でそれができると仮定していたので、スクリプトがまだ収集している間に実際にポイントを見ることができます。
サイモン

1

xyおよびその他のデータで満たされた1つまたは複数の大きなファイルがあると仮定します。まず、私の知る限り、MS SQL(2008 r2以降)での投影サポートはありません。サードパーティのソリューションとproj.netライブラリがあり、それらを使用してビルドできます。したがって、データベースにデータを保存するときに2つのオプションが表示されます.MS SQLを使用する場合、データベースを挿入する前に目的の投影にデータを再投影するか、単にPostGIS dbにデータをダンプして変換する必要があります。PostGISのデータベースには、MS SQLよりもはるかに優れたツールセットがあります


0

geoAlchemyは、GeometryColumnsを使用してジョブを実行することになっています。ただし、AttributeError:type object 'ColumnProperty' has no attribute 'ColumnComparator'

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.