1

我想在会话期间将用户的当前位置存储在 ASP.NET MVC 网站上。因为我想使用位置服务器端,所以我认为这应该起作用的方式(也许其他建议?)是当用户第一次访问网站时,我获取位置并将其存储在会话中,所以稍后请求它确实不必再次查找。

我能找到的最好方法是使用 Google 的 ClientLocation 方法:

<script src="http://www.google.com/jsapi?key=YOURAPIKEY" type="text/javascript"></script>
<script>
    google.load("jquery", "1.2.6");
    google.load("jqueryui", "1.5.2");
    var yourLocation = google.loader.ClientLocation.address.city + ", "
       + google.loader.ClientLocation.address.region;
</script>

我的问题是如何最好地将在此 Javascript 代码中查找的位置返回到服务器以存储在数据库或会话中。我知道我可以使用 jQuery 调用控制器操作来传递位置:

$.post("/Home/StoreLocation", location, function(){});

但是为了性能,我不希望在每次加载页面时都发生这种情况。我认为这样做的另一种方法是通过执行以下操作(调用地理编码)从.NET代码调用Google的api:

string path = "http://maps.google.com/maps/geo?q=" + strAddress + "&output=csv&key=" + apiKey;
WebClient client = new WebClient();
string[] eResult = client.DownloadString(sPath).ToString().Split(',');
//Parse the array

但是我找不到任何等效的方法来直接从这样的 URL 调用 ClientLocation - 我看到的所有示例都使用 google.loader (我认为这样做时我不能使用它?)我有另一件事考虑使用Google 的 .NET 库,但我在其中找不到任何东西来进行位置查找(也许我错了?)。

4

3 回答 3

1

在您的第二个示例中,我不太了解strAddress。你有客户的地址吗?还是他们的IP?我刚刚用我的 IP 地址尝试了那个 URL,它说我在 1000 英里之外。

无论如何,我看不出#1有什么问题。只需在您的 Site.Master 中有这样的内容:

<script type="text/javascript">
  //other javascript here
  <% if (Sesssion.Contents["has_location"] == null) { %>
    $(document).ready(function_to_submit_location)
  <% } %>
</script>

编辑以将 if 语句放在 ASP 标记中——它不是 javascript if。

编辑那些想要使用此代码的人,您必须在控制器中放入一些东西,以便在获得位置时设置 session["has_location"] = true 。

于 2009-08-09T18:50:16.123 回答
1

这个问题促使我完成了草稿文件夹中的一篇博文: http ://www.alexjamesbrown.com/geek/development/dotnet/reverse-geocoding-with-google-api-and-c/

请让我知道这是否有任何帮助(这不是您要问的……但可以对其进行调整以做您想做的事)

于 2009-08-09T19:48:28.953 回答
0

Google 客户端定位方法旨在用于前端/浏览器中。听起来您正在寻找可以在您的服务器上运行的东西——Web 服务或本地 IP 数据库。

MaxMind 有一个带有 C# api 的免费 G​​eoIP 数据库。您将客户端的 IP 地址传递给 GeoIP 库,它会返回城市和州。

http://www.maxmind.com/app/geolitecity

MaxMind 也有一个网络服务,只需象征性的费用。

于 2009-08-22T14:44:12.377 回答