@@ -806,3 +806,114 @@ SRID(GEOMETRYFROMTEXT(' MULTIPOINT(8 4,5 0,7 8,6 9,3 4,7 3,5 5) '))));
806
806
ASTEXT(ST_BUFFER(POLYGONFROMTEXT(' POLYGON((9 9,5 2,4 5,9 9))'),
807
807
SRID(GEOMETRYFROMTEXT(' MULTIPOINT(8 4,5 0,7 8,6 9,3 4,7 3,5 5) '))))
808
808
POLYGON((9 9,5 2,4 5,9 9))
809
+ #
810
+ # MDEV-13467 Feature request: Support for ST_Distance_Sphere()
811
+ #
812
+ SELECT ST_DISTANCE_SPHERE();
813
+ ERROR 42000: Incorrect parameter count in the call to native function 'ST_DISTANCE_SPHERE'
814
+ SELECT ST_DISTANCE_SPHERE(NULL);
815
+ ERROR 42000: Incorrect parameter count in the call to native function 'ST_DISTANCE_SPHERE'
816
+ SELECT ST_DISTANCE_SPHERE(NULL, NULL);
817
+ ST_DISTANCE_SPHERE(NULL, NULL)
818
+ NULL
819
+ SELECT ST_DISTANCE_SPHERE(NULL, NULL, 3);
820
+ ST_DISTANCE_SPHERE(NULL, NULL, 3)
821
+ NULL
822
+ SELECT ST_DISTANCE_SPHERE(NULL, 1, 3);
823
+ ST_DISTANCE_SPHERE(NULL, 1, 3)
824
+ NULL
825
+ SELECT ST_DISTANCE_SPHERE(1, NULL, 3);
826
+ ST_DISTANCE_SPHERE(1, NULL, 3)
827
+ NULL
828
+ SELECT ST_DISTANCE_SPHERE(1, 1);
829
+ ERROR 22023: Invalid GIS data provided to function ST_Distance_Sphere.
830
+ SELECT ST_DISTANCE_SPHERE(1, 1, 3);
831
+ ERROR 22023: Invalid GIS data provided to function ST_Distance_Sphere.
832
+ SELECT ST_DISTANCE_SPHERE(1, 1, NULL);
833
+ ST_DISTANCE_SPHERE(1, 1, NULL)
834
+ NULL
835
+ SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(1 0)'), ST_GEOMFROMTEXT('LINESTRING(0 0, 1 1)'));
836
+ ERROR HY000: Internal error: st_distance_sphere
837
+ # Test Points and radius
838
+ SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(1 1)'));
839
+ ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(1 1)'))
840
+ 157249.0357231545
841
+ SELECT TRUNCATE(ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(-1 -1)'), ST_GEOMFROMTEXT('POINT(-2 -2)')), 10);
842
+ TRUNCATE(ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(-1 -1)'), ST_GEOMFROMTEXT('POINT(-2 -2)')), 10)
843
+ 157225.0865419108
844
+ SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(1 1)'), 1);
845
+ ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(1 1)'), 1)
846
+ 0.024682056391766436
847
+ SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(1 1)'), 0);
848
+ ERROR HY000: Internal error: Radius must be greater than zero.
849
+ SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('POINT(1 1)'), -1);
850
+ ERROR HY000: Internal error: Radius must be greater than zero.
851
+ # Test longitude/lattitude
852
+ SELECT TRUNCATE(ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 1)'), ST_GEOMFROMTEXT('POINT(1 2)')), 10);
853
+ TRUNCATE(ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 1)'), ST_GEOMFROMTEXT('POINT(1 2)')), 10)
854
+ 157225.0865419108
855
+ SELECT TRUNCATE(ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 1)'), ST_GEOMFROMTEXT('POINT(2 1)')), 10);
856
+ TRUNCATE(ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 1)'), ST_GEOMFROMTEXT('POINT(2 1)')), 10)
857
+ 222355.4901806686
858
+ SELECT TRUNCATE(ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(1 0)'), ST_GEOMFROMTEXT('POINT(1 2)')), 10);
859
+ TRUNCATE(ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(1 0)'), ST_GEOMFROMTEXT('POINT(1 2)')), 10)
860
+ 222389.3645969269
861
+ SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(1 0)'), ST_GEOMFROMTEXT('POINT(2 1)'));
862
+ ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(1 0)'), ST_GEOMFROMTEXT('POINT(2 1)'))
863
+ 157249.0357231545
864
+ # Test Points - Multipoints
865
+ SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(1 1)'));
866
+ ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(1 1)'))
867
+ 157249.0357231545
868
+ SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(1 1)'), ST_GEOMFROMTEXT('POINT(0 0)'));
869
+ ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(1 1)'), ST_GEOMFROMTEXT('POINT(0 0)'))
870
+ 157249.0357231545
871
+ SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(1 1,2 2)'));
872
+ ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(1 1,2 2)'))
873
+ 157249.0357231545
874
+ SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(2 2,1 1)'));
875
+ ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(2 2,1 1)'))
876
+ 157249.0357231545
877
+ SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(1 1,2 2)'), 1);
878
+ ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(1 1,2 2)'), 1)
879
+ 0.024682056391766436
880
+ SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(2 2,1 1)'), 1);
881
+ ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(2 2,1 1)'), 1)
882
+ 0.024682056391766436
883
+ SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(2 2, 1 1, 3 4)'), 1);
884
+ ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(2 2, 1 1, 3 4)'), 1)
885
+ 0.024682056391766436
886
+ SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(2 2, 1 1,5 6)'), 1);
887
+ ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('POINT(0 0)'), ST_GEOMFROMTEXT('MULTIPOINT(2 2, 1 1,5 6)'), 1)
888
+ 0.024682056391766436
889
+ # Test Multipoints - Multipoints
890
+ SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(3 4,8 9 )'), ST_GEOMFROMTEXT('MULTIPOINT(3 4,8 9 )'));
891
+ ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(3 4,8 9 )'), ST_GEOMFROMTEXT('MULTIPOINT(3 4,8 9 )'))
892
+ 0
893
+ SELECT TRUNCATE(ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(1 2,1 1 )'), ST_GEOMFROMTEXT('MULTIPOINT(3 4,8 9 )')), 10);
894
+ TRUNCATE(ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(1 2,1 1 )'), ST_GEOMFROMTEXT('MULTIPOINT(3 4,8 9 )')), 10)
895
+ 314282.5644496733
896
+ SELECT TRUNCATE(ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(1 2,1 1 )'), ST_GEOMFROMTEXT('MULTIPOINT(8 9,3 4 )')), 10);
897
+ TRUNCATE(ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(1 2,1 1 )'), ST_GEOMFROMTEXT('MULTIPOINT(8 9,3 4 )')), 10)
898
+ 314282.5644496733
899
+ SELECT TRUNCATE(ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(1 2,1 1 )'), ST_GEOMFROMTEXT('MULTIPOINT(8 9,3 4 )'),1), 17);
900
+ TRUNCATE(ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(1 2,1 1 )'), ST_GEOMFROMTEXT('MULTIPOINT(8 9,3 4 )'),1), 17)
901
+ 0.04933028646581131
902
+ SELECT ST_DISTANCE_SPHERE(ST_GEOMFROMTEXT('MULTIPOINT(1 2,1 1 )'), ST_GEOMFROMTEXT('MULTIPOINT(8 9,3 4 )'),0);
903
+ ERROR HY000: Internal error: Radius must be greater than zero.
904
+ set @pt1 = ST_GeomFromText('POINT(190 -30)');
905
+ set @pt2 = ST_GeomFromText('POINT(-30 50)');
906
+ SELECT ST_Distance_Sphere(@pt1, @pt2);
907
+ ERROR HY000: Out of range error: Longitude should be [-180,180] in function ST_Distance_Sphere.
908
+ set @pt1 = ST_GeomFromText('POINT(135 -30)');
909
+ set @pt2 = ST_GeomFromText('POINT(-30 91)');
910
+ SELECT ST_Distance_Sphere(@pt1, @pt2);
911
+ ERROR HY000: Out of range error: Latitude should be [-90,90] in function ST_Distance_Sphere.
912
+ set @zenica = ST_GeomFromText('POINT(17.907743 44.203438)');
913
+ set @sarajevo = ST_GeomFromText('POINT(18.413076 43.856258)');
914
+ SELECT TRUNCATE(ST_Distance_Sphere(@zenica, @sarajevo), 10);
915
+ TRUNCATE(ST_Distance_Sphere(@zenica, @sarajevo), 10)
916
+ 55878.5933759170
917
+ SELECT TRUNCATE(ST_Distance_Sphere(@sarajevo, @zenica), 10);
918
+ TRUNCATE(ST_Distance_Sphere(@sarajevo, @zenica), 10)
919
+ 55878.5933759170
0 commit comments