Skip to content

Commit 5479d3c

Browse files
committed
Fixed Point implementation - distance calc was incorrect
1 parent 85b885a commit 5479d3c

File tree

4 files changed

+160
-70
lines changed

4 files changed

+160
-70
lines changed

src/main/java/com/mapcode/Boundary.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ private Boundary() {
3838
// You have to use this factory method instead of a ctor.
3939
@Nonnull
4040
static Boundary createFromTerritoryRecord(final int territoryRecord) {
41-
Boundary boundary = new Boundary();
41+
final Boundary boundary = new Boundary();
4242
boundary.lonMicroDegMin = DataAccess.getLonMicroDegMin(territoryRecord);
4343
boundary.latMicroDegMin = DataAccess.getLatMicroDegMin(territoryRecord);
4444
boundary.lonMicroDegMax = DataAccess.getLonMicroDegMax(territoryRecord);

src/main/java/com/mapcode/Point.java

Lines changed: 36 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public class Point {
4949
public static final double EARTH_CIRCUMFERENCE_Y = EARTH_RADIUS_Y_METERS * 2.0 * Math.PI;
5050

5151
// Meters per degree latitude is fixed. For longitude: use factor * cos(midpoint of two degree latitudes).
52-
public static final double METERS_PER_DEGREE_LAT = EARTH_CIRCUMFERENCE_Y / 360.0;
52+
public static final double METERS_PER_DEGREE_LAT = EARTH_CIRCUMFERENCE_Y / 360.0;
5353
public static final double METERS_PER_DEGREE_LON_EQUATOR = EARTH_CIRCUMFERENCE_X / 360.0; // * cos(deg(lat)).
5454

5555
/**
@@ -69,7 +69,7 @@ public static Point fromDeg(final double latDeg, final double lonDeg) {
6969
*/
7070
@Nonnull
7171
public static Point fromMicroDeg(final int latMicroDeg, final int lonMicroDeg) {
72-
Point p = new Point();
72+
final Point p = new Point();
7373
p.latMicroDeg = latMicroDeg;
7474
p.latFractionOnlyDeg = 0;
7575
p.lonMicroDeg = lonMicroDeg;
@@ -163,28 +163,29 @@ public static double distanceInMeters(@Nonnull final Point p1, @Nonnull final Po
163163
checkNonnull("p1", p1);
164164
checkNonnull("p2", p2);
165165

166-
final double latDeg1 = p1.getLatDeg();
167-
final double latDeg2 = p2.getLatDeg();
168-
double lonDeg1 = p1.getLonDeg();
169-
double lonDeg2 = p2.getLonDeg();
170-
171-
if ((lonDeg1 < 0) && (lonDeg2 > 1)) {
172-
lonDeg1 += 360;
166+
final Point from;
167+
final Point to;
168+
if (p1.getLonDeg() <= p2.getLonDeg()) {
169+
from = p1;
170+
to = p2;
173171
}
174-
if ((lonDeg2 < 0) && (lonDeg1 > 1)) {
175-
lonDeg2 += 360;
172+
else {
173+
from = p2;
174+
to = p1;
176175
}
177176

178177
// Calculate mid point of 2 latitudes.
179-
final double avgLat = (p1.getLatDeg() + p2.getLatDeg()) / 2.0;
178+
final double avgLat = (from.getLatDeg() + to.getLatDeg()) / 2.0;
180179

181-
final double deltaLatDeg = latDeg1 - latDeg2;
182-
final double deltaLonDeg = lonDeg1 - lonDeg2;
180+
final double deltaLatDeg = Math.abs(to.getLatDeg() - from.getLatDeg());
181+
final double deltaLonDeg360 = Math.abs(to.getLonDeg() - from.getLonDeg());
182+
final double deltaLonDeg = ((deltaLonDeg360 <= 180.0) ? deltaLonDeg360 : (360.0 - deltaLonDeg360));
183183

184184
// Meters per longitude is fixed; per latitude requires * cos(avg(lat)).
185185
final double deltaXMeters = degreesLonToMetersAtLat(deltaLonDeg, avgLat);
186186
final double deltaYMeters = degreesLatToMeters(deltaLatDeg);
187187

188+
188189
// Calculate length through Earth. This is an approximation, but works fine for short distances.
189190
return Math.sqrt((deltaXMeters * deltaXMeters) + (deltaYMeters * deltaYMeters));
190191
}
@@ -215,19 +216,19 @@ public int hashCode() {
215216

216217
@SuppressWarnings("NonFinalFieldReferenceInEquals")
217218
@Override
218-
public boolean equals(final Object o) {
219-
if (this == o) {
219+
public boolean equals(final Object obj) {
220+
if (this == obj) {
220221
return true;
221222
}
222-
if (!(o instanceof Point)) {
223+
if (!(obj instanceof Point)) {
223224
return false;
224225
}
225-
final Point that = (Point) o;
226+
final Point that = (Point) obj;
226227
return (this.latMicroDeg == that.latMicroDeg) &&
227-
(this.lonMicroDeg == that.lonMicroDeg) &&
228-
(this.latFractionOnlyDeg == that.latFractionOnlyDeg) &&
229-
(this.lonFractionOnlyDeg == that.lonFractionOnlyDeg) &&
230-
(this.defined == that.defined);
228+
(this.lonMicroDeg == that.lonMicroDeg) &&
229+
(this.latFractionOnlyDeg == that.latFractionOnlyDeg) &&
230+
(this.lonFractionOnlyDeg == that.lonFractionOnlyDeg) &&
231+
(this.defined == that.defined);
231232
}
232233

233234
/**
@@ -236,22 +237,17 @@ public boolean equals(final Object o) {
236237
* -----------------------------------------------------------------------
237238
*/
238239
// Constants to convert between Degrees, MicroDegrees and Fractions
239-
static final double MICRODEG_TO_DEG_FACTOR = 1000000.0;
240-
static final double MAX_PRECISION_FACTOR = 810000.0;
240+
static final double MICRODEG_TO_DEG_FACTOR = 1000000.0;
241+
static final double MAX_PRECISION_FACTOR = 810000.0;
241242
static final double LAT_MICRODEG_TO_FRACTIONS_FACTOR = MAX_PRECISION_FACTOR;
242243
static final double LON_MICRODEG_TO_FRACTIONS_FACTOR = MAX_PRECISION_FACTOR * 4;
243-
static final double LAT_TO_FRACTIONS_FACTOR = MICRODEG_TO_DEG_FACTOR * LAT_MICRODEG_TO_FRACTIONS_FACTOR;
244-
static final double LON_TO_FRACTIONS_FACTOR = MICRODEG_TO_DEG_FACTOR * LON_MICRODEG_TO_FRACTIONS_FACTOR;
245-
246-
static final int LON_MICRODEG_MIN = degToMicroDeg(LON_DEG_MIN);
247-
static final int LON_MICRODEG_MAX = degToMicroDeg(LON_DEG_MAX);
248-
static final int LAT_MICRODEG_MIN = degToMicroDeg(LAT_DEG_MIN);
249-
static final int LAT_MICRODEG_MAX = degToMicroDeg(LAT_DEG_MAX);
244+
static final double LAT_TO_FRACTIONS_FACTOR = MICRODEG_TO_DEG_FACTOR * LAT_MICRODEG_TO_FRACTIONS_FACTOR;
245+
static final double LON_TO_FRACTIONS_FACTOR = MICRODEG_TO_DEG_FACTOR * LON_MICRODEG_TO_FRACTIONS_FACTOR;
250246

251-
private int latMicroDeg; // Whole nr of MICRODEG_TO_DEG_FACTOR.
252-
private int lonMicroDeg; // Whole nr of MICRODEG_TO_DEG_FACTOR.
253-
private int latFractionOnlyDeg; // Whole nr of LAT_TO_FRACTIONS_FACTOR, relative to latMicroDeg.
254-
private int lonFractionOnlyDeg; // Whole nr of LON_TO_FRACTIONS_FACTOR, relative to lonMicroDeg.
247+
private int latMicroDeg; // Whole nr of MICRODEG_TO_DEG_FACTOR.
248+
private int lonMicroDeg; // Whole nr of MICRODEG_TO_DEG_FACTOR.
249+
private int latFractionOnlyDeg; // Whole nr of LAT_TO_FRACTIONS_FACTOR, relative to latMicroDeg.
250+
private int lonFractionOnlyDeg; // Whole nr of LON_TO_FRACTIONS_FACTOR, relative to lonMicroDeg.
255251

256252
/**
257253
* Points can be "undefined" within the mapcode implementation, but never outside of that.
@@ -276,7 +272,8 @@ private Point(final double latDeg, final double lonDeg) {
276272
double lat = latDeg + 90;
277273
if (lat < 0) {
278274
lat = 0;
279-
} else if (lat > 180) {
275+
}
276+
else if (lat > 180) {
280277
lat = 180;
281278
}
282279

@@ -328,7 +325,7 @@ int getLatFraction() {
328325
*/
329326
@Nonnull
330327
static Point fromLatLonFractions(final double latFraction, final double lonFraction) {
331-
Point p = new Point();
328+
final Point p = new Point();
332329
p.latMicroDeg = (int) Math.floor(latFraction / LAT_MICRODEG_TO_FRACTIONS_FACTOR);
333330
p.latFractionOnlyDeg = (int) (latFraction - (LAT_MICRODEG_TO_FRACTIONS_FACTOR * p.latMicroDeg));
334331
p.lonMicroDeg = (int) Math.floor(lonFraction / LON_MICRODEG_TO_FRACTIONS_FACTOR);
@@ -362,7 +359,8 @@ Point wrap() {
362359
lonMicroDeg %= 360000000;
363360
if (lonMicroDeg >= 180000000) {
364361
lonMicroDeg -= 360000000;
365-
} else if (lonMicroDeg < -180000000) {
362+
}
363+
else if (lonMicroDeg < -180000000) {
366364
lonMicroDeg += 360000000;
367365
}
368366
}

src/test/java/com/mapcode/PointTest.java

Lines changed: 122 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import static org.junit.Assert.assertEquals;
2525

2626
public class PointTest {
27-
private static final Logger LOG = LoggerFactory.getLogger(PointTest.class);
27+
private static final Logger LOG = LoggerFactory.getLogger(PointTest.class);
2828
private static final double DELTA = 0.000001;
2929

3030
@Test
@@ -83,17 +83,17 @@ public void testDegreesLonToMeters() {
8383

8484
assertEquals(0, Double.compare(0, Point.degreesLonToMetersAtLat(0, 0)));
8585
assertEquals(0,
86-
Double.compare(Point.METERS_PER_DEGREE_LON_EQUATOR / 2.0, Point.degreesLonToMetersAtLat(0.5, 0)));
86+
Double.compare(Point.METERS_PER_DEGREE_LON_EQUATOR / 2.0, Point.degreesLonToMetersAtLat(0.5, 0)));
8787
assertEquals(0,
88-
Double.compare(Point.METERS_PER_DEGREE_LON_EQUATOR, Point.degreesLonToMetersAtLat(1, 0)));
88+
Double.compare(Point.METERS_PER_DEGREE_LON_EQUATOR, Point.degreesLonToMetersAtLat(1, 0)));
8989
assertEquals(0,
90-
Double.compare(Point.METERS_PER_DEGREE_LON_EQUATOR * 180, Point.degreesLonToMetersAtLat(180, 0)));
90+
Double.compare(Point.METERS_PER_DEGREE_LON_EQUATOR * 180, Point.degreesLonToMetersAtLat(180, 0)));
9191
assertEquals(0,
92-
Double.compare(-Point.METERS_PER_DEGREE_LON_EQUATOR * 180, Point.degreesLonToMetersAtLat(-180, 0)));
92+
Double.compare(-Point.METERS_PER_DEGREE_LON_EQUATOR * 180, Point.degreesLonToMetersAtLat(-180, 0)));
9393
Assert.assertTrue(Math.abs((Point.METERS_PER_DEGREE_LON_EQUATOR / 2.0) -
94-
Point.degreesLonToMetersAtLat(1, 60)) < DELTA);
94+
Point.degreesLonToMetersAtLat(1, 60)) < DELTA);
9595
Assert.assertTrue(Math.abs((Point.METERS_PER_DEGREE_LON_EQUATOR / 2.0) -
96-
Point.degreesLonToMetersAtLat(1, -60)) < DELTA);
96+
Point.degreesLonToMetersAtLat(1, -60)) < DELTA);
9797
}
9898

9999
@Test
@@ -102,44 +102,136 @@ public void testMetersToDegreesLon() {
102102

103103
assertEquals(0, Double.compare(0, Point.metersToDegreesLonAtLat(0, 0)));
104104
assertEquals(0,
105-
Double.compare(0.5, Point.metersToDegreesLonAtLat(Point.METERS_PER_DEGREE_LON_EQUATOR / 2, 0)));
105+
Double.compare(0.5, Point.metersToDegreesLonAtLat(Point.METERS_PER_DEGREE_LON_EQUATOR / 2, 0)));
106106
assertEquals(0,
107-
Double.compare(1, Point.metersToDegreesLonAtLat(Point.METERS_PER_DEGREE_LON_EQUATOR, 0)));
107+
Double.compare(1, Point.metersToDegreesLonAtLat(Point.METERS_PER_DEGREE_LON_EQUATOR, 0)));
108108
assertEquals(0,
109-
Double.compare(180, Point.metersToDegreesLonAtLat(Point.METERS_PER_DEGREE_LON_EQUATOR * 180, 0)));
109+
Double.compare(180, Point.metersToDegreesLonAtLat(Point.METERS_PER_DEGREE_LON_EQUATOR * 180, 0)));
110110
assertEquals(0, Double.compare(-180,
111-
Point.metersToDegreesLonAtLat(Point.METERS_PER_DEGREE_LON_EQUATOR * -180, 0)));
111+
Point.metersToDegreesLonAtLat(Point.METERS_PER_DEGREE_LON_EQUATOR * -180, 0)));
112112
Assert.assertTrue(
113-
Math.abs(2.0 - Point.metersToDegreesLonAtLat(Point.METERS_PER_DEGREE_LON_EQUATOR, 60)) < DELTA);
113+
Math.abs(2.0 - Point.metersToDegreesLonAtLat(Point.METERS_PER_DEGREE_LON_EQUATOR, 60)) < DELTA);
114114
Assert.assertTrue(
115-
Math.abs(2.0 - Point.metersToDegreesLonAtLat(Point.METERS_PER_DEGREE_LON_EQUATOR, -60)) < DELTA);
115+
Math.abs(2.0 - Point.metersToDegreesLonAtLat(Point.METERS_PER_DEGREE_LON_EQUATOR, -60)) < DELTA);
116116
}
117117

118118
@Test
119119
public void testDistanceInMeters() {
120120
LOG.info("testDistanceInMeters");
121121

122-
double d = Point.METERS_PER_DEGREE_LAT - Point.distanceInMeters(Point.fromMicroDeg(-500000, 0),
123-
Point.fromMicroDeg(500000, 0));
124-
Assert.assertTrue(Math.abs(d) <= DELTA);
122+
double d = Point.distanceInMeters(
123+
Point.fromMicroDeg(-500000, 0), Point.fromMicroDeg(500000, 0));
124+
double delta = Math.abs(Point.METERS_PER_DEGREE_LAT - d);
125+
LOG.debug("testDistanceInMeters: d={}, delta={}", d, delta);
126+
Assert.assertTrue(delta <= DELTA);
125127

126-
d = Point.METERS_PER_DEGREE_LAT - Point.distanceInMeters(Point.fromMicroDeg(80000000, 0),
127-
Point.fromMicroDeg(81000000, 0));
128-
Assert.assertTrue(Math.abs(d) <= DELTA);
128+
d = Point.distanceInMeters(
129+
Point.fromMicroDeg(80000000, 0), Point.fromMicroDeg(81000000, 0));
130+
delta = Math.abs(Point.METERS_PER_DEGREE_LAT - d);
131+
LOG.debug("testDistanceInMeters: d={}, delta={}", d, delta);
132+
Assert.assertTrue(delta <= DELTA);
129133

130-
d = (Point.METERS_PER_DEGREE_LAT * 2) - Point.distanceInMeters(Point.fromMicroDeg(59000000, 0),
131-
Point.fromMicroDeg(61000000, 0));
132-
Assert.assertTrue(Math.abs(d) <= DELTA);
134+
d = Point.distanceInMeters(
135+
Point.fromMicroDeg(59000000, 0), Point.fromMicroDeg(61000000, 0));
136+
delta = Math.abs((Point.METERS_PER_DEGREE_LAT * 2) - d);
137+
LOG.debug("testDistanceInMeters: d={}, delta={}", d, delta);
138+
Assert.assertTrue(delta <= DELTA);
133139

134-
Assert.assertTrue(Math.abs(Point.METERS_PER_DEGREE_LON_EQUATOR - Point.distanceInMeters(
135-
Point.fromMicroDeg(0, -500000), Point.fromMicroDeg(0, 500000))) <= DELTA);
136-
Assert.assertTrue(Math.abs(Point.METERS_PER_DEGREE_LON_EQUATOR - Point.distanceInMeters(
137-
Point.fromMicroDeg(0, 80000000), Point.fromMicroDeg(0, 81000000))) < DELTA);
138-
Assert.assertTrue(Math.abs((Point.METERS_PER_DEGREE_LON_EQUATOR / 2.0) - Point.distanceInMeters(
139-
Point.fromMicroDeg(60000000, 80000000), Point.fromMicroDeg(60000000, 81000000))) <= DELTA);
140+
d = Point.distanceInMeters(
141+
Point.fromMicroDeg(0, 1000000), Point.fromMicroDeg(0, 0));
142+
delta = Math.abs(Point.METERS_PER_DEGREE_LON_EQUATOR - d);
143+
LOG.debug("testDistanceInMeters: d={}, delta={}", d, delta);
144+
Assert.assertTrue(delta <= DELTA);
140145

141-
Assert.assertTrue(Math.abs((Point.METERS_PER_DEGREE_LON_EQUATOR * 2) - Point.distanceInMeters(
142-
Point.fromMicroDeg(0, -1000000), Point.fromMicroDeg(0, 1000000))) <= DELTA);
146+
d = Point.distanceInMeters(
147+
Point.fromMicroDeg(0, 2000000), Point.fromMicroDeg(0, 0));
148+
delta = Math.abs((Point.METERS_PER_DEGREE_LON_EQUATOR * 2) - d);
149+
LOG.debug("testDistanceInMeters: d={}, delta={}", d, delta);
150+
Assert.assertTrue(delta <= DELTA);
151+
152+
d = Point.distanceInMeters(
153+
Point.fromMicroDeg(0, 2000000), Point.fromMicroDeg(0, -1000000));
154+
delta = Math.abs((Point.METERS_PER_DEGREE_LON_EQUATOR * 3) - d);
155+
LOG.debug("testDistanceInMeters: d={}, delta={}", d, delta);
156+
Assert.assertTrue(delta <= DELTA);
157+
158+
d = Point.distanceInMeters(
159+
Point.fromMicroDeg(0, -1000000), Point.fromMicroDeg(0, 0));
160+
delta = Math.abs(Point.METERS_PER_DEGREE_LON_EQUATOR - d);
161+
LOG.debug("testDistanceInMeters: d={}, delta={}", d, delta);
162+
Assert.assertTrue(delta <= DELTA);
163+
164+
d = Point.distanceInMeters(
165+
Point.fromMicroDeg(0, -1000000), Point.fromMicroDeg(0, 1000000));
166+
delta = Math.abs((Point.METERS_PER_DEGREE_LON_EQUATOR * 2) - d);
167+
LOG.debug("testDistanceInMeters: d={}, delta={}", d, delta);
168+
Assert.assertTrue(delta <= DELTA);
169+
170+
d = Point.distanceInMeters(
171+
Point.fromMicroDeg(0, -1000000), Point.fromMicroDeg(0, 2000000));
172+
delta = Math.abs((Point.METERS_PER_DEGREE_LON_EQUATOR * 3) - d);
173+
LOG.debug("testDistanceInMeters: d={}, delta={}", d, delta);
174+
Assert.assertTrue(delta <= DELTA);
175+
176+
d = Point.distanceInMeters(
177+
Point.fromMicroDeg(0, -500000), Point.fromMicroDeg(0, 500000));
178+
delta = Math.abs(Point.METERS_PER_DEGREE_LON_EQUATOR - d);
179+
LOG.debug("testDistanceInMeters: d={}, delta={}", d, delta);
180+
Assert.assertTrue(delta <= DELTA);
181+
182+
d = Point.distanceInMeters(
183+
Point.fromMicroDeg(0, 80000000), Point.fromMicroDeg(0, 81000000));
184+
delta = Math.abs(Point.METERS_PER_DEGREE_LON_EQUATOR - d);
185+
LOG.debug("testDistanceInMeters: d={}, delta={}", d, delta);
186+
Assert.assertTrue(delta <= DELTA);
187+
188+
d = Point.distanceInMeters(
189+
Point.fromMicroDeg(60000000, 80000000), Point.fromMicroDeg(60000000, 81000000));
190+
delta = Math.abs((Point.METERS_PER_DEGREE_LON_EQUATOR / 2.0) - d);
191+
LOG.debug("testDistanceInMeters: d={}, delta={}", d, delta);
192+
Assert.assertTrue(delta <= DELTA);
193+
194+
d = Point.distanceInMeters(
195+
Point.fromMicroDeg(0, -1000000), Point.fromMicroDeg(0, 1000000));
196+
delta = Math.abs((Point.METERS_PER_DEGREE_LON_EQUATOR * 2) - d);
197+
LOG.debug("testDistanceInMeters: d={}, delta={}", d, delta);
198+
Assert.assertTrue(delta <= DELTA);
199+
200+
d = Point.distanceInMeters(
201+
Point.fromMicroDeg(0, 1000000), Point.fromMicroDeg(0, 2000000));
202+
delta = Math.abs(Point.METERS_PER_DEGREE_LON_EQUATOR - d);
203+
LOG.debug("testDistanceInMeters: d={}, delta={}", d, delta);
204+
Assert.assertTrue(delta <= DELTA);
205+
206+
d = Point.distanceInMeters(
207+
Point.fromMicroDeg(0, 178000000), Point.fromMicroDeg(0, 179000000));
208+
delta = Math.abs(Point.METERS_PER_DEGREE_LON_EQUATOR - d);
209+
LOG.debug("testDistanceInMeters: d={}, delta={}", d, delta);
210+
Assert.assertTrue(delta <= DELTA);
211+
212+
d = Point.distanceInMeters(
213+
Point.fromMicroDeg(0, 179000000), Point.fromMicroDeg(0, 180000000));
214+
delta = Math.abs(Point.METERS_PER_DEGREE_LON_EQUATOR - d);
215+
LOG.debug("testDistanceInMeters: d={}, delta={}", d, delta);
216+
Assert.assertTrue(delta <= DELTA);
217+
218+
d = Point.distanceInMeters(
219+
Point.fromMicroDeg(0, 179500000), Point.fromMicroDeg(0, -179500000));
220+
delta = Math.abs(Point.METERS_PER_DEGREE_LON_EQUATOR - d);
221+
LOG.debug("testDistanceInMeters: d={}, delta={}", d, delta);
222+
Assert.assertTrue(delta <= DELTA);
223+
224+
d = Point.distanceInMeters(
225+
Point.fromMicroDeg(0, -179500000), Point.fromMicroDeg(0, 179500000));
226+
delta = Math.abs(Point.METERS_PER_DEGREE_LON_EQUATOR - d);
227+
LOG.debug("testDistanceInMeters: d={}, delta={}", d, delta);
228+
Assert.assertTrue(delta <= DELTA);
229+
230+
d = Point.distanceInMeters(
231+
Point.fromMicroDeg(0, -179000000), Point.fromMicroDeg(0, -180000000));
232+
delta = Math.abs(Point.METERS_PER_DEGREE_LON_EQUATOR - d);
233+
LOG.debug("testDistanceInMeters: d={}, delta={}", d, delta);
234+
Assert.assertTrue(delta <= DELTA);
143235

144236
Assert.assertTrue(Point.distanceInMeters(Point.fromDeg(0.0, 180.0), Point.fromDeg(0.0, -179.999977)) < 10.0);
145237
Assert.assertTrue(Point.distanceInMeters(Point.fromDeg(0.0, -179.999977), Point.fromDeg(0.0, 180.0)) < 10.0);

src/test/resources/log4j.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727

2828
<!-- Make sure we get all messages from our own domain. -->
2929
<logger name="com.mapcode">
30-
<level value="info"/>
30+
<level value="debug"/>
3131
</logger>
3232

3333
<!--

0 commit comments

Comments
 (0)