mirror of
https://github.com/enzet/map-machine.git
synced 2025-05-22 13:36:26 +02:00
Fix code style.
This commit is contained in:
parent
669f6712c4
commit
c098f39e46
4 changed files with 169 additions and 100 deletions
|
@ -8,11 +8,18 @@ import math
|
|||
import numpy as np
|
||||
|
||||
|
||||
def get_ratio(maximum: float, minimum: float, ratio: float = 1):
|
||||
return (maximum[0] - minimum[0]) * ratio / (maximum[1] - minimum[1])
|
||||
|
||||
|
||||
class Flinger(object):
|
||||
"""
|
||||
Flinger. Coordinates repositioning.
|
||||
"""
|
||||
def __init__(self, minimum, maximum, target_minimum=None, target_maximum=None, ratio=None):
|
||||
def __init__(
|
||||
self, minimum, maximum, target_minimum=None, target_maximum=None,
|
||||
ratio=None):
|
||||
|
||||
self.minimum = minimum
|
||||
self.maximum = maximum
|
||||
|
||||
|
@ -24,19 +31,27 @@ class Flinger(object):
|
|||
space = [0, 0]
|
||||
|
||||
if ratio:
|
||||
if ratio == 'geo':
|
||||
ratio = math.sin((90.0 - ((self.maximum[1] + self.minimum[1]) / 2.0)) / 180.0 * math.pi)
|
||||
if ratio == "geo":
|
||||
ratio = math.sin(
|
||||
(90.0 - ((self.maximum[1] + self.minimum[1]) / 2.0))
|
||||
/ 180.0 * math.pi)
|
||||
|
||||
current_ratio = (self.maximum[0] - self.minimum[0]) * ratio / (self.maximum[1] - self.minimum[1])
|
||||
target_ratio = (target_maximum[0] - target_minimum[0]) / (target_maximum[1] - target_minimum[1])
|
||||
current_ratio = get_ratio(self.maximum, self.minimum, ratio)
|
||||
target_ratio = get_ratio(target_maximum, target_minimum)
|
||||
|
||||
if current_ratio >= target_ratio:
|
||||
n = (target_maximum[0] - target_minimum[0]) / (maximum[0] - minimum[0]) / ratio
|
||||
space[1] = ((target_maximum[1] - target_minimum[1]) - (maximum[1] - minimum[1]) * n) / 2.0
|
||||
n = (target_maximum[0] - target_minimum[0]) / \
|
||||
(maximum[0] - minimum[0]) / ratio
|
||||
space[1] = \
|
||||
((target_maximum[1] - target_minimum[1]) -
|
||||
(maximum[1] - minimum[1]) * n) / 2.0
|
||||
space[0] = 0
|
||||
else:
|
||||
n = (target_maximum[1] - target_minimum[1]) / (maximum[1] - minimum[1])
|
||||
space[0] = ((target_maximum[0] - target_minimum[0]) - (maximum[0] - minimum[0]) * n) / 2.0
|
||||
n = (target_maximum[1] - target_minimum[1]) / \
|
||||
(maximum[1] - minimum[1])
|
||||
space[0] = \
|
||||
((target_maximum[0] - target_minimum[0]) -
|
||||
(maximum[0] - minimum[0]) * n) / 2.0
|
||||
space[1] = 0
|
||||
|
||||
target_minimum[0] += space
|
||||
|
@ -49,8 +64,12 @@ class Flinger(object):
|
|||
"""
|
||||
Fling current point to the surface.
|
||||
"""
|
||||
x = map_(current[0], self.minimum[0], self.maximum[0], self.target_minimum[0], self.target_maximum[0])
|
||||
y = map_(current[1], self.minimum[1], self.maximum[1], self.target_minimum[1], self.target_maximum[1])
|
||||
x = map_(
|
||||
current[0], self.minimum[0], self.maximum[0],
|
||||
self.target_minimum[0], self.target_maximum[0])
|
||||
y = map_(
|
||||
current[1], self.minimum[1], self.maximum[1],
|
||||
self.target_minimum[1], self.target_maximum[1])
|
||||
return [x, y]
|
||||
|
||||
|
||||
|
@ -59,6 +78,12 @@ class Geo:
|
|||
self.lat = lat
|
||||
self.lon = lon
|
||||
|
||||
def __getitem__(self, item):
|
||||
if item == 0:
|
||||
return self.lon
|
||||
if item == 1:
|
||||
return self.lat
|
||||
|
||||
def __add__(self, other):
|
||||
return Geo(self.lat + other.lat, self.lon + other.lon)
|
||||
|
||||
|
@ -70,15 +95,19 @@ class Geo:
|
|||
|
||||
|
||||
class GeoFlinger:
|
||||
def __init__(self, minimum, maximum, target_minimum=None, target_maximum=None):
|
||||
def __init__(
|
||||
self, minimum, maximum, target_minimum=None, target_maximum=None):
|
||||
|
||||
self.minimum = minimum
|
||||
self.maximum = maximum
|
||||
|
||||
# Ratio is depended of latitude. It is always <= 1.
|
||||
# In one latitude degree is always 40 000 / 360 km.
|
||||
# In one current longitude degree is about 40 000 / 360 * ratio km.
|
||||
# Ratio is depended of latitude. It is always <= 1. In one latitude
|
||||
# degree is always 40 000 / 360 km. In one current longitude degree is
|
||||
# about 40 000 / 360 * ratio km.
|
||||
|
||||
ratio = math.sin((90.0 - ((self.maximum.lat + self.minimum.lat) / 2.0)) / 180.0 * math.pi)
|
||||
ratio = math.sin(
|
||||
(90.0 - ((self.maximum.lat + self.minimum.lat) / 2.0))
|
||||
/ 180.0 * math.pi)
|
||||
|
||||
# Longitude displayed as x.
|
||||
# Latitude displayed as y.
|
||||
|
@ -86,16 +115,22 @@ class GeoFlinger:
|
|||
# Ratio is x / y.
|
||||
|
||||
space = [0, 0]
|
||||
current_ratio = (self.maximum.lon - self.minimum.lon) * ratio / (self.maximum.lat - self.minimum.lat)
|
||||
target_ratio = (target_maximum[0] - target_minimum[0]) / (target_maximum[1] - target_minimum[1])
|
||||
current_ratio = get_ratio(self.maximum, self.minimum, ratio)
|
||||
target_ratio = get_ratio(target_maximum, target_minimum)
|
||||
|
||||
if current_ratio >= target_ratio:
|
||||
n = (target_maximum[0] - target_minimum[0]) / (maximum.lon - minimum.lon) / ratio
|
||||
space[1] = ((target_maximum[1] - target_minimum[1]) - (maximum.lat - minimum.lat) * n) / 2.0
|
||||
n = (target_maximum[0] - target_minimum[0]) / \
|
||||
(maximum.lon - minimum.lon) / ratio
|
||||
space[1] = \
|
||||
((target_maximum[1] - target_minimum[1]) -
|
||||
(maximum.lat - minimum.lat) * n) / 2.0
|
||||
space[0] = 0
|
||||
else:
|
||||
n = (target_maximum[1] - target_minimum[1]) / (maximum.lat - minimum.lat) * ratio
|
||||
space[0] = ((target_maximum[0] - target_minimum[0]) - (maximum.lon - minimum.lon) * n) / 2.0
|
||||
n = (target_maximum[1] - target_minimum[1]) / \
|
||||
(maximum.lat - minimum.lat) * ratio
|
||||
space[0] = \
|
||||
((target_maximum[0] - target_minimum[0]) -
|
||||
(maximum.lon - minimum.lon) * n) / 2.0
|
||||
space[1] = 0
|
||||
|
||||
self.target_minimum = np.add(target_minimum, space)
|
||||
|
@ -104,16 +139,23 @@ class GeoFlinger:
|
|||
self.space = space
|
||||
|
||||
def fling(self, current):
|
||||
x = map_(current.lon, self.minimum.lon, self.maximum.lon,
|
||||
self.target_minimum[0], self.target_maximum[0])
|
||||
y = map_(self.maximum.lat + self.minimum.lat - current.lat,
|
||||
self.minimum.lat, self.maximum.lat,
|
||||
self.target_minimum[1], self.target_maximum[1])
|
||||
x = map_(
|
||||
current.lon, self.minimum.lon, self.maximum.lon,
|
||||
self.target_minimum[0], self.target_maximum[0])
|
||||
y = map_(
|
||||
self.maximum.lat + self.minimum.lat - current.lat,
|
||||
self.minimum.lat, self.maximum.lat,
|
||||
self.target_minimum[1], self.target_maximum[1])
|
||||
return [x, y]
|
||||
|
||||
|
||||
def map_(value, current_min, current_max, target_min, target_max):
|
||||
def map_(
|
||||
value: float, current_min: float, current_max: float, target_min: float,
|
||||
target_max: float):
|
||||
"""
|
||||
Map current value in bounds of current_min and current_max to bounds of target_min and target_max.
|
||||
Map current value in bounds of current_min and current_max to bounds of
|
||||
target_min and target_max.
|
||||
"""
|
||||
return target_min + (value - current_min) / (current_max - current_min) * (target_max - target_min)
|
||||
return \
|
||||
target_min + (value - current_min) / (current_max - current_min) * \
|
||||
(target_max - target_min)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue