【问题标题】:Getting user's location using Google from .NET code从 .NET 代码中使用 Google 获取用户的位置
【发布时间】:2009-08-09 18:23:25
【问题描述】:

我想在会话期间将用户的当前位置存储在 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's .NET library,但我在其中找不到任何东西来进行位置查找(也许我错了?)。

【问题讨论】:

    标签: asp.net-mvc geolocation location


    【解决方案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。

    【讨论】:

    • 是的!用于显示/隐藏 jQuery 调用的 c# 条件语句 !session["has_location"] 是我所缺少的,不知道为什么我没有想到这一点!谢谢詹姆斯! (第二个例子是地理编码,只是为了演示如何从代码中调用 URL - 我实际上不想进行地理编码。是的,您传入客户端地址,它应该返回经度/纬度。)
    【解决方案2】:

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

    如果这有任何帮助,请告诉我(这不是您所要求的......但它可以适应您的需求)

    【讨论】:

    • 谢谢亚历克斯,我正在考虑自己做类似的事情,但我找不到一个 URI 来做我想要的(你使用的示例将地址转换为坐标,我想知道用户的位置是什么)。考虑一下,这是有道理的,因为它必须从客户端的浏览器中调用。
    • 我进行了一些搜索,但找不到从 IP 地址获取位置的谷歌 API。这就是谷歌用来向 javascript 文件提供位置的全部内容,所以他们没有理由不能将其公开给 API,以便您可以发送 IP 并获取位置......但似乎他们没有。跨度>
    • Google Gears 有这样的东西....我忘记它叫什么了,但我知道有一些东西。
    【解决方案3】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2023-03-06
      • 1970-01-01
      • 2016-04-18
      • 2011-03-19
      • 1970-01-01
      • 1970-01-01
      • 2018-10-09
      • 2011-01-04
      • 1970-01-01
      相关资源
      最近更新 更多