Добро пожаловать в stackoverflow. Проверьте значения вашей функции, мне кажется, красная линия должна хорошо заканчиваться в круге (а не в круге).
Ваша проблема в том, что радиус, который вы используете для расчета угла долготы, изменяется в зависимости от широты. Увеличивая угол широты, вы определяете все меньшие и меньшие круги постоянной широты. Радиус круга широты R * cos (широта). Где R - радиус Земли. Измените pointLng
на следующее:
let pointLng = lng + (radius / Double(earthRadius * cos(lat))) * cos(t)
Стоит также упомянуть, что Земля не является сферой, поэтому вы получите ошибку с этим расчетом, которая ухудшится вблизи полюсов. Чтобы сделать это точно, вам нужно преобразовать в ECEF координаты, чтобы получить точные значения радиуса, и снова вернуться к WGS84 (lat, lng).