我正在尝试使用node-geocoder获得纬度和经度。 我已经正确配置了所有内容。我已经有了API密钥以及我所需要的一切。
我第一次获得代码段中所示的位置(创建要插入数据库的对象时)
geocoder.geocode(req.body.location, function (err, data) {
//i have some more variables declared here but those do not matter
var lat = data.latitude;
var lng = data.longitude;
var location = data.formattedAddress;
var newPost = {name: name, image: image, description: desc, author:author, location: location, lat: lat, lng: lng};
到目前为止,一切都很好。但是,当我尝试再次使用该位置时,我相信某些功能可以做的完全相同,data.latitude
或data.formattedAddress
之类的属性将返回未定义的值。
我尝试更改一些变量名称,以避免可能的名称冲突。没有可能的碰撞。
var NodeGeocoder = require('node-geocoder');
//settings
var options={
provider:"google",
httpAdapter: "https",
apiKey:"..."
};
var geocoder=NodeGeocoder(options);
var geocoderUpdate=NodeGeocoder(options);
//...
//WHEN CREATING(IT WORKS)
geocoder.geocode(req.body.location, function (err, data) {
//i have some more variables declared here but those do not matter
var lat = data.latitude;
var lng = data.longitude;
var location = data.formattedAddress;
var newPost = {name: name, image: image, description: desc, author:author, location: location, lat: lat, lng: lng};
//WHEN TRYING TO UPDATE (DOESN'T WORK)
geocoderUpdate.geocode(req.body.location, function (err, dataUpdate) {
var latUpdate = dataUpdate.latitude;
var lngUpdate = dataUpdate.longitude;
var locationUpdate = dataUpdate.formattedAddress;
var newData = {name: req.body.name, image: req.body.image, description: req.body.description, location: locationUpdate, lat: latUpdate, lng: lngUpdate};
console.log(dataUpdate)
返回整个对象,这很好。因此,当我尝试执行console.log(dataUpdate.longitude)
时,我得到的是不确定的而不是属性的数值,这是非常意外的。
答案 0 :(得分:0)
我没有注意到它返回一个数组,从方括号中可以看出。
那讲得通。我不得不打电话给data[0].longitude
而不是data.longitude
。
答案 1 :(得分:-1)
似乎我忘记了创建对象时必须具有的位置值。 尽管如此,从对象提取属性的问题仍然存在
我尝试了以下操作:
console.log(typeof(data))
返回了
object
console.log(data);
返回了整个对象:(我尝试将“里斯本”作为地址解析器的输入数据)
[ { formattedAddress: 'Lisbon, Portugal',
latitude: 38.7222524,
longitude: -9.1393366,
extra:
{ googlePlaceId: 'ChIJO_PkYRozGQ0R0DaQ5L3rAAQ',
confidence: 0.5,
premise: null,
subpremise: null,
neighborhood: 'Lisbon',
establishment: null },
administrativeLevels: { level1long: 'Lisbon', level1short: 'Lisbon' },
city: 'Lisbon',
country: 'Portugal',
countryCode: 'PT',
provider: 'google' } ]
和console.log(dataUpdate['longitude']);
返回了undefined
这是npm包中的节点地理编码器,配置为使用Google地图。