誰かが次の問題の正しい解決策を教えてくれるかもしれません:
たとえば、 「9.94 54.839」のような文字列として座標を持つテーブルがあります(他の目的のために、座標値を1つの列に保持する必要があります)。PostGIS 関数 ST_GeomFromText の場合、倍精度値として必要です。
例:ST_GeomFromText('POINT(9.94 54.839)',4326)
別の問題は、座標の長さが変化することです (例: '9.873684 54.63' )
誰かが次の問題の正しい解決策を教えてくれるかもしれません:
たとえば、 「9.94 54.839」のような文字列として座標を持つテーブルがあります(他の目的のために、座標値を1つの列に保持する必要があります)。PostGIS 関数 ST_GeomFromText の場合、倍精度値として必要です。
例:ST_GeomFromText('POINT(9.94 54.839)',4326)
別の問題は、座標の長さが変化することです (例: '9.873684 54.63' )
私はあなたの他の (非常に類似した) 質問に答えました: ST_GeomFromText (PostGIS) を使用するために矛盾した文字列から倍精度値を取得し、答えは同じです。
ドキュメントによると、requireではなく、ST_GeomFromText
requiresです。(text, integer)
(double precision)
あなたがする必要があるのはCONCAT()
、それがうまくいくはずです。
ST_GeomFromText(CONCAT('LINESTRING(', "YourTable"."YourString", ')'), 4326);
また、ライン (またはポリゴン) を形成するために接続する必要がある複数の値 (ポイント) がある場合は、 を参照してくださいSTRING_AGG(text, text)
。
緯度経度 (lat lon) の文字列 "pos" を想定しています。文字列を分割して float にキャストし、strip を使用して不要な空白を削除します。
tmp = pos.split()
lat = float(tmp[0].strip())
lon = float(tmp[1].strip())
次に、次のようなことができます。
latlonString = 'POINT(%f %f)' % (lat,lon)
クエリで変数を使用する:
ST_GeomFromText(latlonString,4326)
例えば:
SELECT id
FROM features
WHERE pos = ST_GeomFromText(latlonString,4326)
複数の座標ペアの文字列の場合。xyString = "x1 y1 x2 y2" 注意! カンマで区切られていない:
xyString = '3.584731 60.739211 3.590472 60.738030 3.592740 60.736220'
xy = xyString.split()
tuples = [i+' '+j for i,j in zip(xy[::2],xy[1::2])]
multiPointString = ','.join(map(str,tuples))
polygonString = 'POLYGON((%s))' % (multiPointString)
print polygonString
印刷:
POLYGON((3.584731 60.739211,3.590472 60.738030,3.592740 60.736220))
「x1 y1, x2 y2, ....」のようなポリゴン文字列がある場合は、次の行を編集するだけです。
xy = xyString.replace(",", " ").split()
psycopg2 を postgresql アダプターとして使用する場合は、これで十分です。すべての質問に答えているわけではないかもしれませんが、これが役に立てば幸いです。
あなたのヒントを使用して、次の構文でポイント座標を取得できました。
SELECT ST_GeomFromText(((('POINT('|| split_part(t1.meta_string_value, ' ', 1)::double
precision) || ' ') || split_part(t1.meta_string_value, ' ', 2)::double precision) ||
')', 4326) AS geom FROM points t1
今、私は新しい問題を抱えています。上記の場合、座標からジオメトリを作成するために 2 つの倍精度値 (LON、LAT) のみが必要です。たとえば、次のような座標のリストからラインまたはポリゴンを作成したい場合はどうすればよいですか。
9.873684 54.63, 9.8432 54.8792, 9.032 54.32, 8.9 54.987
問題は、ラインまたはポリゴンがどれだけの座標を持っているかわからないことです...
それについてのアイデアはありますか?