1
1
// Boost.Geometry (aka GGL, Generic Geometry Library)
2
2
3
- // Copyright (c) 2023 Adam Wulkiewicz, Lodz, Poland.
3
+ // Copyright (c) 2023-2025 Adam Wulkiewicz, Lodz, Poland.
4
4
5
5
// Copyright (c) 2016-2022, Oracle and/or its affiliates.
6
6
// Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
@@ -273,7 +273,7 @@ class geographic_cross_track
273
273
pl_lat = res14.lat2 ;
274
274
}
275
275
276
- CT new_distance = inverse_distance_type::apply (lon3, lat3, res14.lon2 , res14.lat2 ,
276
+ CT const new_distance = inverse_distance_type::apply (lon3, lat3, res14.lon2 , res14.lat2 ,
277
277
spheroid).distance ;
278
278
279
279
dist_improve = new_distance != result.distance ;
@@ -346,8 +346,8 @@ class geographic_cross_track
346
346
// g4 is the angle between segment (p1,p2) and segment (p3,p4)
347
347
// that meet on p4 (GEO)
348
348
349
- CT a4 = inverse_dist_azimuth_type::apply (res14.lon2 , res14.lat2 ,
350
- lon2, lat2, spheroid).azimuth ;
349
+ CT const a4 = inverse_dist_azimuth_type::apply (res14.lon2 , res14.lat2 ,
350
+ lon2, lat2, spheroid).azimuth ;
351
351
res34 = inverse_distance_azimuth_quantities_type::apply (res14.lon2 , res14.lat2 ,
352
352
lon3, lat3, spheroid);
353
353
g4 = res34.azimuth - a4;
@@ -527,8 +527,8 @@ class geographic_cross_track
527
527
CT lat1 = la1;
528
528
CT lon2 = lo2;
529
529
CT lat2 = la2;
530
- CT lon3 = lo3;
531
- CT lat3 = la3;
530
+ CT const lon3 = lo3;
531
+ CT const lat3 = la3;
532
532
533
533
if (lon1 > lon2)
534
534
{
@@ -549,14 +549,14 @@ class geographic_cross_track
549
549
// segment on equator
550
550
// Note: antipodal points on equator does not define segment on equator
551
551
// but pass by the pole
552
- CT diff = geometry::math::longitude_distance_signed<geometry::radian>(lon1, lon2);
552
+ CT const diff = geometry::math::longitude_distance_signed<geometry::radian>(lon1, lon2);
553
553
554
554
using meridian_inverse = typename formula::meridian_inverse<CT>;
555
555
556
- bool meridian_not_crossing_pole =
556
+ bool const meridian_not_crossing_pole =
557
557
meridian_inverse::meridian_not_crossing_pole (lat1, lat2, diff);
558
558
559
- bool meridian_crossing_pole =
559
+ bool const meridian_crossing_pole =
560
560
meridian_inverse::meridian_crossing_pole (diff);
561
561
562
562
if (math::equals (lat1, c0) && math::equals (lat2, c0)
@@ -596,18 +596,18 @@ class geographic_cross_track
596
596
#ifdef BOOST_GEOMETRY_DEBUG_GEOGRAPHIC_CROSS_TRACK
597
597
std::cout << " Meridian segment crossing pole" << std::endl;
598
598
#endif
599
- CT sign_non_zero = lat3 >= c0 ? 1 : -1 ;
599
+ CT const sign_non_zero = lat3 >= c0 ? 1 : -1 ;
600
600
601
- auto res13 = apply (lon1, lat1, lon1, half_pi * sign_non_zero, lon3, lat3, spheroid);
601
+ auto const res13 = apply (lon1, lat1, lon1, half_pi * sign_non_zero, lon3, lat3, spheroid);
602
602
603
- auto res23 = apply (lon2, lat2, lon2, half_pi * sign_non_zero, lon3, lat3, spheroid);
603
+ auto const res23 = apply (lon2, lat2, lon2, half_pi * sign_non_zero, lon3, lat3, spheroid);
604
604
605
605
return (res13.distance ) < (res23.distance ) ? res13 : res23;
606
606
}
607
607
608
- auto res12 = inverse_dist_azimuth_reverse_type::apply (lon1, lat1, lon2, lat2, spheroid);
608
+ auto const res12 = inverse_dist_azimuth_reverse_type::apply (lon1, lat1, lon2, lat2, spheroid);
609
609
610
- auto res13 = inverse_dist_azimuth_type::apply (lon1, lat1, lon3, lat3, spheroid);
610
+ auto const res13 = inverse_dist_azimuth_type::apply (lon1, lat1, lon3, lat3, spheroid);
611
611
612
612
if (geometry::math::equals (res12.distance , c0))
613
613
{
@@ -616,14 +616,14 @@ class geographic_cross_track
616
616
std::cout << " distance between points="
617
617
<< res13.distance << std::endl;
618
618
#endif
619
- auto res = meridian_inverse::apply (lon1, lat1, lon3, lat3, spheroid);
619
+ auto const res = meridian_inverse::apply (lon1, lat1, lon3, lat3, spheroid);
620
620
621
621
return non_iterative_case (lon3, lat3, lon1, lat2,
622
622
res.meridian ? res.distance : res13.distance );
623
623
}
624
624
625
625
// Compute a12 (GEO)
626
- CT a312 = res13.azimuth - res12.azimuth ;
626
+ CT const a312 = res13.azimuth - res12.azimuth ;
627
627
628
628
// TODO: meridian case optimization
629
629
if (geometry::math::equals (a312, c0) && meridian_not_crossing_pole)
@@ -640,7 +640,7 @@ class geographic_cross_track
640
640
}
641
641
}
642
642
643
- CT projection1 = cos ( a312 ) * res13.distance / res12.distance ;
643
+ CT const projection1 = cos ( a312 ) * res13.distance / res12.distance ;
644
644
645
645
#ifdef BOOST_GEOMETRY_DEBUG_GEOGRAPHIC_CROSS_TRACK
646
646
std::cout << " a1=" << res12.azimuth * math::r2d<CT>() << std::endl;
@@ -661,10 +661,10 @@ class geographic_cross_track
661
661
return non_iterative_case (lon3, lat3, lon1, lat1, spheroid);
662
662
}
663
663
664
- auto res23 = inverse_dist_azimuth_type::apply (lon2, lat2, lon3, lat3, spheroid);
664
+ auto const res23 = inverse_dist_azimuth_type::apply (lon2, lat2, lon3, lat3, spheroid);
665
665
666
- CT a321 = res23.azimuth - res12.reverse_azimuth + pi;
667
- CT projection2 = cos ( a321 ) * res23.distance / res12.distance ;
666
+ CT const a321 = res23.azimuth - res12.reverse_azimuth + pi;
667
+ CT const projection2 = cos ( a321 ) * res23.distance / res12.distance ;
668
668
669
669
#ifdef BOOST_GEOMETRY_DEBUG_GEOGRAPHIC_CROSS_TRACK
670
670
std::cout << " a21=" << res12.reverse_azimuth * math::r2d<CT>()
@@ -693,25 +693,28 @@ class geographic_cross_track
693
693
geometry::cs::spherical_equatorial<geometry::radian>
694
694
>;
695
695
696
- point p1 = point (lon1, lat1);
697
- point p2 = point (lon2, lat2);
698
- point p3 = point (lon3, lat3);
696
+ point const p1 (lon1, lat1);
697
+ point const p2 (lon2, lat2);
698
+ point const p3 (lon3, lat3);
699
699
700
- geometry::strategy::distance::cross_track <CT> cross_track (earth_radius) ;
701
- CT s34_sph = cross_track. apply (p3, p1, p2) ;
700
+ using haversine_t = geometry::strategy::distance::haversine <CT>;
701
+ using cross_track_t = geometry::strategy::distance:: cross_track< void , haversine_t > ;
702
702
703
- geometry::strategy::distance::haversine<CT> str (earth_radius);
704
- CT s13_sph = str.apply (p1, p3);
703
+ cross_track_t const cross_track (earth_radius);
704
+ CT const s34_sph = cross_track.apply (p3, p1, p2);
705
+
706
+ haversine_t const str (earth_radius);
707
+ CT const s13_sph = str.apply (p1, p3);
705
708
706
709
// CT s14 = acos( cos(s13/earth_radius) / cos(s34/earth_radius) ) * earth_radius;
707
- CT cos_frac = cos (s13_sph / earth_radius) / cos (s34_sph / earth_radius);
708
- CT s14_sph = cos_frac >= 1 ? CT (0 )
710
+ CT const cos_frac = cos (s13_sph / earth_radius) / cos (s34_sph / earth_radius);
711
+ CT const s14_sph = cos_frac >= 1 ? CT (0 )
709
712
: cos_frac <= -1 ? pi * earth_radius
710
713
: acos (cos_frac) * earth_radius;
711
714
712
715
CT const a12_sph = geometry::formula::spherical_azimuth<>(lon1, lat1, lon2, lat2);
713
716
714
- auto res = geometry::formula::spherical_direct<true , false >(lon1, lat1,
717
+ auto const res = geometry::formula::spherical_direct<true , false >(lon1, lat1,
715
718
s14_sph, a12_sph, srs::sphere<CT>(earth_radius));
716
719
717
720
// this is what postgis (version 2.5) returns
@@ -734,7 +737,7 @@ class geographic_cross_track
734
737
}
735
738
else
736
739
{
737
- CT s14_start = geometry::strategy::distance::geographic
740
+ CT const s14_start = geometry::strategy::distance::geographic
738
741
<
739
742
FormulaPolicy,
740
743
Spheroid,
0 commit comments