首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >地理坐标操作

地理坐标操作
EN

Stack Overflow用户
提问于 2013-12-26 22:40:52
回答 2查看 121关注 0票数 1

正如Esteban A. Maringolo所问:

有没有人实现了基本的方法/类来计算两点之间的距离(lat,long)和类似的操作?

EN

回答 2

Stack Overflow用户

发布于 2013-12-26 22:40:52

Esteban A. Maringolo找到的解决方案:

代码语言:javascript
复制
distanceFromLat: lat1 long: long1 toLat: lat2 long: long2
"Answer the distance in meters between two coordinates in float number representation."

  | lat1Rad  lon1Rad lat2Rad lon2Rad earthRadius dLat dLon dLatSinSqrd dLonSinSqrd cosLatLat a c distance |
  lat1Rad := lat1 degreesToRadians.
  lon1Rad := long1  degreesToRadians.
  lat2Rad := lat2 degreesToRadians.
  lon2Rad := long2 degreesToRadians.
  earthRadius := 6371.00.
  dLat := lat2Rad - lat1Rad.
  dLon := lon2Rad - lon1Rad.
  dLatSinSqrd := (dLat / 2) sin squared.
  dLonSinSqrd := (dLon / 2) sin squared.
  cosLatLat := lat2Rad cos * lat1Rad cos.
  a := dLatSinSqrd + (cosLatLat * dLonSinSqrd).
  c := 2 * a sqrt arcSin.
  distance := earthRadius * c.
  ^ distance
票数 1
EN

Stack Overflow用户

发布于 2013-12-26 22:43:18

Sven Van Caekenberghe提出的更简单的解决方案:

这是在Pharo,JavaScript,Common Lisp中使用多年的公式:

代码语言:javascript
复制
distanceBetween: firstPosition and: secondPosition
 "T3GeoTools distanceBetween: 5.33732@50.926 and: 5.49705@50.82733"

 | c |
 c := (firstPosition y degreeSin * secondPosition y degreeSin)
      + (firstPosition y degreeCos * secondPosition y degreeCos
         * (secondPosition x degreesToRadians - firstPosition x degreesToRadians) cos).
 c := c >= 0 ifTrue: [ 1 min: c ] ifFalse: [ -1 max: c ].
 ^ c arcCos * 6371000

这是在WGS84坐标之间。使用此页面作为参考:http://www.movable-type.co.uk/scripts/latlong.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20786646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档