Estoy tratando de representar rutas en BigQuery, pero me encuentro con problemas para las rutas que se duplican sobre sí mismas. Considere la siguiente LineString que procede del suroeste al noreste de la siguiente imagen, y luego hace un bucle sobre sí mismo antes de continuar más al norte (las flechas rojas fueron añadidas por mí manualmente):
Cuando intentamos representar esta ruta en BigQuery utilizando algunos métodos diferentes, el resultado es siempre el mismo:
al construir los puntos individualmente:
select st_makeline([
st_geogpoint(0, 0),
st_geogpoint(0, 1),
st_geogpoint(1, 1),
st_geogpoint(2, 2),
st_geogpoint(1, 1),
st_geogpoint(0, 1),
st_geogpoint(0, 2)
])
al construir los segmentos individualmente:
select st_makeline([
st_makeline(st_geogpoint(0, 0), st_geogpoint(0, 1)),
st_makeline(st_geogpoint(0, 1), st_geogpoint(1, 1)),
st_makeline(st_geogpoint(1, 1), st_geogpoint(2, 2)),
st_makeline(st_geogpoint(2, 2), st_geogpoint(1, 1)),
st_makeline(st_geogpoint(1, 1), st_geogpoint(0, 1)),
st_makeline(st_geogpoint(0, 1), st_geogpoint(0, 2))
])
incluso al descodificar una cadena WKT:
select st_geogfromtext('linestring(0 0,0 1,1 1,2 2,1 1,0 1,0 2)')
Cada vez, el resultado es la misma MultLineString:
MULTILINESTRING((0 0, 0 1, 1 1, 2 2), (0 1, 0 2))
Que es la siguiente ruta:
Así que BigQuery no está insertando la parte doblada en cadenas de líneas separadas; simplemente está saltando por completo los segmentos que considera que ya ha cubierto. Está bien para representar una forma, pero no un camino. Supongo que se trata de algo relacionado con el intento de BQ de construir una cadena de líneas compatible con el OGC, o tal vez simplemente tratando de minimizar la cantidad de datos que necesita almacenar. ¿Hay alguna manera de evitar esto?