【问题标题】:Android browser doesn't work with geolocationAndroid 浏览器不适用于地理定位
【发布时间】:2012-05-24 06:11:37
【问题描述】:

我正在构建一个使用地理位置代码的网站,它假设加载 mapCanvas 并在用户点击“找到我!”后按钮获取他的位置并根据用户位置设置地图中心。它在 Firefox、Chrome、Safari 上运行良好,在普通 PC 和 iPhone 上进行了测试,唯一不兼容的设备是任何搭载 Android 的手机。这是一个代码:

<script src="http://maps.google.com/maps?file=api&v=3&key=YourKey" 
       type="text/javascript"></script>
<script type="text/javascript">
    //<![CDATA[

    var iconBlue = new GIcon(); 
    iconBlue.image = 'http://labs.google.com/ridefinder/images/mm_20_blue.png';
    iconBlue.shadow = 'http://labs.google.com/ridefinder/images/mm_20_shadow.png';
    iconBlue.iconSize = new GSize(17, 25);
    iconBlue.shadowSize = new GSize(1, 1);
    iconBlue.iconAnchor = new GPoint(6, 20);
    iconBlue.infoWindowAnchor = new GPoint(5, 1);

    var iconRed = new GIcon(); 
    iconRed.image = 'http://labs.google.com/ridefinder/images/mm_20_red.png';
    iconRed.shadow = 'http://labs.google.com/ridefinder/images/mm_20_shadow.png';
    iconRed.iconSize = new GSize(17, 25);
    iconRed.shadowSize = new GSize(1, 1);
    iconRed.iconAnchor = new GPoint(6, 20);
    iconRed.infoWindowAnchor = new GPoint(5, 1);

    var customIcons = [];
    customIcons["restaurant"] = iconBlue;
    customIcons["bar"] = iconRed;

    function load() {
      if (GBrowserIsCompatible()) {
        var map = new GMap2(document.getElementById("map_canvas"));
        map.setCenter(new GLatLng(50.061795,19.936924), 16);

        // Change this depending on the name of your PHP file
        GDownloadUrl("Your_xml.php", function(data) {
          var xml = GXml.parse(data);
          var markers = xml.documentElement.getElementsByTagName("marker");
          for (var i = 0; i < markers.length; i++) {
            var name = markers[i].getAttribute("name");
            var address = markers[i].getAttribute("address");
            var type = markers[i].getAttribute("type");
            var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
                                    parseFloat(markers[i].getAttribute("lng")));
            var marker = createMarker(point, name, address, type);
            map.addOverlay(marker);
          }
        });
      }
    }

    function createMarker(point, name, address, type) {
      var marker = new GMarker(point, customIcons[type]);
      var html = "<b>" + name + "</b> <br/>" + address;
      GEvent.addListener(marker, 'click', function() {
        marker.openInfoWindowHtml(html);
      });
      return marker;
    }
    //]]>


function findLoc(){
if (!navigator.geolocation) {
alert('Sorry, your browser does not support Geo Services');
}
else {
// Get the current location    
navigator.geolocation.getCurrentPosition(showMap);
}
}
function showMap(position){
var lat = position.coords.latitude;
var lon = position.coords.longitude;
var myPoint = new GLatLng(lat, lon);
var map = new GMap2(document.getElementById("map_canvas"));
map.setCenter(myPoint, 15);
GDownloadUrl("Your_xml.php", function(data) {
          var xml = GXml.parse(data);
          var markers = xml.documentElement.getElementsByTagName("marker");
          for (var i = 0; i < markers.length; i++) {
            var name = markers[i].getAttribute("name");
            var address = markers[i].getAttribute("address");
            var type = markers[i].getAttribute("type");
            var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
                                    parseFloat(markers[i].getAttribute("lng")));
            var marker = createMarker(point, name, address, type);
            map.addOverlay(marker);

}
       });

function createMarker(point, name, address, type) {
      var marker = new GMarker(point, customIcons[type]);
      var html = "<b>" + name + "</b> <br/>" + address;
      GEvent.addListener(marker, 'click', function() {
        marker.openInfoWindowHtml(html);
      });
      return marker;
    }
}

我找不到任何解决方案让它工作。 附言 没有任何错误或陈述给出任何提示,使其更易于理解。 设备启用了 GPS。 请帮助我已经尝试了 2 周

【问题讨论】:

    标签: java php android browser geolocation


    【解决方案1】:

    恐怕你面前只有一个艰巨的老式调试。我的方法是在代码中的各个重要点添加可见输出(例如,在调用getCurrentPosition 之前和之后,以及在showMap 的开头)并从那里缩小发生故障的位置。一旦你知道什么是失败的,你可能会想出一个为什么,但直到你知道你在黑暗中挣扎。

    (我曾开发过一个支持 Android 的基于地理位置的移动网络应用程序,因此,如果您需要任何保证,您的情况并非不可能。)

    【讨论】:

    • 感谢回答我在 navigator.geolocation.getCurrentPosition(showMap);它向我展示了我的成功!这意味着这个函数 findLoc 被触发了 showMap 函数有问题,但我不知道是什么
    • @TomLiland:对。现在你继续这样做,直到你发现代码的哪一部分实际上是失败的。首先,showMap 开头的警告告诉您该函数是否实际被调用。等等;一般原则现在应该很清楚了。
    • navigator.geolocation.getCurrentPosition(showMap) 似乎有问题,在 findLock 函数启动后没有调用它。我在导航器之后立即发出警报,但消息没有出现。在 iPhone 上,我收到了所有信息。奇怪的小东西:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-19
    相关资源
    最近更新 更多