如何获取客户端/用户位置详细信息

时间:2015-06-16 14:43:42

标签: google-maps geolocation google-api ip-geolocation

在我的应用程序中,我想跟踪要存储在数据库中的客户端/用户位置。我正在使用此代码获取用户IP地址

 string VisitorsIPAddr = string.Empty;
        if (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null)
        {
            VisitorsIPAddr = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
        }
        else if (HttpContext.Current.Request.UserHostAddress.Length != 0)
        {
            VisitorsIPAddr = HttpContext.Current.Request.UserHostAddress;
        }
        ipAddress = VisitorsIPAddr;

使用上面的代码我得到了IP地址。现在下一步获取时区,地区,城市名称,国家名称,国家代码,气象站,ISP等。

但是,我不想使用任何其他第三方API来获取除Google以外的详细信息。任何人都可以回复以解决我的问题。

是否可以使用c#在asp.net中获取上述详细信息,或者我必须使用任何其他服务。

使用IP我想获得客户端地址的精确位置。

http://www.iplocationtools.com/index.html

等详细信息

2 个答案:

答案 0 :(得分:4)

是的,确定,Google Maps JS API v3确实提供了IP到位置地理编码服务。您可以使用此代码根据用户的IP地址获取用户位置:

// If ClientLocation was filled in by the loader, use that info instead
if (google.loader.ClientLocation) {
  zoom = 13;
  latlng = new google.maps.LatLng(google.loader.ClientLocation.latitude, google.loader.ClientLocation.longitude);
  location = "Showing IP-based location: <b>" + getFormattedLocation() + "</b>";
}

除了Lat / Lng,google.loader.ClientLocation还会返回包含城市,国家,国家/地区代码,地区等的地址...
另外,请看the example here

即使地址为空,您也可以随时使用Geocoding Service返回的Lat / Lng来获取地址详细信息。

但是,正如official site中提到的那样:

  

...我们不建议使用此方法(使用IP地址检测用户的位置)进行地理定位。 W3C方法是最简单和最全面支持的方法,因此它应优先于其他方法。

同样在issue tracker

  

...几年前我们停止了记录,并且由于精度提高而推荐了基于HTML的解决方案,但功能本身并没有从Loader中删除......

执行此操作的最佳方法是使用HTML5-based方法。但是,如果您使用的是基于IP的,请确保您发现Google可以随时放弃对它的支持。

答案 1 :(得分:0)

您可以使用geoIP MaxMind Web服务在C#中获取位置详细信息。 以下链接可能对您有所帮助。

http://dev.maxmind.com/geoip/geoip2/web-services/

这是可用的Github存储库。

https://github.com/maxmind/GeoIP2-dotnet