【发布时间】:2014-03-28 19:32:48
【问题描述】:
我正在尝试使用地理定位来确定用户是否在城市附近(半径 50 英里内)。
这就是我所拥有的。这是一个检查我是否在数组中的任何城市的脚本。 我在纽约市一系列城市中的一个城市,但当我看到功能正在发生时,它正在评估其他人。
这是脚本:
if('geolocation' in navigator){
var lat, lon;
var SFlocations = ['richmond', 'berkely', 'daly city', 'oakland', 'san francisco'];
var NYlocations = ['new york', 'new york city', 'new jersey', 'newark', 'kendall park', 'fraklin park', 'new brunswick', 'east brunswick', 'edison', 'manhattan', 'queen', 'staten island', 'bronx'];
navigator.geolocation.getCurrentPosition(function(pos){
lat = pos.coords.latitude;
lon = pos.coords.longitude;
$.getJSON('http://maps.googleapis.com/maps/api/geocode/json?latlng='+lat+','+lon+'&sensor=true').done(function(res){
var results = res.results;
var address = results[2].address_components;
var city = address[1].long_name.toLowerCase();
if(jQuery.inArray(city, SFlocations) !== -1) $('#input').css('backgroundImage', 'url(/cityBackground/SanFrancisco/day.png)').css('backgroundPosition', 'bottom left').css('backgroundSize', 'cover');
else if(jQuery.inArray(city, NYlocations) !== -1) $('#input').css('backgroundImage', 'url(/cityBackgrounds/NYC/night.png)');
else setBGPerTime();
});
});
}
else alert("don't supports geolocation");
这是一个 JS Fiddle:http://jsfiddle.net/s9VrT/
这似乎合乎逻辑,我无法弄清楚为什么它的评估结果为假。
我将不胜感激任何和所有的帮助!
编辑:所以看来我抓住了结果数组的错误部分。这座城市似乎位于此处:results[0][address_components][2]。对于从不同位置进行测试的其他人来说,这是真的吗?但是当我尝试抓取数组的那一部分时,它说 address_components 没有定义。这是一个小提琴:http://jsfiddle.net/s9VrT/4/
编辑:好的,我用这个var results = res.results; var city = results[0].address_components[2].long_name.toLowerCase(); 得到了这座城市。但是,我认为这不是正确的方法。这将获取该位置的城市,但我认为它不适用于每个位置。 无论用户在什么位置,我如何才能获得城市?
【问题讨论】:
-
那么谷歌到底返回了什么?
console.log(city) -
@epascarello 米德尔塞克斯县。这是县的名称,而不是城市的名称。
-
不要对这些数组索引进行硬编码。您需要查找具有正确"type" 的数组元素
-
@geocodezip 好的,邮政编码听起来不错。那我如何从结果数组中得到呢?
标签: javascript jquery html google-maps geolocation