【问题标题】:Determine if in or near a city确定是否在城市内或附近
【发布时间】:2014-03-28 01:49:06
【问题描述】:

如何确定用户是否在城市内或附近。附近是指 50 英里以内。

这对于 HTML5 地理位置是否可行,如果可以,我如何使用它以便它与 switch 语句一起使用。

或者既然它可以在 50 英里之内,我是否必须使用一系列 if、else if 和 else?

例如

switch(location){
    case 'San Francisco':

然后我可以运行一些 js。

如果我不知道从哪里开始,我将不胜感激。

【问题讨论】:

  • Geolocate.efem.nearCity("旧金山");
  • @QBM5 你能发布一个带有文档链接的答案吗?
  • @QBM5 它不工作。这里:jsfiddle.net/EfCkM

标签: javascript jquery html google-maps google-maps-api-3


【解决方案1】:

有不同的方法可以得到你想要的东西,有些比其他的更复杂,我会给你简单的,或者至少是我能想到的最简单的方法(甚至认为我花了一段时间来编写它:/ )。您可以拥有一个包含旧金山附近位置的数组,并获取用户当前所在城市的名称,然后与该数组进行比较。

if("geolocation" in navigator){
    var lat, lon
    var locations = ['richmond', 'berkeley', 'daly city', 'oakland', 'san francisco'];

    $('button').click(function(){
        navigator.geolocation.getCurrentPosition(function(pos){
            lat = pos.coords.latitude; // 37.789709 SF lat
            lon = pos.coords.longitude; // -122.445771 SF lon
            var geoAPI = 'http://maps.googleapis.com/maps/api/geocode/json?latlng='+lat+','+lon+'&sensor=true';
            $.getJSON(geoAPI).done(function(res){
                var results = res.results;
                var address = results[2].address_components;
                var city = address[1].long_name.toLowerCase();
                console.log(city);
                if(jQuery.inArray(city, locations) !== -1){
                    alert('You are in San Francisco or nearby');
                }

            });
        });
    });
}

我已经硬编码了旧金山的 lat,lon 值,因此您可以看到它的工作原理,只需取消注释用于生产的真实代码,还请注意 Google 地图 API 返回一个具有不同地址精度级别的数组,所以理想情况下,你应该循环并确认每一个,我会把它留给你。我希望这可以解决您的问题或至少可以帮助您,祝您好运=)

jsfiddle Demo

编辑:删除了硬编码的坐标并将它们作为 cmets,因此代码应该可以立即工作,无需取消注释,除非您想测试 SF 并且您不在其中。

【讨论】:

  • 非常非常感谢!一个问题,我在纽约,它说我在旧金山。
  • 嗯,消息是硬编码的,可以在旧金山使用,这取决于你的应用,如果你需要知道用户是在给定的城市还是附近的位置,你必须将它们添加到数组中,在本例中为“纽约”,然后将警报字符串更改为“您在'+城市+'或附近'。不仅如此,我会变得更复杂,可以说如果它没有找到匹配但在我们身上,你可以使用数学和也许相同的谷歌 api 来确定它是否在另一个城市的给定辐射范围内,但是那不是我的专业知识。总帐
  • 啊,我明白了。但既然我在纽约,它不应该不会提醒任何东西吗?
  • 好吧,如果你只想检查用户是否在旧金山附近,那么是的,它不应该提醒任何东西,但记得将 lat 和 lon 值更改为 pos.coords.latitude 和 pos.coords .longitude 分别所以代码可以真正知道你在哪里。如果你愿意,你可以添加一个 else 语句,上面写着“你不在旧金山,你所在的城市没有服务”或类似的东西。
  • 很抱歉打扰了,但我在这里做了:jsfiddle.net/EfCkM/5,它说我在旧金山或附近。不是别的。因此,由于某种原因,if 的评估结果为 true。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-19
  • 1970-01-01
  • 2012-02-24
  • 1970-01-01
  • 2015-11-14
相关资源
最近更新 更多