Закодированный путь в базе данных MySQL - PullRequest
3 голосов
/ 21 декабря 2011

Я закодировал пути нескольких полилиний с помощью google.maps.geometry.encoding.encodePath() и хочу сохранить их в таблице MySQL.

Проблема: Прежде чем сохранить их в таблице, я нарисовал полилинии, как показано в верхней половине изображения ниже. Однако после сохранения их в таблице, их извлечения и повторного рисования путь, похоже, изменился! Что случилось?

enter image description here

Дополнительная информация : Я заметил, что если бы я записал только что закодированный путь в console.log, скопировал из журнала консоли и использовал этот скопированный путь, чтобы нарисовать новую ломаную линию, ломаная искажается при определенные области, например, что произошло после использования закодированного пути, полученного из базы данных!


Обновление

Полилиния с использованием только что закодированного пути

enter image description here

Код JS

encoded_path = google.maps.geometry.encoding.encodePath(path);
console.log(encoded_path);

decoded_path = google.maps.geometry.encoding.decodePath(encoded_path);

var polyOptions = {
            strokeColor: "#970E04" , 
            strokeOpacity: 1.0 , 
            strokeWeight: 2 , 
            path: decoded_path , 
            clickable: false,
            map: map
    }
polyline = new google.maps.Polyline(polyOptions);

Кодированный путь из console.log

axwaGtbcqL BgArBmAjCcBlBcCnBeChB_BrAmAxByBjCoCkAqBmByCu@qA[i@~BmAdAq@FEzAqAvAsA|@{@DCr@{@DIjAuA|@cAz@}@~AeB\[LZxAjDJINM|AkAxAxCfAw@g@jAeBpEOr@Ox@CTeAlMM~AYhDc@pE_AtHGj@m@ Gm @ DHA @ hFaAbM_AfJ] jDAlA {HHV @ eAdFy @ bCcBpEeBzDyArDu @ E_AnFs@|Fq@fGKtKaEqCgBmB_GmFcJaM}@nBg@BbA}CpAaEvAoEnGyOvDuPDSPYAIIMMMGOMMIIKKKQIMIKIKa@gAQ_@Q[CCY_@OSQYQQOOSMSOa@]g@g@UWSUYm@Uk@]qAKe@Ia@I_@Iy@Es@C_AAw@A]Ca@G[Qy@GSKa@M]M_@Qa@M]IOGKQSGIIG}@w@{AgAiAaAWSUOWOQIMEKCICOGMCKEQC_DuA?GbByB\_@~GaIxCgDl@s@bBkBnBcBzCqC Ai @ PCMA ^ MAD @ Qa


Полилиния с использованием пути, полученного из базы данных

enter image description here

Значение хранится в столбце VARCHAR(255)

Скопировано с помощью Navicat

axwaGtbcqL BgArBmAjCcBlBcCnBeChB_BrAmAxByBjCoCkAqBmByCu@qA[i@~BmAdAq@FEzAqAvAsA|@{@DCr@{@DIjAuA|@cAz@}@~AeB[LZxAjDJINM|AkAxAxCfAw@g@jAeBpEOr@Ox@CTeAlMM~AYhDc@pE_AtHGj@m@ Gm @ DHA @ hFaAbM_AfJ] jDAlA {HHV @ eAdFy @ bCcBpEeBzDyArDu @ `E_AnFs @ | Fq @ fGKtKaEqCgBmB_GmFcJaM} @


Полилиния с использованием пути, полученного из базы данных с VARCHAR(1000)

enter image description here

Значение хранится в столбце VARCHAR(1000)

Скопировано с помощью Navicat

axwaGtbcqL BgArBmAjCcBlBcCnBeChB_BrAmAxByBjCoCkAqBmByCu@qA[i@~BmAdAq@FEzAqAvAsA|@{@DCr@{@DIjAuA|@cAz@}@~AeB[LZxAjDJINM|AkAxAxCfAw@g@jAeBpEOr@Ox@CTeAlMM~AYhDc@pE_AtHGj@m@ Gm @ DHA @ hFaAbM_AfJ] jDAlA {HHV @ eAdFy @ bCcBpEeBzDyArDu @ E_AnFs@|Fq@fGKtKaEqCgBmB_GmFcJaM}@nBg@BbA}CpAaEvAoEnGyOvDuPDSPYAIIMMMGOMMIIKKKQIMIKIKa@gAQ_@Q[CCY_@OSQYQQOOSMSOa@]g@g@UWSUYm@Uk@]qAKe@Ia@I_@Iy@Es@C_AAw@A]Ca@G[Qy@GSKa@M]M_@Qa@M]IOGKQSGIIG}@w@{AgAiAaAWSUOWOQIMEKCICOGMCKEQC_DuA?GbByB\_@~GaIxCgDl@s@bBkBnBcBzCqC Ai @ PCMA ^ MAD @ Qa


Полилиния путем декодирования закодированного пути, записанного в console.log

enter image description here

Код JS

  //encoded path copied from console.log output from the very first code in post
    encoded_path = 'axwaGtbcqLBgArBmAjCcBlBcCnBeChB_BrAmAxByBjCoCkAqBmByCu@qA[i@~BmAdAq@FEzAqAvAsA|@{@DCr@{@DIjAuA|@cAz@}@~AeB\[LZxAjDJINM|AkAxAxCfAw@g@jAeBpEOr@Ox@CTeAlMM~AYhDc@pE_AtHGj@m@Gm@dHa@hFaAbM_AfJ]jDAlA{Hhv@eAdFy@bCcBpEeBzDyArDu@E_AnFs@|Fq@fGKtKaEqCgBmB_GmFcJaM}@nBg@BbA}CpAaEvAoEnGyOvDuPDSPYAIIMMMGOMMIIKKKQIMIKIKa@gAQ_@Q[CCY_@OSQYQQOOSMSOa@]g@g@UWSUYm@Uk@]qAKe@Ia@I_@Iy@Es@C_AAw@A]Ca@G[Qy@GSKa@M]M_@Qa@M]IOGKQSGIIG}@w@{AgAiAaAWSUOWOQIMEKCICOGMCKEQC_DuA?GbByB\_@~GaIxCgDl@s@bBkBnBcBzCqCAi@pCmA^mAd@qA';
decoded_path = google.maps.geometry.encoding.decodePath(encoded_path);

var polyOptions = {
            strokeColor: "#970E04" , 
            strokeOpacity: 1.0 , 
            strokeWeight: 2 , 
            path: decoded_path , 
            clickable: false,
            map: map
    }
polyline = new google.maps.Polyline(polyOptions);

Путь, который также не работал правильно

Я заметил, что в середине этих закодированных строк есть новые строки? Кроме того, закодированная строка разбивает строку кода на 2 строки, в результате чего система проверки ошибок в моем редакторе отображает предупреждение.

Код JS (неправильный формат)

encoded_path = '{traGxcspLaIkFvAwH} BgA {EzEjCgJmEwBmDvGoHpAkLQpAqGyF_CbCuH ^} FlDwEo Cyn @ у @ г [YL {с @ термометру @ е * +1112 * EdQoBtMaJzSoE f@bMzLlHRj@lHrFhCnHrNvAk@qBeOpAcAlRvCfEgQt@oB_JeBmTmL}DqJl@qHbCmEzFc]xr@nT|IoKf@ RlGdFtCuMpEzAbS} [qGe {@ dOsEnGjZhInDrHwIjEdH_OtdAf @ ~ WnM`F ~ AyN_DgEzh @ nKgTvVbBrNoZvB_SvLwGfJwT ~ ш @ Wg? GBzB? XFdAt @ XFN @ bBve @? nPoKv [kGwBsCdGoCtBwFoBwCfFcBvBoArDsC] {AxA ';

Кодированный путь

{traGxcspLaIkFvAwH} {Bga EzEjCgJmEwBmDvGoHpAkLQpAqGyF_CbCuH ^} FlDwEo Cyn @ у @ г [YL {с @ термометру @ е * * EdQoBtMaJzSoE тысячу сто двадцать две f@bMzLlHRj@lHrFhCnHrNvAk@qBeOpAcAlRvCfEgQt@oB_JeBmTmL}DqJl@qHbCmEzFc]xr@nT|IoKf@ RlGdFtCuMpEzAbS} [qGe {@ dOsEnGjZhInDrHwIjEdH_OtdAf @ ~ WnM`F ~ AyN_DgEzh @ nKgTvVbBrNoZvB_SvLwGfJwT ~ ш @ Wg? GBzB? XFdAt @ XFN @ bBve @? nPoKv [kGwBsCdGoCtBwFoBwCfFcBvBoArDsC] {AxA

1 Ответ

2 голосов
/ 21 декабря 2011

Косые черты в строковом литерале, возвращаемом encodePath(), интерпретируются перед записью, независимо от того, идет ли запись на экран или в базу данных.

Что я хотел бы сделать, это избежать косой черты в самой ранней возможной точке:

encoded_path = google.maps.geometry.encoding.encodePath(path);
encoded_path = encoded_path.replace(/\\/g,"\\\\");

Это должно гарантировать, что строка, записанная в базу данных (или журнал), является правильной, и вам не нужно делать ничего особенного для чтения.

В качестве альтернативы выможет экранировать косую черту прямо перед передачей строки в другой носитель, например, непосредственно перед вызовом AJAX или, как упоминалось в комментариях, в вызове метода console.log().

...