#arrays #loops #input
Вопрос:
Я создал программу, которая вычисляет площадь и периметр на основе 2D координат (широты и широты), заданных пользователем, спрашивая, хотят ли они включить больше координат из третьей пары, и оценивая площадь и периметр каждый раз, когда добавляется пара координат.
Кроме того, он сравнивает значения площади и периметра из разных регионов, выбирая, сколько регионов пользователь хочет оценить.
from pyproj import Geod
geod = Geod(ellps='WGS84')
regions = 0
area_list = []
perimeter_list = []
while True:
regions = 1
lats = []
lons = []
count = 0
while True:
count = 1
lat = float(input(f"Enter latitude #{count}: "))
lon = float(input(f"Enter longitude #{count}: "))
lats.append(lat)
lons.append(lon)
if count < 3:
print("Not enough information to calculate the area.")
continue
poly_area, poly_perimeter = geod.polygon_area_perimeter(lons, lats)
print(f"Área #{regions}:", (abs(float(poly_area))) / (1000000), "km^2")
print(f"Perímetro #{regions}:", (abs(float(poly_perimeter))) / (1000), "km")
if input('Enter more coordinates? [Y/N] ') in ['n', 'N', 'No', 'no', 'non']:
area_list.append(poly_area)
perimeter_list.append(poly_perimeter)
# p1 = Polygon([lat lon])
break
if input('More regions? [Y/N] ') in ['n', 'N', 'No', 'no', 'non']:
break
while True:
dividend = int(input(f"Write what region is the dividend:")) - 1
area_km_dividend = (abs(area_list[dividend])/1000000)
perimeter_km_dividend = (abs(perimeter_list[dividend])/1000)
print(f"Area: {area_km_dividend}")
print(f"Perimeter: {perimeter_km_dividend}")
divisor = int(input(f"Which region is the divisor?:")) - 1
area_km_divisor = (abs(area_list[divisor])/1000000)
perimeter_km_divisor = (abs(perimeter_list[divisor])/1000)
print(f"Area: {area_km_divisor}")
print(f"Perimeter: {perimeter_km_divisor}")
area_divid_div = area_km_dividend / area_km_divisor
area_div_divid = area_km_divisor / area_km_dividend
perimeter_divid_div = perimeter_km_dividend / perimeter_km_divisor
perimeter_div_divid = perimeter_km_divisor / perimeter_km_dividend
if area_divid_div > 1:
print(f"nArea of region #{dividend 1} is", area_divid_div*100 - 100, f"% larger than #{divisor 1}")
if perimeter_divid_div > 1:
print(f"Perimeter of region #{dividend 1} is", perimeter_divid_div*100 - 100, f"% larger than #{divisor 1}")
else:
print(f"Perimeter of region #{divisor 1} es un", perimeter_div_divid*100 - 100, f"% larger than #{dividend 1}")
else:
print(f"nArea of region #{divisor 1} is", (area_div_divid*100) - 100, f"% larger than #{dividend 1}")
if perimeter_divid_div > 1:
print(f"Perimeter of region #{dividend 1} is", perimeter_divid_div*100 - 100, f"% larger than #{divisor 1}")
else:
print(f"Perimeter of region #{divisor 1} is", perimeter_div_divid*100 - 100, f"% larger than #{dividend 1}")
if input('Do you want to evaluate more regions? [Y/N] ') in ['n', 'N', 'No', 'no', 'non']:
break
Я хотел бы проверить, перехватывают ли эти области, и какой процент в случае, если они это сделали(сначала мне нужно обновить значения, и именно этого я не знаю, как это сделать).
Я подумал об использовании полигонального объекта из пакета shapely:
from shapely.geometry import Polygon
Но чтобы определить вершину многоугольника, мне нужно сделать это, не зная, сколько их будет, и не записывая их сам, так как пользователь вводит каждую пару координат.
Я думаю, что это должно быть написано между следующими строками:
poly_area, poly_perimeter = geod.polygon_area_perimeter(lons, lats)
print(f"Área #{regions}:", (abs(float(poly_area))) / (1000000), "km^2")
print(f"Perimeter #{regions}:", (abs(float(poly_perimeter))) / (1000), "km")
if input('Enter more coordinates? [Y/N] ') in ['n', 'N', 'No', 'no', 'non']:
area_list.append(poly_area)
perimeter_list.append(poly_perimeter)
p1 = Polygon([lat lon])
break
if input('More regions? [Y/N] ') in ['n', 'N', 'No', 'no', 'non']:
break
Заранее большое вам спасибо!