ST_AsEncodedPolyline — ラインストリングジオメトリから符号化したポリラインを返します。
text ST_AsEncodedPolyline(geometry geom, integer precision=5);
Encoded Polyline Algorithm Format によるジオメトリーを返します。書式は 10の precision 乗を掛けてから、緯度、経度、これらの差分を整数で保存します。
非公式名の polyline5 と polyline6 は同じジオメトリーをエンコードしていますが精度は 5 と 6 です。精度はエンコードと出コードの時に一致していなければなりません。合っていない場合には座標は正しく拡大縮小されません。
入力ジオメトリは SRID 4326 を使い、経度が X、緯度が Y でなければなりません。ジオメトリーを他の座標系に変換する場合にはエンコード前に ST_Transform を使います。
OSRM API は geometries=polyline の時は精度 5 を返し、geometries=polyline6 の時は精度 6 を返します。route.geometry を出コードします。これは同じ精度を指定した ST_LineFromEncodedPolyline を使います。
Availability: 2.2.0
同じ WGS84 LINESTRING を精度 5 と精度 6 でエンコードします。
WITH route AS (
SELECT ST_GeomFromEWKT(
'SRID=4326;LINESTRING(-120.2 38.5,-120.95 40.7,-126.453 43.252)'
) AS geom
)
SELECT ST_AsEncodedPolyline(geom, 5) AS polyline5,
ST_AsEncodedPolyline(geom, 6) AS polyline6
FROM route;
polyline5 | polyline6
-----------------------------+----------------------------------
_p~iF~ps|U_ulLnnqC_mqNvxq`@ | _izlhA~rlgdF_{geC~ywl@_kwzCn`{nI
geometries=polyline6 で返った OSRM route.geometry をデコードする。
SELECT ST_AsEWKT(ST_LineFromEncodedPolyline(
'_izlhA~rlgdF_{geC~ywl@_kwzCn`{nI',
6
)) AS route;
SRID=4326;LINESTRING(-120.2 38.5,-120.95 40.7,-126.453 43.252)
Google Maps JavaScript Geometry ライブラリーは精度 5 の文字列を出コードします。このブラウザーの例は map が初期化済みの Googleの地図だと仮定しています。
<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=geometry"
></script>
<script>
const encodedPath = "_p~iF~ps|U_ulLnnqC_mqNvxq`@";
const flightPath = new google.maps.Polyline({
path: google.maps.geometry.encoding.decodePath(encodedPath),
map: map,
strokeColor: "#0000CC",
strokeOpacity: 1.0,
strokeWeight: 4
});
</script>