【问题标题】:Google maps and shadowbox谷歌地图和影子盒
【发布时间】:2011-09-27 18:11:49
【问题描述】:

我正在构建一个在 shadowbox 中加载谷歌地图的 javascript 函数,使用此代码非常容易(我使用名为 GeoPlugin 的插件来获取纬度和经度,因为我现在不知道如何获取我的纬度和经度自动):

function initGeoLocationOnDemand() {

    $('a.btnInitGeoLoc').click(function () {
        if (GBrowserIsCompatible()) {
            Shadowbox.open({
                player: "html",
                content: "",
                height: 300,
                width: 500,
                options: {
                    onFinish: function (item) {
                        var body = document.getElementById(Shadowbox.playerId);
                        var map = new GMap2(body);
                        //using geoPlugin to get lat and long
                        var point = new GLatLng(geoplugin_latitude(), geoplugin_longitude());
                        map.setCenter(point, 15);
                        var marker = new GMarker(point);
                        var addrFields = ['street_address'];
                        map.addOverlay(marker);

                        marker.openInfoWindow(document.createTextNode("hello");
                        // add some simple controls
                        map.addControl(new GSmallMapControl());
                        map.addControl(new GMapTypeControl());
                    }
                }
            });
        } else {
            alert("Your browser is not compatible with Google Maps!");
        }
    });
    Shadowbox.init();
}

现在我想你使用GoogleMaps Reverse Geocoding 进入 googleMaps 的信息窗口中的标记信息,例如:城市名称、国家名称、街道名称、邮政编码等...

我按照 GoogleMaps api 编写了这段代码,但它不再工作了……总是使用 GeoPlugin:

function initGeoLocationOnDemand() {

    $('a.btnInitGeoLoc').click(function () {
        if (GBrowserIsCompatible()) {
            Shadowbox.open({
                player: "html",
                content: "",
                height: 300,
                width: 800,
                options: {
                    onFinish: function (item) {

                        var body = document.getElementById(Shadowbox.playerId);
                        var geocoder;
                        var map = new google.maps.Map(body);
                        var infowindow = new google.maps.InfoWindow();
                        var marker;
                        function initialize() {
                            geocoder = new google.maps.Geocoder();
                            var latlng = new google.maps.LatLng(geoplugin_latitude(),geoplugin_longitude());
                            var myOptions = {
                                zoom: 8,
                                center: latlng,
                                mapTypeId: google.maps.MapTypeId.ROADMAP
                            }
                            map = new google.maps.Map(body, myOptions);
                        }

                        function codeLatLng() {
                            var input = document.getElementById("latlng").value;
                            var latlngStr = input.split(",", 2);
                            var lat = parseFloat(latlngStr[0]);
                            var lng = parseFloat(latlngStr[1]);
                            var latlng = new google.maps.LatLng(lat, lng);
                            geocoder.geocode({ 'latLng': latlng }, function (results, status) {
                                if (status == google.maps.GeocoderStatus.OK) {
                                    if (results[1]) {
                                        map.setZoom(11);
                                        marker = new google.maps.Marker({
                                            position: latlng,
                                            map: map
                                        });
                                        infowindow.setContent(results[1].formatted_address);
                                        infowindow.open(map, marker);
                                    }
                                } else {
                                    alert("Geocoder failed due to: " + status);
                                }
                            });
                        }
                    }
                }
            });
        } else {
            alert("Your browser is not compatible with Google Maps!");
        }
    });
    Shadowbox.init();
}

有没有不用插件就可以得到经纬度的方法?

有没有办法获取国家名称、城市名称、街道名称、邮政编码等信息?

提前感谢您的帮助!

【问题讨论】:

    标签: javascript google-maps shadowbox


    【解决方案1】:

    你想要什么地方的经纬度?客户端机器?

    【讨论】:

    • 解释得很好......我想得到一切,如果你允许在我的网站上的 geoLocation 我想得到街道名称、国家名称、城市名称、邮政编码等......跨度>
    • 只有一种可能获得此类信息 - 从地理位置数据库中获取,该数据库将您的网站访问者的 IP 地址与其地理位置联系起来。 JS 可以访问的访问者的客户端计算机上没有存储任何内容。所以这可能是您关于是否可以在没有插件的情况下获取数据的问题的答案。
    • 好的,我可以使用 GeoPlugin 来获取纬度和经度,现在从这两个信息中我如何从谷歌地图中获取街道名称、国家名称、邮政编码等......?跨度>
    • ... 使用谷歌地理编码的东西。但是你只能在谷歌地图上使用它。你不能在你自己的html上使用它。
    • 有这样的插件吗?我需要通过 GeoLocation 获取这些信息...
    【解决方案2】:

    我不熟悉Shadowbox,但在处理Geocoder 的结果时肯定至少存在一个问题。您应该使用 results[0] 而不是 results[1] 来获取 latlng 的第一个(如果有的话)反向地理编码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-26
      • 1970-01-01
      • 2016-01-29
      • 1970-01-01
      • 1970-01-01
      • 2019-07-15
      • 1970-01-01
      相关资源
      最近更新 更多