36

次のような Postgres/PostGIS ステートメントを読んでいました。

SELECT ST_AsBinary(
ST_GeomFromWKB(
  E'\\001\\001\\000\\000\\000\\321\\256B\\312O\\304Q\\300\\347\\030\\220\\275\\336%E@',
  4326
  )
);

上記は、Well Known Binary (WKB) から何かを作成します。ここでは、文字列がE最初の引用符の前に一重引用符で囲まれている特定の引用方法を見たことがありません。

この形式は何と呼ばれますか? そして、これのフォーマット規則は何ですか? たとえば、336%E@最後の特別なものですか、それとも単なるバイナリ値ですか?

これは Postgres9.3/9.4 の場合です。PostGIS 2.1。

4

2 に答える 2

35

PostgreSQLのドキュメントhttps://www.postgresql.org/docs/9.0/sql-syntax-lexical.html(強調鉱山)に従って

PostgreSQL は、SQL 標準の拡張である「エスケープ」文字列定数も受け入れます。エスケープ文字列定数はE、開始の一重引用符の直前に文字 (大文字または小文字)を記述して指定します(例: E'foo'. (複数行にわたってエスケープ文字列定数を続ける場合Eは、最初の開始引用符の前にのみ記述してください。) エスケープ文字列内では、バックスラッシュ文字 ( \) が C のようなバックスラッシュ エスケープ シーケンスを開始します。バックスラッシュとそれに続く文字の組み合わせは、特殊なバイト値を表す

文字列での の使用は\\、エスケープ シーケンスをエスケープしていることを意味します。おそらく、転送中および.sqlファイルへの保存中は安全です。関数に実際に渡される逐語的な文字列は次のようになります。ST_GeomFromWKB

\001\001\000\000\000\321\256B\312O\304Q\300\347\030\220\275\336%E@

これらのスラッシュ間の 3 文字または 4 文字のシーケンスは、 によってST_GeoFromWKB直接解釈されます。

ST_GeoFromWKB( https://postgis.net/docs/ST_GeomFromWKB.html )のドキュメントには次のように記載されています。

このST_GeomFromWKB関数は、ジオメトリの既知のバイナリ表現と空間参照システム ID ( SRID) を取り、適切なジオメトリ タイプのインスタンスを作成します。この関数は、SQL で Geometry Factory の役割を果たします。の別名ですST_WKBToSQL

残念ながら、「よく知られているバイナリ表現」が実際にどのような形式であるかは正確には述べられていません。

文字列の内容は、使用している座標系に依存していることがわかりました。これは、SRIDパラメーターで指定されています。この場合、https : //en.wikipedia.org/wiki/World_Geodetic_System#WGS844326に対応します。WGS84

それを解くには、さらに読んで調査する必要があります。

于 2016-01-16T03:19:02.533 に答える