apollo-ng / dspace-app-apollong

DSpace aims to enable people to find, collect, edit, structure and share any kind of information in a real-time, massive-collaboration, augmented-reality-environment (like wikipedia), based on a very common ground: The map of the area, where people actually are, around their Geolocation.
https://apollo.open-resource.org/lab:dspace
18 stars 14 forks source link

Distance Calculcation #50

Closed chron0 closed 11 years ago

chron0 commented 11 years ago

One of the basic features is still missing: The Distance Calculator. As long as no geolocation is set or known, the calculator's source should be mapCenter. As soon as geolocation is known, the distance should be calculated based on the user's geolocation. I already have the math/mockup code implementation to calculate the distance between two lat/lon pairs, the only question remaining is: where to put it?

chron0 commented 11 years ago
function distance(lat1, lon1, lat2, lon2, unit)
{
  var radlat1 = Math.PI * lat1/180
  var radlat2 = Math.PI * lat2/180
  var radlon1 = Math.PI * lon1/180
  var radlon2 = Math.PI * lon2/180
  var theta = lon1-lon2
  var radtheta = Math.PI * theta/180
  var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
  dist = Math.acos(dist)
  dist = dist * 180/Math.PI
  dist = dist * 60 * 1.1515
  if (unit=="K") { dist = dist * 1.609344 }
  if (unit=="N") { dist = dist * 0.8684 }
  var result = [];

  if (dist < 1 && unit == 'K') {
    result[0]=Math.round(dist * 1000);
    result[1]="m";
  } else {
    result[0]=Math.round(dist);
    result[1]="km";
  }
  return result;
}
elf-pavlik commented 11 years ago

I would put such logic into a Feature and then use instances of feature to tell distance between each other

featureA.distanceTo(featureB)

for calculations we can use

MM.Point.distance(p1, p2);
MM.Location.distance(l1, l2, r)

as explained in https://github.com/modestmaps/modestmaps-js/wiki/Point%2C-Location%2C-and-Coordinate