drtimcooper / LatLongToTimezone

Lat/long to timezone mapper in Java. Does not require web services or data files - just pure Java or Swift.
MIT License
168 stars 33 forks source link

Two polygon nodes are not always split correctly #38

Open andymstone opened 4 years ago

andymstone commented 4 years ago

I think there is a bug in TimeZoneMapperConverter.split2Polys where it splits a node with 2 non-overlapping polygons into 2 pure nodes. It works out if it can do the split on longitude/latitude, but then it always assigns poly1 to left and poly2 to right, but I think actually in the first branch of the if statement (if (box1.lat1 > box2.lat2)) you should assign the polygons the otherway around? Since poly1 is north of poly2 it should be assigned to right? Similarly in the 3rd branch where poly1 is east of poly2.

The result of this error is cases like (65.842400, -52.665800) which should have time zone America/Godthab but doesn't because the wrong polygon ended up in the leaf node.

tom-b-wright commented 4 years ago

Seems legit.

Hope that someone can fix this.


@Test @Ignore
public void testIssue38() {

        assertEquals("America/Godthab", TimezoneMapper.latLngToTimezoneString(65.842400, -52.665800));
        assertNotEquals("America/Goose_Bay", TimezoneMapper.latLngToTimezoneString(65.842400, -52.665800));

}