天道酬勤,学无止境

在百度地图中显示navigator.geolocation.getCurrentPosition(Showing navigator.geolocation.getCurrentPosition in Baidu Maps)

问题

我们知道,由于臭名昭著的中国 GPS 偏移问题,GPS (WSG-84) 地图坐标与国家批准的中国地图使用的坐标系 (GCJ-02) 不完全对应。

问题是,如何确保通过百度地图 API 在navigator.geolocation.getCurrentPosition()报告的坐标处放置标记与现实相符?

在中国制造或批准使用的设备的 GPS 芯片是否会返回与用户实际位置不匹配的坐标,以匹配他的 GJC-02 地图?

用户运行中文导航器(例如 Maxthon 或中文本地化的 Google Chrome)与非中文浏览器(例如英文版的 Firefox)是否重要?

这是一个测试地理定位并使用百度地图坐标转换 API 的 JSBin。 不幸的是,我不在中国,所以我无法测试。

这是问题:

上面的应用程序是否需要在从navigator.geolocation.getCurrentPosition()获取的坐标上运行百度坐标转换才能在百度地图上正确显示位置? 位于中国的人是否可以在中国制造的设备上同时使用中文浏览器,并在非中国设备上使用非中文浏览器进行测试?

回答1

嗯...首先,似乎他们有一个 API 可以做到这一点:原始 gps 位置到 baidu gps 位置。 我找不到文档,但我认为他们的jsfiddle(?)可能会给你一个开始的想法。

至于设备和浏览器......由于小米手机在美国运行良好,所以我猜安卓系统只会返回正常的原始 GPS 位置。 还有中文浏览器,在美国手机中使用它们仍然给我正确的位置。 所以我认为浏览器也与转变无关。

希望这有帮助。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • h5/web 原生定位、高德、腾讯地图定位
    因为接手上个人的项目,在项目添加新功能时,使用cdn方式引入使用地图功能,使用功能只用到了地图的定位、点标记、详细地址查询、poi搜索和输入提示、计算两点之间的距离;写这个文档也只是记录一下,因为我在寻找高德地图问题时发现h5 和 web 端的好少,因此记录一下方便以后查找。 h5的navigator 原生定位 // 在导入js的时候添加插件AMap.Geocoder <script src="https://webapi.amap.com/maps?v=1.4.15&key=你的WEBjs的key&plugin=AMap.Geocoder"></script> let geocoder = new AMap.Geocoder({}); // 获取地理编码与逆地理编码类 实例 // 判断是否存在navigator.geolocation if(navigator && navigator.geolocation) { // 开始定位 navigator.geolocation.getCurrentPosition(function(position) { let latitude = position.coords.latitude;// 获取纬度 let longitude = position.coords.longitude;// 获取经度 // 获取到的是gps 定位
  • JavaScript Google Maps API 如何将位置经纬度存储到全局变量(JavaScript Google Maps API How to Store Location lat/long to Global Variable)
    问题 我是 JavaScript 的新手,希望实现 Google 提供的代码,用于在您的位置放置标记。 但是,我想获取位置数据并在“getCurrentPosition”块之外使用它。 我的第一遍是用 lat 和 long 作为块外的属性实例化一个对象,并将其作为 getCurrentPosition 内函数的参数: function initMap() { var pos = { lat: 42.1, lng: -74.1 }; var map = new google.maps.Map(document.getElementById('map'), { center: {lat: 42, lng: -74}, zoom: 6 }); var infoWindow = new google.maps.InfoWindow({map: map}); // Try HTML5 geolocation. if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(function(position, pos) { pos.lat = position.coords.latitude; pos.lng = position.coords.longitude; map.setCenter(pos); }
  • 三星 Galaxy 设备无法使用 geolocation.getCurrentPosition(Samsung Galaxy Devices can't use geolocation.getCurrentPosition)
    问题 好的,所以我一直在寻找对这个问题的适当回应已经有一段时间了。 我有一个 Web 应用程序,它使用navigator.geolocation.getCurrentPosition来获取用户的位置。 三星 Galaxy 设备上的本机浏览器几乎总是有 getCurrentPosition 代码的问题。 我已经尝试了各种带有回调和超时的代码变体,但它总是相同的问题。 很多人都记录了这个问题,有些人表示重启设备会起作用(有时重启确实有效,但并非总是如此 - 告诉用户重启设备的警报似乎非常荒谬)。 有没有人想出一种万无一失的方法来使用 getCurrentPosition 在三星 Galaxy 设备上工作? 这就是我正在使用的... <script> $(document).ready(function(){ if( navigator.geolocation ) { navigator.geolocation.getCurrentPosition( success, fail ); } else { alert("Sorry, your browser does not support geolocation services."); } function success(position) { window.location = "mobile_set_coordinates.php
  • 在同一应用中使用Google地图和百度地图(Using Google Maps and Baidu Maps in same app)
    问题 我想知道是否有人在同一版本中实现了Google Maps V2和Baidu Maps? 是因为通用汽车在中国没有达到预期的效果? 还是应该将项目分成两个分支? 但是,最好跳过两个要维护的分支。 回答1 我的解决方案是照常实现GM,但是如果用户使用中国设置(通过设置)静态地图,则该静态地图是从百度而不是Google获取的。 staticUrl = "http://api.map.baidu.com/staticimage?center=" + location.getLongitude() + "," + location.getLatitude() + "&width=" + width + "&height=" + width + "&zoom=15" + "&markers=" + location.getLongitude() + "," + location.getLatitude(); https://api.map.baidu.com/staticimage?center=121,31&width=300&height=300&zoom=15的结果: 如果尝试实施实际的地图解决方案,则不建议使用此方法。 由于我有仅由不同国家/地区使用的不同位置,因此可以使用此解决方案。 所以,这就是我解决的方法。 希望有人觉得这有帮助。 回答2 另外,我发现
  • 谷歌地图 - 用户选择不允许定位(google map - user choses not to allow location)
    问题 我面临的情况是,用户不想让系统使用 google location api 将地图居中放置。 如果用户选择不使用该位置,我需要设置一个默认值。 有没有办法做到这一点? 回答1 就在这里! 谷歌地图使用 navigator.geolocation.getCurrentPosition() 方法来获取您当前的位置。 此方法允许成功回调(当用户说是时)和错误回调(当用户说不时)。 检查浏览器是否支持地理定位也很好。 下面展示如何使用它 if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(hasGeolocation, noGeolocation) } else { geolocationNotSupported(); } function hasGeolocation() { console.log("yeah!") } function noGeolocation() { console.log("user said no!") } function geolocationNotSupported() { console.log("this browser does not support geolocation") } 谷歌地图 api 文档上还有一个示例,用于在谷歌地图使用 https:/
  • 通过html5和javascript获取用户地理位置(getting users geolocation via html5 and javascript)
    问题 我正在尝试通过html5 geolcation api获取用户地理位置信息,并且我使用了以下代码段: if (navigator.geolocation) { var timeoutVal = 10 * 1000 * 1000; navigator.geolocation.getCurrentPosition( displayPosition, displayError, { enableHighAccuracy: true, timeout: timeoutVal, maximumAge: 0 } ); } else { // DO SOME STUFF HERE } function displayPosition(position) { // configuration var myZoom = 12; var myMarkerIsDraggable = true; var myCoordsLenght = 6; var defaultLat = position.coords.latitude; var defaultLng = position.coords.longitude; document.getElementById('latitude').value = defaultLat; document.getElementById('longitude')
  • 部署后,GetcurrentPosition 不起作用(GetcurrentPosition doesn't work once deployed)
    问题 我正在尝试初始化一个以当前用户位置为中心并带有标记的地图。 在本地一切正常,但是当我将 html 页面部署到 Google Appengine 时,它​​只显示没有地理定位的地图......我错在哪里? 谢谢! var marker; function initAutocomplete() { var map = new google.maps.Map(document.getElementById('map'), { center: {lat: 44.415, lng: 10.374}, zoom: 13, mapTypeId: google.maps.MapTypeId.ROADMAP }); if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(function (position) { initialLocation = new google.maps.LatLng(position.coords.latitude, position.coords.longitude); map.setCenter(initialLocation); marker = new google.maps.Marker({ icon: 'http://maps.google.com/mapfiles/ms
  • Google Maps API-客户当前位置的中心地图(Google maps API - Center map on client's current location)
    问题 我曾多次询问过此问题,但我不太想知道我要去哪里,这是我的代码: <html> <head> <title> Map </title> <style> html, body, #map-canvas { margin: 0; padding: 0; height: 500px; width: 800px;} </style> <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script> <script> var map; function initialize() { var myLatlng1 = new google.maps.LatLng(53.65914, 0.072050); var mapOptions = { zoom: 10, center: myLatlng1, mapTypeId: google.maps.MapTypeId.ROADMAP }; var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); <?php $sql = mysql_query("SELECT * FROM data ORDER BY ID DESC"); while(
  • 如何防止在Phonegap应用中出现两次提示进行地理位置定位?(How to prevent double prompt for geolocation in Phonegap app?)
    问题 我为iPhone创建了一个PhoneGap应用,该应用通过Webview内部的JavaScript使用地理位置。 首次运行该应用程序时,它将提示我允许对此应用程序进行地理位置定位。 当我点击“确定”时,它将再次提示我同样的问题,但是这一次它指出“ index.html”需要使用地理定位的权限。 这是有道理的,因为iOS可能第一次和第二次浏览器都需要许可才能允许对应用本身进行地理定位。 但是,由于不会带来良好的用户体验,因此: 如何防止出现这种双重提示? (如果可以阻止第二个提示,我就够了) 回答1 我找到了问题的原因。 在完全加载Phonegap之前navigator.geolocation.getCurrentPosition(onsuccess, onerror)会调用navigator.geolocation.getCurrentPosition(onsuccess, onerror) 。 这意味着将触发Webview的地理位置调用(而不是通过PhoneGap进行的本地调用),这将再次请求许可(的确是有道理的)。 将其与智能手机上的常规Safari浏览器进行比较。 它将要求每个新网站都获得地理位置许可。 在应用程序启动时通过PhoneGap加载index.html时是相同的。 但是,解决方案是等待PhoneGap完全加载后触发的deviceready事件:
  • 谷歌地图同步地理编码延迟(Google map sync geocode delay)
    问题 就是这样,jsfiddle 如您所见,我打算为谷歌地图功能制作单独的功能。 locate_self()函数用于返回当前地理位置的locate_self()坐标,而initialize_map()函数绘制地图并接受可选的预定义坐标,否则使用默认的随机坐标。 问题是, initialize_map()比locate_self() initialize_map()触发得更快,将返回的元素呈现为undefined ,最后, initialize_map()使用默认坐标。 在locate_self() ,我通过给出一个alert()以及当前的地理位置坐标来创建一个测试块,以表明此功能正常工作。 问题是如何让initialize_map()等待locate_self() 直到它返回坐标而不是undefined ? 稍后我将对接受 latlng 并返回地址字符串的函数使用相同的解决方案。 地理编码器也有同样的“延迟”。 我之前尝试使用超时,但它仍然给我未定义(也许我放置超时块是错误的,我不知道)。 谢谢,如果这是转帖,我很抱歉 回答1 地理定位服务是异步的。 解决此问题的最简单方法是使用回调而不是使用return : function initialize_map(result) { if (result !== 'error') { gm_map = new google.maps
  • PhoneGap + Google Maps API v3:在Android上完全不显示(PhoneGap + Google Maps API v3 : Not displaying (at all) on Android)
    问题 情况 我目前正在为希望与Google Maps集成的客户开发应用程序。 他希望地图显示从用户到其办公室的路线。 我正在使用Windows 8,而没有任何IDE(使用Sublime Text 2)。 我设法使它能够在a)我的Chrome浏览器中本地运行,b)在PhoneGap / Cordova> 2.0.0的Ripple仿真器中运行。 但是,无论何时尝试,它都无法在我的Android手机(HTC Sensation)上正常工作。 它使我发疯,我正要放弃它,找到其他“笨拙的”解决方案(例如静态地图或geo:url接口)。 在尝试实际实现地图之前,我运行了PhoneGap Geolocation完整示例,在此处找到。 我注意到我的Android手机确实正确显示了我的当前位置(经/纬/时间戳等)。 因此,我相信已经在我的手机上设置了正确的权限(位置->等)。 问题 我的Android设备上根本没有显示Google Maps。 我看到红色背景(用于调试),所以我知道高度和宽度都可以。 但是我看不到谷歌地图的任何迹象(没有按钮,覆盖物,网格或其他任何东西)。 编码 用于加载jQuery,Cordova和Maps API v3的HTML代码: <script type="text/javascript" src="js/jquery-1.10.0.min.js" ></script>
  • 如何在Google地图中添加我的位置按钮?(How to add my location button in Google Maps?)
    问题 我想知道是否可以将位置按钮添加为默认控件选项。 有什么方法可以将其设置为默认值,或者我需要对按钮进行地理位置定位,然后在该按钮上触发click事件,以便将用户导航到当前位置? 回答1 我们已经为Google Maps API v3制作了这样的组件。 任何人都可以在自定义项目中使用仅一行代码添加显示当前地理位置的控件: var geoloccontrol = new klokantech.GeolocationControl(map, mapMaxZoom); 在HTML标头中包含以下JavaScript之后: <script src="https://cdn.klokantech.com/maptilerlayer/v1/index.js"></script> 看: http://www.maptiler.com/maptilerlayer/ 有关示例代码和文档的信息。 它将标准控件添加到地图中-轻按一下-它会显示您位置周围的蓝色圆圈,其大小源自可用位置数据的精度。 如果您不拖动地图,则移动后它将使您保持位置。 此控件是为由http://www.maptiler.com/软件自动生成的查看器开发的,该控件可为地图叠加层和由图像和栅格地理数据制成的自定义图层创建图块。 注意:此答案是我们对Google Maps API v3上的“显示我的位置”的答复的转发。 回答2 正如
  • Showing navigator.geolocation.getCurrentPosition in Baidu Maps
    We know that due to the infamous China GPS offset problem, GPS (WSG-84) map coordinates don't correspond exactly to the coordinate system that state-approved Chinese maps use (GCJ-02). The question is, how does one make sure that placing a marker via the Baidu Maps API at the coordinates reported by navigator.geolocation.getCurrentPosition() will match reality? Would the GPS chip of a device manufactured or approved for use in China return coordinates that don't match the actual position of a user, in order to instead match he GJC-02 maps? Does it matter if the user runs a Chinese navigator (e
  • 在Android 2.0+上的WebView中使用navigator.geolocation.getCurrentPosition(与PhoneGap相关)(Using navigator.geolocation.getCurrentPosition in WebView on Android 2.0+ (PhoneGap related))
    问题 我一直在使用PhoneGap,但效果非常好,但是在Verizon Droid w / 2.0.1上定位时遇到了问题(在G1 w / 1.6上可以正常使用)。 GeoLocation API支持是在2.0(Eclair)中添加到Android的,并且可以在Verizon Droid(在2.0.1上)的默认浏览器中使用。 也就是说,如果我访问一个调用navigator.geolocation.getCurrentPosition(success_callback,error_callback)的网站,则设备会在对话框中提示当前域“想知道您的位置”,并带有“共享位置”或“拒绝”选项。 如果我选择“共享位置”,则会最终使用位置数据调用success_callback。 如果我在WebView中访问相同的网站,则对navigator.geolocation.getCurrentPosition的调用不会生成JavaScript错误,但是不会显示“共享您的位置”对话框,也不会调用任何回调。 在logcat中,我看到似乎是一个相关的错误:“ 02-15 10:37:00.413:ERROR / geolocationService(16871):从系统中注册位置更新时捕获了安全异常。仅应在DumpRenderTree中发生。” 在我看来,WebView无法注册位置更新,因为它没有所需的权限
  • navigator.geolocation.getCurrentPosition在Android Google Chrome上不起作用(navigator.geolocation.getCurrentPosition doesn't work on android google chrome)
    问题 这段代码: navigator.geolocation.getCurrentPosition( function(position) { alert(position.coords.latitude, position.coords.longitude); }, function(error){ alert(error.message); }, { enableHighAccuracy: true ,timeout : 5000 } ); https://jsfiddle.net/FcRpM/可以在我的笔记本电脑上使用Google Chrome浏览器,但在移动HTC S(Android 4.1,关闭GPS,通过移动网络和wifi启用位置)上通过WiFi连接到互联网。 默认浏览器工作正常。 适用于Android的Google Chrome,Opera,Yandex.browser失败,并显示“超时已过期”。 其他android应用程序定位我正确。 回答1 你可以试试看它似乎可以在我的设备上运行(三星Galaxy Nexus在Wi-Fi上运行Chrome 27.0.1453.90(无数据连接,无GPS)) navigator.geolocation.getCurrentPosition( function(position) { alert("Lat: " + position
  • 带有PhoneGap的iPhone上的位置权限警报(Location permission alert on iPhone with PhoneGap)
    问题 您如何更改警报中显示的字符串: (应用名称/无论使用什么名称)都想使用您的当前位置 当然,我只想更改appname部分。 因为当您使用PhoneGap框架时,字符串非常丑陋,如下所示: /var/mobile/Applications/157EB70D-4AA7-826E-690F0CBE0F/appname.app/www/index.html 有人有主意吗? 回答1 设备准备好后,您需要进行地理位置定位。 例如,以下Jquery代码将在没有该讨厌警报的情况下进行地理定位: $(function(){ document.addEventListener("deviceready", onDeviceReady, false); }) function onDeviceReady() { navigator.geolocation.getCurrentPosition(onSuccess, onError); } function onSuccess(position) { // your callback here } function onError(error) { // your callback here } 回答2 在phonegap 3.0上,必须遵循Pius Uzamere的回答并安装插件。 cordova plugin add https://git-wip
  • 每次用户重新加载页面时,均设置html5地理位置询问权限(Make html5 geolocation ask permission every time user reloads the page)
    问题 为什么我们需要: 我们的网站上有一些页面,允许用户输入一些数据并搜索他们所在区域的其他客户。 当用户打开该页面时,必须显示弹出消息 http://foo.bar.com想使用您的当前位置。 之后,用户可以丢弃该信息并手动填写位置字段,也可以接受并自动重定向到结果页面。 问题: 问题在于,当用户第一次选择任何提及的选项时,浏览器会记住该选项,下次不会再询问。 因此,当用户接受它时,每次他打开搜索页面时,它都会自动将他重定向到结果页面,而无需任何询问。 代码: 我们正在使用基本的html5地理位置代码 if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(LocationMethod); } 结论: 我非常确定,不可能更改浏览器本地的权限。 但是我希望有人会为这个问题提供很好的解决方案。 谢谢。 回答1 用户单击拒绝/允许浏览器后,浏览器就会记住该站点的决定。 避免拒绝的最好方法是仅在用户单击表示要使用其位置的内容时才调用getCurrentPosition(...)。 然后他可能会很乐意分享它:) 一个很好的例子是在foursquare网站上。 在输入时,您可以转到某个城市的地图,只有在该位置单击“使用我的位置”地图上的按钮时,它才会提示您。 如果您拒绝该位置,则还可以显示一条信息消息,
  • H5定位+vue+高德地图逆地理编码+结构化地址信息
    学习记录: 最终效果: 1.注册高德地图账号,进入控制台,创建一个应用,获取key(选择web端 js api)。 2.html中引入,将{parameter} 替换成你的key (踩坑:&plugin=AMap.Geocoder <script src="https://webapi.amap.com/mapsv=1.4.15&key={parameter}&plugin=AMap.Geocoder"></script> 3.创建一个container的div,作为地图的容器,并绘制地图 <div id="container"></div> creataMap:function(){ map = new AMap.Map('container',{ resizeEnable:true, zoom: 13, //设置地图显示的缩放级别 center: [116.397428, 39.90923],//设置地图中心点坐标 layers: [new AMap.TileLayer.Satellite()], //设置图层,可设置成包含一个或多个图层的数组 mapStyle: 'amap://styles/whitesmoke', //设置地图的显示样式 viewMode: '2D', //设置地图模式 lang:'zh_cn', //设置地图语言类型 }); // 创建一个 Marker
  • 如何防止 WKWebView 反复请求访问位置的权限?(How to prevent WKWebView to repeatedly ask for permission to access location?)
    问题 我的应用程序中有一个WKWebView ,当我开始浏览 www.google.com 或任何其他需要定位服务的网站时,会出现一个弹出窗口,要求获得访问设备位置的权限,即使我已经接受了分享我的位置。 我为管理这个位置所做的唯一一件事是在我的info.plist添加了NSLocationWhenInUseUsageDescription属性。 我在网上找不到任何答案,所以任何想法都将不胜感激。 回答1 事实证明这很困难,但可以做到。 您必须注入 JavaScript 代码来拦截对navigator.geolocation请求并将它们传输到您的应用程序,然后使用CLLocationManager获取位置,然后将位置注入回 JavaScript。 这是简要的方案: 将WKUserScript添加到您的WKWebView配置中,它会覆盖navigator.geolocation方法。 注入的 JavaScript 应该是这样的: navigator.geolocation.getCurrentPosition = function(success, error, options) { ... }; navigator.geolocation.watchPosition = function(success, error, options) { ... }; navigator
  • 如何使用javascript结合地理定位和多个标记?(How to combine geolocation and multiple markers using javascript?)
    问题 我正在尝试创建一个能够跟踪我的位置并同时能够显示多个标记的地图。 我可以结合下面的 2 个 JavaScript 吗? 如果不知道我应该怎么做? 多个标记的 JavaScript <script type="text/javascript"> var locations = [ ['Hougang', 1.37265, 103.893658], ['Punggol', 1.400617, 103.907833], ['MacRitchie Reservoir', 1.346002, 103.825436], ['Bishan', 1.352051, 103.849125], ['Sentosa', 1.251226, 103.830757] ]; var map = new google.maps.Map(document.getElementById('map'), { zoom: 15, center: new google.maps.LatLng(1.37265, 103.893658), mapTypeId: google.maps.MapTypeId.ROADMAP }); var infowindow = new google.maps.InfoWindow(); var marker, i; for (i = 0; i < locations.length; i