mirror of
https://github.com/placeAtlas/atlas.git
synced 2024-12-26 06:44:00 +01:00
Added a cleanup step to re calulate the center
This change calculates the center of each entry and compares it to the current center. If they are different, the center get's updated.
This commit is contained in:
parent
bf834a6565
commit
706f2b32b0
1 changed files with 46 additions and 2 deletions
|
@ -189,6 +189,48 @@ def convert_subreddit_to_website(entry: dict):
|
||||||
|
|
||||||
return entry
|
return entry
|
||||||
|
|
||||||
|
def calculate_center(path: list):
|
||||||
|
"""
|
||||||
|
Caluclates the center of a polygon
|
||||||
|
|
||||||
|
adapted from /web/_js/draw.js:calucalteCenter()
|
||||||
|
"""
|
||||||
|
area = 0
|
||||||
|
x = 0
|
||||||
|
y = 0
|
||||||
|
|
||||||
|
for i in range(len(path)):
|
||||||
|
point1 = path[i]
|
||||||
|
point2 = path[i-1 if i != 0 else len(path)-1]
|
||||||
|
f = point1[0] * point2[1] - point2[0] * point1[1]
|
||||||
|
area += f
|
||||||
|
x += (point1[0] + point2[0]) * f
|
||||||
|
y += (point1[1] + point2[1]) * f
|
||||||
|
|
||||||
|
area *= 3
|
||||||
|
|
||||||
|
if area != 0:
|
||||||
|
return [x // area + 0.5, y // area + 0.5]
|
||||||
|
else:
|
||||||
|
# get the center of a straight line
|
||||||
|
max_x = max(i[0] for i in path)
|
||||||
|
min_x = min(i[0] for i in path)
|
||||||
|
max_y = max(i[1] for i in path)
|
||||||
|
min_y = min(i[1] for i in path)
|
||||||
|
return [(max_x + min_x) // 2 + 0.5, (max_y + min_y) // 2 + 0.5]
|
||||||
|
|
||||||
|
def update_center(entry: dict):
|
||||||
|
"""
|
||||||
|
checks if the center of a entry is up to date, and updates it if it's either missing or outdated
|
||||||
|
"""
|
||||||
|
if 'path' not in entry:
|
||||||
|
return entry
|
||||||
|
path = entry['path']
|
||||||
|
if len(path) > 1:
|
||||||
|
calculated_center = calculate_center(path)
|
||||||
|
if 'center' not in entry or entry['center'] != calculated_center:
|
||||||
|
entry['center'] = calculated_center
|
||||||
|
return entry
|
||||||
|
|
||||||
def validate(entry: dict):
|
def validate(entry: dict):
|
||||||
"""
|
"""
|
||||||
|
@ -256,6 +298,8 @@ def print_(*args, **kwargs):
|
||||||
entry = fix_no_protocol_urls(entry)
|
entry = fix_no_protocol_urls(entry)
|
||||||
print_("Removing extras...")
|
print_("Removing extras...")
|
||||||
entry = remove_extras(entry)
|
entry = remove_extras(entry)
|
||||||
|
print_("Updating center")
|
||||||
|
entry = update_center(entry)
|
||||||
print_("Validating...")
|
print_("Validating...")
|
||||||
status_code = validate(entry)
|
status_code = validate(entry)
|
||||||
print_("Completed!")
|
print_("Completed!")
|
||||||
|
|
Loading…
Reference in a new issue