Google Map API的输出返回相同的结果

时间:2018-12-14 01:09:33

标签: javascript node.js

const request = require('request');


var geocodeAddress = (address) => {
  var encodedAddress = encodeURIComponent(address);

  request({
    url: `http://www.mapquestapi.com/geocoding/v1/address?key=APIKey&location=${encodedAddress}`,
    json: true
  }, (error, response, body) => {
    if (error) {
      console.log('Unable to connect to Google servers');
    } else if (body.results[0].locations[0].postalCode.length < 5) {
      console.log('Not a valid length of zip code.')
    } else if (body.results[0].locations[0].postalCode < 501) {
      console.log('That zip code does not exist')
    } else {
      console.log('Lat: ' + body.results[0].locations[0].latLng[0])
      console.log('Lng: ' + body.results[0].locations[0].latLng[1])
    }

  });


};
module.exports.geocodeAddress = geocodeAddress;

另一个文件是我用来执行应用程序的文件。

const yargs = require('yargs');
const geocode = require('./geocode/geocode');
const argv = yargs
  .options({
    a:{
      demand: true,
      alias: 'Address',
      describe: 'Address to fetch weather for',
      string: true
    }
  })
  .help()
  .argv;

  geocode.geocodeAddress(argv.address)

当我在终端中运行第二个时,它表示邮政编码不够长。我将其取出,它吐出下一个错误,我将其取出以及下一个错误。不管我做什么都行不通。在我将其放入函数之前,这段代码已经工作了几分钟。我只是一个初学者,还是Stackoverflow的新手,我一直在不断尝试解决此问题,但是我找不到解决方法,所以我在这里。 LMK如果我的格式有问题,我是该论坛的新手,最重要的是,如果您在代码中看到任何问题,LMK!预先感谢

1 个答案:

答案 0 :(得分:2)

看起来您的代码很好,这就是您所期望的数据不正确的原因。

简单的console.log将向您显示大多数返回的位置均不包含邮政编码。

例如,将所有else if替换为仅包含else的{​​{1}}块。我试了几次;字符串console.dir(body.results[0].locations[0])返回的内容如下:

Houston

请注意,{ street: '', adminArea6: '', adminArea6Type: 'Neighborhood', adminArea5: 'Houston', adminArea5Type: 'City', adminArea4: 'Harris County', adminArea4Type: 'County', adminArea3: 'TX', adminArea3Type: 'State', adminArea1: 'US', adminArea1Type: 'Country', postalCode: '', geocodeQualityCode: 'A5XAX', geocodeQuality: 'CITY', dragPoint: false, sideOfStreet: 'N', linkId: '282040105', unknownInput: '', type: 's', latLng: { lat: 29.760803, lng: -95.369506 }, displayLatLng: { lat: 29.760803, lng: -95.369506 }, mapUrl: <redacted> } 是一个空字符串,将无法满足您所有代码的期望。

此外,共享您的API密钥通常不是一个好主意!请确保您更改自己的权限或设置权限,以限制请求可以来自哪个域。


现在,如果您仅对带有 邮政编码的位置感兴趣,请过滤掉所有其他邮政编码:

postalCode

还值得注意的是,您的代码可能确实适用于特定的字符串。例如,传入let locations = body.results[0].locations; let locationsOfInterest = locations.filter(location => (location.postalCode !== '')); 会返回一个带有有效邮政编码的地址。