如何在node.js中查找纬度和经度?

6
我正在从事网站分析工作,我们使用node.js在服务器端,使用http请求(express framework)发送数据。

要求: 必须找到访问者的纬度和经度。

我的问题是如何在node.js中查找纬度和经度? 有可用的框架吗?


1
我能想到的唯一做法就是通过geoIP或类似的服务来运行他们的IP。 - Stephan
你可以使用 Google 地图 API 在客户端完成此操作。 - Alex
3个回答

10
我强烈建议在浏览器中使用HTML5地理位置API,然后将访问者的位置信息发送到您的服务器 - 这比在服务器端使用IP地址的地理定位要准确得多。您将获得ISP的位置,这可能相当遥远,并且IP到位置数据库并不总是更新到最新更改,因此您可能无法获取特定IP地址的任何数据。
要了解更多关于此主题的信息,请查看MaxMind,该公司提供了一种流行的IP到位置数据库,并发布了有关其数据库的一些统计数据:GeoIP City Accuracy for Selected Countries 以下是一个很好的使用navigator.geolocation的示例:

4
然后用户会看到“XX想获取您的位置”,并点击“不允许”。太棒了。 - Maciej Krawczyk

0

如果访问者是通过浏览器访问您的网站,那么您正在使用错误的技术提出问题。
Node.js是一种服务器端技术,这意味着它无法直接访问用户的地理位置。

您应该询问如何在客户端使用javascript获取地理位置,然后通过Ajax将该信息简单地发送到您的服务器。
这个问题非常容易回答:http://www.w3schools.com/html/html5_geolocation.asp。当然,也有库可以简化使用。

如果您无法、不想或不想麻烦地从客户端获取信息,则可以尝试匹配IP地址(这就是Maxmind所做的,尽管我不确定他们是否会给您经度和纬度或仅城市名称)。
但是,这些将不是精确的,特别是如果您的访问者使用具有地理位置功能的设备(例如手机)。


地理位置支持从IE 9+开始。 - karthick

0

1) 你也可以使用这个npm包来获取你的IP地址的经纬度。

https://www.npmjs.com/package/geoip-lite

{ range: [ 3479298048, 3479300095 ],
  country: 'US',
  region: 'TX',
  eu: '0',
  timezone: 'America/Chicago',
  city: 'San Antonio',
  ll: [ 29.4969, -98.4032 ],
  metro: 641,
  area: 1000 }

它会给你这种格式的信息


2) 这个包会给你一些你想要的有用信息

https://www.npmjs.com/package/iplocation

iplocation('56.70.97.8', [], (error, res) => {

    /* res:

        {
            as: 'AS11286 KeyBank National Association',
            city: 'Cleveland',
            country: 'United States',
            countryCode: 'US',
            isp: 'KeyBank National Association',
            lat: 41.4875,
            lon: -81.6724,
            org: 'KeyBank National Association',
            query: '156.77.54.32',
            region: 'OH',
            regionName: 'Ohio',
            status: 'success',
            timezone: 'America/New_York',
            zip: '44115'
        }

    */

});

它会给你这种格式的信息


无法根据IP获取位置,因为VPN或任何种类的IP掩码软件使用时,此数据将是错误的。 接受的答案是唯一的方法。 - MiKr13

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接