使用geocoder gem查找经度和纬度附近的学校附近的学校

时间:2019-03-05 19:48:35

标签: ruby-on-rails google-maps rails-geocoder

我正在使用地理编码器rails gem。我想从某个位置找到银行,学校,酒店附近。

 location = Geocoder.search([48.856614, 2.3522219])

从上面我可以找到位置,但不能到达重要的地方。

我如何在“位置”对象上使用地理编码器的近距离方法,并找到诸如酒店,学校和银行等附近的地方?

有帮助吗?

谢谢

1 个答案:

答案 0 :(得分:0)

您在Geocoder宝石中描述的没有过滤器搜索。您可以在数据库中获取最近的10、20、50个其他地理编码对象

因此,要使其像您所描述的那样起作用,您需要对每个医院,学校,银行等进行地理编码并将其存储在表格中,然后然后调用nearbys你的观点。

即。对您所服务的位置内500公里之内的每个银行清单进行大范围的地理编码,并对照该清单进行检查。

这种方法很快就会过时并且失效。您需要的是Google Places API。他们有一个JS库,您可以利用它获取结果。

[Google Places JS API][1]
  

文本搜索请求Google地方信息文本搜索服务是一种网络   服务,该服务基于以下内容返回有关一组地点的信息:   字符串-例如“纽约披萨”或“渥太华附近的鞋店”。   该服务以匹配文本字符串的位置列表作为响应   以及已设置的任何位置偏差。搜索响应将   包括地点清单。您可以发送以下地点详情请求   有关响应中任何地方的更多信息。

我广泛使用了google api,并且发现它非常易于使用。只需调用API即可获取一系列结果,例如“餐厅”。下面的示例直接从Google Developer页面获取,并将绘制他们知道的Pyrmont地区的每家餐厅。 callback方法中的' results '将是可与JS一起使用的JSON对象;

var map;
var service;
var infowindow;

function initialize() {
  var pyrmont = new google.maps.LatLng(-33.8665433,151.1956316);

  map = new google.maps.Map(document.getElementById('map'), {
      center: pyrmont,
      zoom: 15
    });

  var request = {
    location: pyrmont,
    radius: '500',
    query: 'restaurant'
  };

  service = new google.maps.places.PlacesService(map);
  service.textSearch(request, callback);
}

function callback(results, status) {
  if (status == google.maps.places.PlacesServiceStatus.OK) {
    for (var i = 0; i < results.length; i++) {
      var place = results[i];
      createMarker(results[i]);
    }
  }
}