Как определить широту и долготу прицела на уровне моря с возвышенной точки на сушеIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Как определить широту и долготу прицела на уровне моря с возвышенной точки на суше

Сообщение Anonymous »

Во-первых, я новичок в Swift, но последние 40 лет работаю системным инженером. Я свободно владею C, C++, Java и Python.
Я реализовал версию следующего решения на Python с помощью inverse_haversine(), но мне хотелось бы сделать ее более точной и, надеюсь, использовать некоторые из фреймворков CLLocation и любые встроенные или доступные библиотеки для расчета геодезических данных.
Итак, вот проблема, которую я пытаюсь решить с помощью Swift:
Дано:
  • Широта наблюдателя (1)
    < /li>
    Долгота наблюдателя (𝝄1)
  • Высота наблюдателя выше уровень моря (h)
  • Радиус Земли ( R)
И:
  • Пеленг от наблюдателя (O) к цели (T)
  • Угол, образованный прямой линией между наблюдателем (< em>O) и Цель (T) относительно касательной земной окружности в месте расположения наблюдателя (< em>O)
Вычислить:
  • Широту (𝝏2) и долготу (𝝄2) цели.
введите здесь описание изображения Иллюстрация проблемы
Как упоминалось выше, я написал программу на Python, которая выполняет большинство из этих действий. расчеты, однако вместо использования угла, образованного углом обзора наблюдателя вниз и касательной к сфере в месте расположения наблюдателя, я использую сетку бинокля, измеряющую количество милов между горизонтом и целевым объектом.
Я бы не хотел полагаться на сетку бинокля, а лучше использовать гироскоп в iPhone для определения вышеуказанного угла и использовать его в расчетах.
Для справки, вот написанный мной код Python:< /p>

Код: Выделить всё

  0:
print(f"XXXXX: {Distance(round(height_meters * 1000 / mils, 1), Unit.METERS)}, {Distance(round(height_miles * 1000 / mils, 1), Unit.MILES)}")
return Distance(round(height_meters * 1000 / mils, 1), Unit.METERS)
else:
print(f"YYYYY: {Distance(metricHorizonCoefficient * sqrt(height_meters), Unit.METERS)}, {Distance(englishHorizonCoefficient * sqrt(height_meters), Unit.MILES)}")
return Distance(metricHorizonCoefficient * sqrt(height_meters), Unit.METERS)

def getTargetLocation(observer: Location, reticle, b: Bearing):
d = reticleToDistance(observer, reticle)
print(f"{round(d.miles(), 2)} miles")
target = inverse_haversine(observer.latLonRad(), d.meters(), b.radians())
return Location(target[0], target[1], Height(0), Unit.RADIANS)

#===================================================================================#
#                                      DEBUG CODE                                   #
#===================================================================================#
#===================================================================================#
#                                    OUTPUT FILES                                   #
#===================================================================================#
directory                   = '/Users/mbi/Documents/Programming/Whale Locator/'
filenameBase                = 'Test Run - '
def dumpLatLongTable(observer: Location, b: Bearing):
if directory:
f = open(f"{directory}{filenameBase}{b.degrees()}.csv", "w")
else:
f = open(f"{filenameBase}{b.degrees()}.csv", "w")

f.write("Lattitude, Longitude\n")
for reticle in arange(0, 20.1, 0.1):
d = reticleToDistance(observer, reticle)
target = inverse_haversine(census.latLonRad(), d.meters(), b.radians())
l = Location(target[0], target[1], 0, Unit.RADIANS)
f.write(f"{l.latDeg()}, {l.lonDeg()}\n")
print(f"{round(reticle, 1):4},   {d.convertTo(Unit.MILES)},   {b},   {l.convertTo(Unit.DEGREES)}")
print()

def dumpLatLongTables(observer: Location):
for bearing in arange(0, 360, 15):
dumpLatLongTable(observer, Bearing(bearing, Unit.METERS))

def dumpReticleDistanceTable(observer):
for reticle in (0, 0.1, 0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8, 2, 2.4, 2.6, 3, 3.4, 4, 4.6, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20):
d = reticleToDistance(observer, reticle)
print(f"{round(reticle, 1):4}, {float(round(reticleToMils(reticle), 1)):10.6}, {d.miles():10.8}")

#
# Main Executable
#
if __name__ == "__main__":
dumpReticleDistanceTable(census)
dumpLatLongTable(census, Bearing(270, Unit.METERS))


Подробнее здесь: https://stackoverflow.com/questions/792 ... -from-a-ra
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»