google maps - poligonos - Fusionando múltiples polilíneas codificadas en una polilínea codificada
polyline google maps android (4)
Estoy intentando fusionar una nueva polilínea codificada con una polilínea existente sin decodificar ni volver a codificar toda la polilínea. La nueva polilínea codificada se cargará en un servidor (Linux) donde me gustaría agregarla a la polilínea existente.
El problema es que no puedes mezclarlos juntos. A continuación hay algunos datos de muestra para jugar. Mi esperanza es encontrar / crear una solución en PHP o en un script de shell, pero el problema es que no tengo suficiente conocimiento técnico para interpretar el algoritmo de la polilínea codificada.
41.386692,-73.475912
41.424822,-73.375027
41.428292,-73.311173
41.426183,-73.254577
41.470168,-73.218532
41.498865,-73.155278
(Yes, 6 points are easy, but it''s going to be more like 7,000 coordinate pairs)
- Primeros 3 pares de coordenadas codificados:
yir{Fnwm_MimFquRuTanK
- Últimos 3:
s`z{Fbpb~L{qGg`FkrDkjK
- Todos 6:
yir{Fnwm_MimFquRuTanKdLw`J{qGg`FkrDkjK
Utilidad de codificador de polilínea interactiva
Formato de algoritmo de polilínea codificada (puede obtener esto a través de Encoder interactivo)
Codificador de polilínea
Editar:
También tengo los datos originales que codificaron las polilíneas en ambos extremos. Así que también puedo guardar el primer y último par de coordenadas por separado.
Lecturas útiles:
Terminé escribiendo una publicación de blog que tiene muchos más detalles sobre cómo funcionan las polilíneas codificadas. Puede leerlo aquí: ¿Qué es una polilínea codificada?
Muestra el algoritmo para la codificación: http://code.google.com/apis/maps/documentation/utilities/polylinealgorithm.html
Un decodificador está disponible en el Prof Mark McClure en http://facstaff.unca.edu/mcmcclur/GoogleMaps/EncodePolyline/decode.html
La codificación usa compensaciones (deltas) de punto a punto. El desplazamiento del primer punto se calcula a partir de (0,0) por lo que es igual a las coordenadas del primer punto. El segundo punto se codifica como el desplazamiento del punto dos desde el punto uno, y así sucesivamente.
Para unir dos líneas, primero debe encontrar el último punto de la primera línea y el primer punto de la segunda línea.
Luego, calcula el desplazamiento de la línea dos desde el último punto de la línea uno, y sustituye ese desplazamiento por la primera coordenada en la segunda línea. Por lo tanto, la segunda línea no comienza con un desplazamiento desde (0,0), sino un desplazamiento desde el final de la primera línea.
Ahora, el último punto de la primera línea tendrá que volver a codificarse para mostrar que hay más por seguir.
Debido a que cada punto codificado en cada línea puede consistir en un número variable de caracteres, no es fácil encontrar ningún punto (incluso el primero) sin decodificar toda la línea.
Entonces: para hacer el trabajo necesitarás hacer algunas decodificaciones y recodificaciones. Probablemente sea más fácil decodificar cada línea en una matriz de puntos y luego volver a codificar todo. La codificación es rápida y fácil en PHP: vuelve a ver el sitio de McClure.
Esto contradice una respuesta dada por mí en el Grupo de la Versión 2 de Google Maps, donde asumí erróneamente que la longitud de cada punto codificado es estrictamente de cinco caracteres.
La decodificación es realizada por el navegador. Puede enviar segmentos de línea individuales para que el navegador decodifique y concatene. Las polilíneas aceptan una sola propiedad de "ruta". Los polígonos aceptan múltiples propiedades de "ruta" en una matriz de rutas. La única diferencia entre una polilínea y un polígono es la ausencia o presencia de una opacidad de "relleno" de color y "relleno". Si declara que su polilínea es un polígono sin propiedades de "relleno", habrá construido una línea de varios segmentos a partir de piezas individuales.
PD: el editor "" realmente apesta.
Sugiero que no tengas que hacer la concatenación en el servidor. Hazlo en el navegador en su lugar. Toda decodificación ocurre en el navegador. Es muy fácil empalmar matrices decodificadas con javascript. Puede utilizar el método de "empalme" o simplemente iterar a través de cada una de las matrices de componentes.
Ok, entonces creo que lo descubrí. Muchas gracias a Andrew Leach por explicar cómo el algoritmo realmente funciona en inglés simple.
Problema: fusionar una nueva polilínea codificada con una polilínea codificada existente
Solución: mantenga el último par de coordenadas de la polilínea existente, codifique solo ese par y guárdelo para más adelante, codifique todos los coords nuevos con coordenadas de la polilínea existente al comienzo de esta nueva codificación. busque la cadena del último par de coordenadas, extráigala de la nueva polilínea codificada y pegue la nueva polilínea codificada en la parte posterior de la polilínea existente
Cosas que debe saber: Lo que hace la codificación es calcular el desplazamiento (distancia desde x, y) y convierte ese valor en ASCII. El problema es que la primera coordenada se calcula a partir de 0,0, por lo que si solo pusieras dos polilíneas codificadas juntas, cuando hayas agregado la nueva no se compensaría con la existente, sino que se compensaría desde 0,0, lo que provocaría un gran salto en la polilínea. Lo que tenemos que hacer es averiguar qué caracteres en la polilínea codificada son el desplazamiento de 0,0 y eliminarlos. Luego puede agregar la nueva línea a la línea anterior, y se compensará correctamente.
Haga clic en el siguiente enlace para ver todo escrito y con buenos comentarios. Además, avíseme si ve en cualquier lugar que se puede mejorar la eficiencia.