110 lines
3.1 KiB
Python
110 lines
3.1 KiB
Python
|
|
# -------------------------------------------------------------------
|
|
# ORTHOGRAPHIC
|
|
# Your personal aerial satellite. Always on. At any altitude.*
|
|
# Developed by MarStrMind
|
|
# License: Open Software License 3.0
|
|
# Up to date version always on marstr.online
|
|
# -------------------------------------------------------------------
|
|
# functions.py
|
|
# A number of utility functions that don't belong in any class
|
|
# -------------------------------------------------------------------
|
|
|
|
import os
|
|
import json
|
|
from defines import *
|
|
|
|
|
|
# Find out if we have a tiledata.json file at all
|
|
def doesTileDataExist(lat, lng):
|
|
e = False
|
|
if os.path.isfile(mstr_datafolder + "Tiles/" + str(lat) + "_" + str(lng) + "/data.db"):
|
|
e = True
|
|
return e
|
|
|
|
|
|
|
|
# Find adjacent tiles to check against existing chosen imagery
|
|
#
|
|
# The provided tile is the center, and it will provide a list of
|
|
# all adjacent tiles, like so:
|
|
#
|
|
# #
|
|
# #X#
|
|
# #
|
|
#
|
|
# If we are in a corner, those will be omitted.
|
|
def findAdjacentTilesTo(v, h):
|
|
adj = []
|
|
adj.append( (v+1, h) ) # Top
|
|
adj.append( (v, h+1) ) # Right
|
|
adj.append( (v-1, h) ) # Bottom
|
|
adj.append( (v, h-1) ) # Left
|
|
|
|
return adj
|
|
|
|
|
|
# Find the tiles we need in order to construct zoom level 16 photos,
|
|
# based on the tile provided. This is usually called at the very end
|
|
# of the ortho generation process.
|
|
def findZL16tiles(v, h):
|
|
# Contains the tiles, in forward order (order of processing)
|
|
tiles = []
|
|
|
|
for y in range(0, 4):
|
|
tr = []
|
|
for x in range(0, 4):
|
|
tl = (v+y, h+x)
|
|
tr.append(tl)
|
|
tiles.append(tr)
|
|
|
|
return tiles
|
|
|
|
|
|
# Find the tiles to keep around an airport, using the defined tile
|
|
# radius amount in defines.py
|
|
def findAirportTiles(av, ah):
|
|
# The tiles
|
|
tiles=[]
|
|
|
|
# Starting points
|
|
sty = av - int(mstr_airport_radius/2)
|
|
stx = ah - int(mstr_airport_radius/2)
|
|
|
|
for y in range(mstr_airport_radius):
|
|
for x in range(mstr_airport_radius):
|
|
a = ( sty+y, stx+x )
|
|
tiles.append(a)
|
|
|
|
# Return the tiles
|
|
return tiles
|
|
|
|
|
|
# Testing
|
|
def in_circle(center_x, center_y, radius, x, y):
|
|
square_dist = (center_x - x) ** 2 + (center_y - y) ** 2
|
|
return square_dist <= radius ** 2
|
|
|
|
|
|
# Find meters per pixel. Requires width of tile in meters
|
|
# Needed for proper approximation of shadow length per building level
|
|
def meters_per_pixel(lngwidth):
|
|
mpx = lngwidth / mstr_photores
|
|
return mpx
|
|
|
|
|
|
# Construct an X-Plane compatible folder name for latitude and longitude
|
|
def xplane_latlng_folder(numbers):
|
|
fstr = ""
|
|
if numbers[0] >= 0: fstr = "+"
|
|
if numbers[0] < 0: fstr = "-"
|
|
if abs(numbers[0]) < 10: fstr = fstr + "0" + str(numbers[0])
|
|
if abs(numbers[0]) >= 10 and numbers[0] <= 90: fstr = fstr + str(numbers[0])
|
|
|
|
if numbers[1] >= 0: fstr = fstr + "+"
|
|
if numbers[1] < 0: fstr = fstr + "-"
|
|
if abs(numbers[1]) < 10: fstr = fstr + "00" + str(numbers[1])
|
|
if abs(numbers[1]) >= 10 and numbers[0] <= 99: fstr = fstr + "0" + str(numbers[1])
|
|
if abs(numbers[1]) >= 100 : fstr = fstr + str(numbers[1])
|
|
|
|
return fstr |