如何使用nodejs / javascript实现地理编码响应?

时间:2016-05-03 10:31:08

标签: javascript node.js google-maps-api-3

我是google map api中的新手。我正在尝试实施谷歌地图地理编码api Geocoding API on Google Developers

exports.FindByKeyWord = function (req, res, next) {

    var API_KEY = "SOMEDATA";
    var BASE_URL = "https://maps.googleapis.com/maps/api/geocode/json?address=";

    var address = "1600 Amphitheatre Parkway, Mountain View, CA";

    var url = BASE_URL + address + "&key=" + API_KEY;

    var map = new google.maps.Map();
    var geocoder = new google.maps.Geocoder();

    geocoder.geocode(url, function(results, status) {
        if (status === google.maps.GeocoderStatus.OK) {
            map.setCenter(results[0].geometry.location);
            var marker = new google.maps.Marker({
                map: map,
                position: results[0].geometry.location
            });
            res.json(marker);
        } else {
            alert('Geocode was not successful for the following reason: ' + status);
        }
    });
};

我想响应json格式,但是我的函数抛出错误

  

google未定义

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:6)

我认为您在Geocoding REST API和客户端JavaScript API之间感到困惑。您在此处使用后者,但这些设计是在浏览​​器中运行,而不是在服务器上运行,因此您可能会收到错误。

在这种情况下,使用REST API非常简单 - 您只需向您已在示例代码中创建的URL发出HTTP请求,然后将结果传递到您的服务器&#39的回应我建议您使用RequestSuperAgent这样的库来简化此操作。

这是一个(未经测试的)示例,使用请求:

// npm install request --save
var request = require("request");

exports.FindByKeyWord = function (req, res, next) {

    var API_KEY = "SOMEDATA";
    var BASE_URL = "https://maps.googleapis.com/maps/api/geocode/json?address=";

    var address = "1600 Amphitheatre Parkway, Mountain View, CA";

    var url = BASE_URL + address + "&key=" + API_KEY;

    request(url, function (error, response, body) {
        if (!error && response.statusCode == 200) {
            res.json(body);
        }
        else {
            // The request failed, handle it
        }
    });
};

实际上,您的服务器充当您的用户和Google API之间的中间人 - 这可以非常方便,因为这意味着您可以在发送请求之前修改请求以进行地理编码,并允许您执行缓存之类的操作结果(您每天只能在REST API上获得2,500个免费请求,因此如果您需要非常重要的流量,这非常重要!)。