[fix] some weirdness with the dateline and polygons that have a longitude of exactly 180.0
This commit is contained in:
5
scripts/geodata/math/floats.py
Normal file
5
scripts/geodata/math/floats.py
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
FLOAT_EPSILON = 1e-09
|
||||||
|
|
||||||
|
|
||||||
|
def isclose(a, b, rel_tol=FLOAT_EPSILON, abs_tol=0.0):
|
||||||
|
return abs(a - b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)
|
||||||
@@ -2,7 +2,7 @@ import bisect
|
|||||||
import random
|
import random
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
FLOAT_EPSILON = 1e-09
|
from geodata.math.floats import isclose, FLOAT_EPSILON
|
||||||
|
|
||||||
|
|
||||||
def weighted_choice(values, cdf):
|
def weighted_choice(values, cdf):
|
||||||
@@ -16,10 +16,6 @@ def weighted_choice(values, cdf):
|
|||||||
return values[i]
|
return values[i]
|
||||||
|
|
||||||
|
|
||||||
def isclose(a, b, rel_tol=FLOAT_EPSILON, abs_tol=0.0):
|
|
||||||
return abs(a - b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)
|
|
||||||
|
|
||||||
|
|
||||||
def check_probability_distribution(probs):
|
def check_probability_distribution(probs):
|
||||||
cumulative = 0.0
|
cumulative = 0.0
|
||||||
for p in probs:
|
for p in probs:
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ from itertools import izip, combinations
|
|||||||
|
|
||||||
from geodata.coordinates.conversion import latlon_to_decimal
|
from geodata.coordinates.conversion import latlon_to_decimal
|
||||||
from geodata.graph.scc import strongly_connected_components
|
from geodata.graph.scc import strongly_connected_components
|
||||||
|
from geodata.math.floats import isclose
|
||||||
from geodata.osm.extract import *
|
from geodata.osm.extract import *
|
||||||
|
|
||||||
|
|
||||||
@@ -179,6 +180,10 @@ class OSMPolygonReader(object):
|
|||||||
lat, lon = latlon_to_decimal(lat, lon)
|
lat, lon = latlon_to_decimal(lat, lon)
|
||||||
if lat is None or lon is None:
|
if lat is None or lon is None:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
if isclose(lon, 180.0):
|
||||||
|
lon = 179.999
|
||||||
|
|
||||||
# Nodes are stored in a sorted array, coordinate indices are simply
|
# Nodes are stored in a sorted array, coordinate indices are simply
|
||||||
# [lon, lat, lon, lat ...] so the index can be calculated as 2 * i
|
# [lon, lat, lon, lat ...] so the index can be calculated as 2 * i
|
||||||
# Note that the pairs are lon, lat instead of lat, lon for geometry purposes
|
# Note that the pairs are lon, lat instead of lat, lon for geometry purposes
|
||||||
|
|||||||
Reference in New Issue
Block a user