4

Pythonは初めてで、それが大好きです。これは単純なものかもしれないと思います。
私は現在、pymssqlを使用してPythonスクリプトを介してSQLServer2008にポイントを挿入しています。

var1 = "hi"
lat = "55.92"
lon = "-3.29"

cursor.execute("INSERT INTO table (field1, x, y) VALUES(%s, %s, %s)", 
(var1 , lat, lon))

これはすべて正常に機能します。また、これらの座標をGEOGRAPHYタイプのフィールド(geogと呼ばれる)に挿入する必要があります。

geog_type = "geography::STGeomFromText('POINT(%s %s)',4326))" % (lat, lon)

cursor.execute("INSERT INTO table (field1, x, y, geog) VALUES(%s, %s, %s, %s)", 
(var1 , lat, lon, geog_type))

これにより、次の例外がスローされます。

入力well-knowntext(WKT)のラベルgeography::STGeomFroが無効です。有効なラベルは、POINT、LINESTRING、POLYGON、MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION、CIRCULARSTRING、COMPOUNDCURVE、CURVEPOLYGON、およびFULLGLOBE(地理データ型のみ)です。

SSMSから、テーブルに対して挿入ステートメントを実行して、ポイントを細かく挿入できます。

USE [nosde]
INSERT INTO tweets (geog) 
    VALUES(
        geography::STGeomFromText(
        'POINT(55.9271035250276 -3.29431266523898)',4326))

詳細が必要な場合は、コメントでお知らせください。

ペーストビンに関する私の仕事のいくつか。

4

1 に答える 1

2

いくつかの問題-最初に、間違った順序で座標を指定しています-STPointFromText()メソッドは、最初に経度、次に緯度を予期します。

次に、文字列操作を必要としないSTPointFromText()メソッドよりもPoint()メソッドを使用する方が簡単な場合があります。2つの数値座標パラメーターを直接指定するだけです。http://technet.microsoft.com/en-us/library/bb933811.aspx

ただし、エラーメッセージから、送信している値がWKT文字列として解析されようとしているようです。この場合、とにかく最後に追加のgeography::STGeomFromTextとSRIDは必要ありません。これらは想定されています。だから、ただ供給してみてください:

geog_type = "'POINT(%s %s)'" % (lon, lat)

cursor.execute("INSERT INTO table (field1, x, y, geog) VALUES(%s, %s, %s, %s)", 
(var1 , lat, lon, geog_type))

最初の行に追加の一重引用符が必要かどうかはわかりませんが、現時点でテストするシステムはありません。

于 2012-11-15T11:53:36.080 に答える