golang / geo

S2 geometry library in Go
Apache License 2.0
1.69k stars 182 forks source link

How to count distance between two point? #63

Closed sayliu closed 4 years ago

sayliu commented 4 years ago

After read the document, I had not found the function which count the distance between two point. Can some one tell me? Thanks

dsymonds commented 4 years ago

You could convert the s2.Point values to s2.LatLng values, then use the Distance method.

sayliu commented 4 years ago

hi @dsymonds , the LatLng's comment says Distance returns the angle between two LatLngs. What I need is the distance between two points, which units are meters or kilometers

(EDIT) Maybe I can use angle.Degrees()*40075/360 to Calculate distance, the angle is the result of Distance method. But I still want to use the available function in this repo.

jasonpfox commented 4 years ago

@sayliu This repo is based on a unit sphere, you have to convert the angle distance to meters / kilometers by multiplying by Earth radius.

There is a native Distance function both for the s2.Point and s2.LatLng functions, both of which returns distance as an s1.Angle.

Also be wary that depending on your application, required precision, and distances involved the spherical approximation can break down leading to distance errors when applied to the Earth's surface. This happens much sooner than you would expect.

At least for my applications at mid-latitudes, the raw s2 distance is only sufficiently accurate up ~10 km before we need a full geodesic solution to compute accurate ranges.

dsymonds commented 4 years ago

Yep, that's right. When you have the s1.Angle, cast it to float64 and multiply it by 6371.01 (e.g. see s2_test.go for the inverse operation). That's a widely used approximation that might be sufficient for your use case, but this library does not provide official conversions.