杨小羽 發表於 2019-5-29 01:11:00

百度地图JavaScript API获取用户当前经纬度和详细地理位置,反之通过详细地理位置获取当前经纬度

<h2>前言:</h2>
<p>  前段时间刚好使用了百度地图的js api定位获取用户当前经纬度并获取当前详细位置和通过当前用户详细地理位置换取用户当前经纬度坐标的功能,为了方便下次找起来方便一些自己在这里记录一下,希望也能够帮助到有需要的童鞋们!</p>
<h2>解决方案:</h2>
<h3>引入JavaScript API v2.0 SDK</h3>
<div class="cnblogs_Highlighter">
<pre class="brush:csharp;gutter:true;">&lt;script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&amp;ak=您的密钥"&gt;&lt;/script&gt;</pre>
</div>
<h3>在页面中定义一个以ID为allmap的DIV标签:</h3>
<p>&lt;div id="allmap"&gt;&lt;/div&gt;</p>
<p>避免页面中出现:</p>
<div class="cnblogs_Highlighter">
<pre class="brush:csharp;gutter:true;">Uncaught TypeError: Cannot read property 'gc' of undefined</pre>
</div>
<h3>通过SDK 辅助定位获取坐标,然后在获取当前用户详细地址</h3>
<div class="cnblogs_code">
<pre>&lt;script type=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">text/javascript</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;
    <span style="color: rgba(0, 0, 255, 1)">var</span> map = <span style="color: rgba(0, 0, 255, 1)">new</span> BMap.Map(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">allmap</span><span style="color: rgba(128, 0, 0, 1)">"</span>);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">创建Map实例,注意页面中一定要有个id为allmp的div</span>
    <span style="color: rgba(0, 0, 255, 1)">var</span> point = <span style="color: rgba(0, 0, 255, 1)">new</span> BMap.Point(<span style="color: rgba(128, 0, 128, 1)">116.331398</span>,<span style="color: rgba(128, 0, 128, 1)">39.897445</span>);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">创建定坐标</span>
    map.centerAndZoom(point,<span style="color: rgba(128, 0, 128, 1)">12</span>);<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)">/ 初始化地图,设置中心点坐标和地图级别</span>

    <span style="color: rgba(0, 0, 255, 1)">var</span> geolocation = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> BMap.Geolocation();
    </span><span style="color: rgba(0, 0, 255, 1)">var</span> gc = <span style="color: rgba(0, 0, 255, 1)">new</span> BMap.Geocoder();<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">创建地理编码器
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 开启SDK辅助定位</span>
<span style="color: rgba(0, 0, 0, 1)">    geolocation.enableSDKLocation();
    geolocation.getCurrentPosition(function(r){
      </span><span style="color: rgba(0, 0, 255, 1)">if</span>(<span style="color: rgba(0, 0, 255, 1)">this</span>.getStatus() ==<span style="color: rgba(0, 0, 0, 1)"> BMAP_STATUS_SUCCESS){
            </span><span style="color: rgba(0, 0, 255, 1)">var</span> mk = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> BMap.Marker(r.point);
            map.addOverlay(mk);
            map.panTo(r.point);
            alert(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">您的位置:</span><span style="color: rgba(128, 0, 0, 1)">'</span> + r.point.lng + <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">,</span><span style="color: rgba(128, 0, 0, 1)">'</span> +<span style="color: rgba(0, 0, 0, 1)"> r.point.lat);

            </span><span style="color: rgba(0, 0, 255, 1)">var</span> pt =<span style="color: rgba(0, 0, 0, 1)"> r.point;   
            map.panTo(pt);</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">移动地图中心点
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">alert(r.point.lng);</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">X轴
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">alert(r.point.lat);</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">Y轴 </span>
<span style="color: rgba(0, 0, 0, 1)">
            gc.getLocation(pt, function(rs){   
                </span><span style="color: rgba(0, 0, 255, 1)">var</span> addComp =<span style="color: rgba(0, 0, 0, 1)"> rs.addressComponents;
                </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">alert(addComp.city);</span>
               alert(addComp.province + addComp.city + addComp.district + addComp.street +<span style="color: rgba(0, 0, 0, 1)"> addComp.streetNumber);   
            });

      }
      </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
            alert(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">failed</span><span style="color: rgba(128, 0, 0, 1)">'</span>+<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.getStatus());
      }      
    });
</span>&lt;/script&gt;</pre>
</div>
<h3>通过浏览器定位获取当前经纬度:</h3>
<div class="cnblogs_code">
<pre>&lt;script type=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">text/javascript</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;
<span style="color: rgba(0, 0, 255, 1)">var</span> map = <span style="color: rgba(0, 0, 255, 1)">new</span> BMap.Map(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">allmap</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">var</span> point = <span style="color: rgba(0, 0, 255, 1)">new</span> BMap.Point(<span style="color: rgba(128, 0, 128, 1)">116.331398</span>,<span style="color: rgba(128, 0, 128, 1)">39.897445</span><span style="color: rgba(0, 0, 0, 1)">);
map.centerAndZoom(point,</span><span style="color: rgba(128, 0, 128, 1)">12</span><span style="color: rgba(0, 0, 0, 1)">);

</span><span style="color: rgba(0, 0, 255, 1)">var</span> geolocation = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> BMap.Geolocation();
geolocation.getCurrentPosition(function(r){
    </span><span style="color: rgba(0, 0, 255, 1)">if</span>(<span style="color: rgba(0, 0, 255, 1)">this</span>.getStatus() ==<span style="color: rgba(0, 0, 0, 1)"> BMAP_STATUS_SUCCESS){
      </span><span style="color: rgba(0, 0, 255, 1)">var</span> mk = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> BMap.Marker(r.point);
      map.addOverlay(mk);
      map.panTo(r.point);
      alert(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">您的位置:</span><span style="color: rgba(128, 0, 0, 1)">'</span>+r.point.lng+<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">,</span><span style="color: rgba(128, 0, 0, 1)">'</span>+<span style="color: rgba(0, 0, 0, 1)">r.point.lat);
    }
    </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
      alert(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">failed</span><span style="color: rgba(128, 0, 0, 1)">'</span>+<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.getStatus());
    }      
});
</span>&lt;/script&gt;</pre>
</div>
<h3>ip定位获取当前所在城市</h3>
<div class="cnblogs_code">
<pre>&lt;script type=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">text/javasript</span><span style="color: rgba(128, 0, 0, 1)">"</span>&gt;
<span style="color: rgba(0, 0, 255, 1)">var</span> map = <span style="color: rgba(0, 0, 255, 1)">new</span> BMap.Map(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">allmap</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">var</span> point = <span style="color: rgba(0, 0, 255, 1)">new</span> BMap.Point(<span style="color: rgba(128, 0, 128, 1)">116.331398</span>,<span style="color: rgba(128, 0, 128, 1)">39.897445</span><span style="color: rgba(0, 0, 0, 1)">);
map.centerAndZoom(point,</span><span style="color: rgba(128, 0, 128, 1)">12</span><span style="color: rgba(0, 0, 0, 1)">);

function myFun(result){
    </span><span style="color: rgba(0, 0, 255, 1)">var</span> cityName =<span style="color: rgba(0, 0, 0, 1)"> result.name;
    map.setCenter(cityName);
    alert(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">当前定位城市:</span><span style="color: rgba(128, 0, 0, 1)">"</span>+<span style="color: rgba(0, 0, 0, 1)">cityName);
}
</span><span style="color: rgba(0, 0, 255, 1)">var</span> myCity = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> BMap.LocalCity();
myCity.</span><span style="color: rgba(0, 0, 255, 1)">get</span><span style="color: rgba(0, 0, 0, 1)">(myFun);
</span>&lt;/script&gt;</pre>
</div>
<h3>通过详细地理位置换取当前用户经纬度坐标</h3>
<div class="cnblogs_code">
<pre>http:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">api.map.baidu.com/geocoder/v2/?address=长沙市&amp;output=json&amp;ak=您的密钥</span></pre>
</div>
<p>我使用的是ajax请求数据,注意假如dataType为json时会出现跨域问题,最终我使用的是jsonp请求就解决了:</p>
<p>json和jsonp之间的区别:https://www.cnblogs.com/strugglion/p/5929821.html</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">$.ajax({
url:</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">http://api.map.baidu.com/geocoder/v2/?address=</span><span style="color: rgba(128, 0, 0, 1)">"</span>+city+<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">&amp;output=json&amp;ak=您的密钥</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
dataType:</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">jsonp</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
processData: </span><span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
type:</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">get</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">,
success:function(data){
console.log(data);
</span><span style="color: rgba(0, 0, 255, 1)">if</span> (data.status==<span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">) {
console.log(</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">纬度:</span><span style="color: rgba(128, 0, 0, 1)">"</span>+data.result.location.lat+<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">经度:</span><span style="color: rgba(128, 0, 0, 1)">"</span>+<span style="color: rgba(0, 0, 0, 1)">data.result.location.lng);
}
},
error:function(XMLHttpRequest, textStatus, errorThrown) {
console.log(XMLHttpRequest.status);
console.log(XMLHttpRequest.readyState);
console.log(textStatus);
}});</span></pre>
</div>
<p>返回json格式的响应数据:</p>
<div class="cnblogs_Highlighter">
<pre class="brush:csharp;gutter:true;">{"status":0,"result":{"location":{"lng":112.94547319535288,"lat":28.23488939994364},"precise":0,"confidence":12,"comprehension":100,"level":"城市"}}
</pre>
</div>
<p>  </p>

</div>
<div id="MySignature" role="contentinfo">
    <blockquote >
<p style='font-family:YouYuan;font-size: 16px;margin: 0 auto 0.01em auto;'><span style='font-size: 17px; '>作者名称:</span>追逐时光者</p>
<p style='font-family:YouYuan;font-size: 16px;margin: 0 auto 0.01em auto;'><span style='font-size: 17px; '>作者简介:</span>一个热爱编程、善于分享、喜欢学习、探索、尝试新事物和新技术的全栈软件工程师。</p>
<p style='font-family:YouYuan;font-size: 16px;margin: 0 auto 0.01em auto;'>
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。如果该篇文章对您有帮助的话,可以点一下右下角的【&hearts;推荐&hearts;】,希望能够持续的为大家带来好的技术文章,文中可能存在描述不正确的地方,欢迎指正或补充,不胜感激。
</p>
</blockquote><br><br>
来源:https://www.cnblogs.com/Can-daydayup/p/10941470.html
頁: [1]
查看完整版本: 百度地图JavaScript API获取用户当前经纬度和详细地理位置,反之通过详细地理位置获取当前经纬度