从纬度/经度获得最近的大学

时间:2018-04-16 22:00:38

标签: javascript angular geolocation

所以使用Angular2和Ionic我会像这样得到用户lat / long:

this.geolocation.getCurrentPosition({enableHighAccuracy: true}).then((resp) => {
     this.userLocation.lat = resp.coords.latitude;
     this.userLocation.lng = resp.coords.longitude;
})

我也知道Google的geocode api从lat / long(Connect to Azure AD-secured APIs in SharePoint Framework solutions

返回街道/城市/等

但是我喜欢要做的事情就是让他们离他们的纬度/经度最近的大学用户。我做了一些谷歌搜索,我似乎无法找到提供它的api。

现在,我正在做的是,我有一个数据库,我存储大学的lat / long及其名称:

http://maps.googleapis.com/maps/api/geocode/json?latlng=35.91,-79.05&sensor=true

我运行一个脚本来检查用户是否距离unversitys lat / long 7英里:

  var rad = function(x) {
    return x * Math.PI / 180;
  };

  var getDistance = function(p1, p2) {
    var R = 6378137; // Earth’s mean radius in meter
    var dLat = rad(p2.lat - p1.lat);
    var dLong = rad(p2.lng - p1.lng);
    var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
      Math.cos(rad(p1.lat)) * Math.cos(rad(p2.lat)) *
      Math.sin(dLong / 2) * Math.sin(dLong / 2);
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
    var d = R * c;
    return d; // returns the distance in meter
  };

  getDistance(this.userLocation, databaseLocation); // returns distance between 2 points in meters

如果它返回的时间少于7英里,我会显示大学的名称..

所以,这很有用,但是我觉得它非常低效,因为我必须手动输入大学的纬度/经度和名称,然后我运行一个循环来检查每所大学,直到它找到最近...

我喜欢的只是一个基于lat / long返回最近的大学的API ......但我想我可以用php创建那个api,只需在服务器上进行这些计算..

任何想法/建议?谢谢!

0 个答案:

没有答案