c#,winform实现获取当前经纬度坐标(极其便捷)

        近期开发winform桌面应用时,需要获取当前的经纬度坐标,并显示在地图上(我们要实现的是arcgis engine的地图,但事实上不论是百度还是googel这些地图,只要获取了当前的经纬度坐标,一切都好说)。我花费了快一天的时间终于解决这个问题。急切地想解决问题的话,请跳到Part 2直接扫一眼,copy代码用起,否则可以慢慢读,有帮助。

Part one

        在国内的网站找了一遍又一遍,获取当前设备所在的经纬度坐标(PC)主要有两种方式:

        ①调用第三方定位api;http://51.ruyo.net/p/2759.html

        ②调用HTML 5方法;http://www.w3school.com.cn/html5/html_5_geolocation.asp

        然而这两种方法都不好用,第一种方法,我首先考虑的是百度地图,发现百度的高精度ip定位api已经关闭,只有普通的IP定位api(精确到城市就不错了),好像高德也有,但我没有仔细研究了。如果能找到api的话,可是可以用的,但一般要注册较为麻烦。

       第二种方法,有非常多的人用,基本是web应用中调用的(asp.net之流)。HTML 5这个Geolocation方法确实好用,我自己也写了对应的页面,效果非常好。能够正常运行。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>H5地理位置Demo</title>
        <style type="text/css">
        body, html{width: 100%;height: 100%;margin:0;font-family:"微软雅黑";background-color: white;text-align: center;}
        #demo{width:100%;height:20%;}
    </style>
    <body>
        <div id="demo">test</div>
        <input type="button" value="定位" onClick="getLocation()" >
    </body>
    <script type="text/javascript">
       var x=document.getElementById("demo");
function getLocation()
  {
  if (navigator.geolocation)
    {
    var position=navigator.geolocation.getCurrentPosition(showPosition);
    //showPosition(position);

    }
  else{x.innerHTML="Geolocation is not supported by this browser.";}
  }
function showPosition(position)
  {
  x.innerHTML="Latitude: " + position.coords.latitude +
  "<br />Longitude: " + position.coords.longitude;
  }
    </script>
</html>

     上述html的运行效果如下图所示:

       

     讲道理,之后我天真的以为,我只需要在文本winform里面添加一个webBrowser控件,然后进行c#和html,js的交互就可以了。但是webBrowser打开后,什么事情都没有发生。一看HTML 5关于geolocation的描述,我有点想哭的感觉

定位用户的位置
HTML5 Geolocation API 用于获得用户的地理位置。
鉴于该特性可能侵犯用户的隐私,除非用户同意,否则用户位置信息是不可用的。

       ……在浏览器中直接调用上面的html时,会弹出一个窗口,是否允许调用位置坐标信息,但是在webBrowser中运行的时候,并不会出现这种情况。我用中文在百度,bing,goole中搜了很长时间,但是基本所有的回答或解决方案都没什么营养。唯一有点价值的就是说是浏览器的问题,从这个思路出发,我考虑更换webBrowser的浏览器,但网上的各种博客真的让我看的很头疼。无奈之下,我只好在google上开始用英文搜,搜了一会,诶,大神就蹦出来了。stackoverflow上的某大神针对和我碰到的类似的问题做出了回复:

       大神核心意思就是:“由于 sercurity bar 在webBrowser中无法被调用,因此HTML的geolocation无法正常工作。我一会就写了一个自定义的浏览器,把我写的浏览器内置在winform程序中,做一些设置就可以正常运行了。”大神回答的链接是:http://stackoverflow.com/questions/14435585/c-sharp-desktop-application-doesnt-share-my-physical-location,我把大神的解决方案放一份在这里:

The Context

When JavaScript tries to access the location object in IE 10 you are presented with the security bar asking for you to allow the access to your location. The difference for a file which is on the local drive or a network share is that you are not presented with the option to always allow access, but only once (Allow once).

  • 6
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值