From f99978f92ba15d315c431da4771910cec248fb86 Mon Sep 17 00:00:00 2001 From: Mingye Wang Date: Mon, 19 Dec 2016 02:17:36 -0500 Subject: [PATCH 1/2] js: Fix exact conv again MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit > wgs2gcj(35, 105) {lat: 34.99909861697254, lng: 105.00328629710248} > gcj2wgs_exact(34.99909861697254, 105.00328629710248) {lat: 34.99999999920718, lng: 104.9999999993101} > gcj2wgs(34.99909861697254, 105.00328629710248) {lat: 34.99999091601437, lng: 104.99998369011693} 本来 exact 减法做反了,整个飞出去了…… --- javascript/transform.js | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/javascript/transform.js b/javascript/transform.js index 3340d98..5a7f148 100644 --- a/javascript/transform.js +++ b/javascript/transform.js @@ -77,23 +77,28 @@ exports.gcj2wgs = gcj2wgs; function gcj2wgs_exact(gcjLat, gcjLng) { // newCoord = oldCoord = gcjCoord var newLat = gcjLat, newLng = gcjLng; - var oldLat = newLat, oldLng = newLng; + var rough = gcj2wgs(gcjLat, gcjLng); + var oldLat = rough.lat, oldLng = rough.lng; var threshold = 1e-6; // ~0.55 m equator & latitude - for (var i = 0; i < 30; i++) { + for (var i = 0; + i < 30 && Math.max(Math.abs(oldLat - newLat), Math.abs(oldLng - newLng)) > threshold; + i++) { // oldCoord = newCoord oldLat = newLat; oldLng = newLng; // newCoord = gcjCoord - wgs_to_gcj_delta(newCoord) var tmp = wgs2gcj(newLat, newLng); // approx difference using gcj-space difference - newLat -= gcjLat - tmp.lat; - newLng -= gcjLng - tmp.lng; - // diffchk - if (Math.max(Math.abs(oldLat - newLat), Math.abs(oldLng - newLng)) < threshold) { - break; - } + newLat -= tmp.lat - gcjLat; + newLng -= tmp.lng - gcjLng; } + + // i == 29 usually means bad things + if (i == 29) { + console.warn("gcj2wgs_exact: Out of iterations. Bug?"); + } + return {lat: newLat, lng: newLng}; } exports.gcj2wgs_exact = gcj2wgs_exact; From 3f4d9745d1ad597a1846884b49bbc6ae686bb37c Mon Sep 17 00:00:00 2001 From: Mingye Wang Date: Mon, 19 Dec 2016 02:18:46 -0500 Subject: [PATCH 2/2] js: fix scope --- javascript/transform.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/javascript/transform.js b/javascript/transform.js index 5a7f148..9ba110c 100644 --- a/javascript/transform.js +++ b/javascript/transform.js @@ -80,8 +80,9 @@ function gcj2wgs_exact(gcjLat, gcjLng) { var rough = gcj2wgs(gcjLat, gcjLng); var oldLat = rough.lat, oldLng = rough.lng; var threshold = 1e-6; // ~0.55 m equator & latitude + var i; // taken out of loop for debugging at i == 29 - for (var i = 0; + for (i = 0; i < 30 && Math.max(Math.abs(oldLat - newLat), Math.abs(oldLng - newLng)) > threshold; i++) { // oldCoord = newCoord