Namn

ST_AsEncodedPolyline — Returnerar en kodad polylinje från en LineString-geometri.

Synopsis

text ST_AsEncodedPolyline(geometry geom, integer precision=5);

Beskrivning

Returnerar geometrin i Encoded Polyline Algorithm Format. Formatet lagrar latitud- och longituddeltan som heltal efter att koordinaterna har multiplicerats med 10 upphöjt till den begärda precision.

De informella namnen polyline5 och polyline6 avser samma kodning med precision 5 respektive 6. Precisionen måste stämma vid kodning och avkodning; annars skalas koordinaterna felaktigt.

Indatageometrin måste använda SRID 4326, med longitud som X och latitud som Y. Använd ST_Transform för att transformera geometrier i andra koordinatsystem före kodning.

OSRM API returnerar precision 5 för geometries=polyline och precision 6 för geometries=polyline6. Avkoda den resulterande route.geometry med ST_LineFromEncodedPolyline och motsvarande precision.

Tillgänglighet: 2.2.0

Exempel

Koda samma WGS 84-LineString med precision 5 och 6.

Kod
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;
Utdata
polyline5          |            polyline6
-----------------------------+----------------------------------
 _p~iF~ps|U_ulLnnqC_mqNvxq`@ | _izlhA~rlgdF_{geC~ywl@_kwzCn`{nI

Avkoda en OSRM-route.geometry som returnerats med geometries=polyline6.

Kod
SELECT ST_AsEWKT(ST_LineFromEncodedPolyline(
  '_izlhA~rlgdF_{geC~ywl@_kwzCn`{nI',
  6
)) AS route;
Utdata
SRID=4326;LINESTRING(-120.2 38.5,-120.95 40.7,-126.453 43.252)
Figur
Geometry figure for visual-st-asencodedpolyline-02

Google Maps JavaScript Geometry-biblioteket avkodar strängar med precision 5. Det här webbläsarexemplet förutsätter att map är en initierad Google-karta.

Kod
<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>