谷歌地图地理编码显示错误的地址(Google Maps Geocode Showing Wrong

2019-11-01 22:48发布

我有存储在数据库中的位置,而我通过他们的循环,并把标记下来每个位置上的谷歌地图(API V3)(JS和剃须刀的组合)。

我使用的代码是一个问题,我问一个几天前在计算器上。 有问题的两个地址是:

  1. 6-7厅举行,斯伯丁,PE11,撒上,英国
  2. 29联盟街,伯明翰,B2 4LR,英国

这些地址完全显示在这里 。 但是,当我尝试他们在我的网站(目前本地主机),在旧金山一个显示了和其他在路易斯安那州的美国!

下面是我使用(注意,一些C#/剃须刀混居地)的JavaScript代码:

<script type="text/javascript">

    // Get the map container node.
    var mapContainer = $("#myMap");
    var geocoder = new google.maps.Geocoder();

    // Create the new Goole map controller using our
    // map (pass in the actual DOM object). Center it
    // above the first Geolocated IP address.
    map = new google.maps.Map(
        mapContainer[ 0 ],
        {
            zoom: 11,
            center: new google.maps.LatLng(
                51.51121,
                -0.11982
            ),
            mapTypeId: google.maps.MapTypeId.ROADMAP
        }
    );


    // I add a marker to the map using the given latitude
    // and longitude location.
    function addMarker(latitude, longitude, label) {
        var myLatlng = new google.maps.LatLng(latitude, longitude);
        // Create our "tiny" marker icon
        var iconImage = 'http://www.google.com/intl/en_us/mapfiles/ms/micons/blue-dot.png';

        // Create the marker - this will automatically place it
        // on the existing Google map (that we pass-in).
        var marker = new google.maps.Marker({
            map: map,
            position: new google.maps.LatLng(
                latitude,
                longitude
            ),
            title: (label || ""),
            icon: iconImage,
            center: myLatlng,
            zoom: 10
        });



        // Return the new marker reference.
        return(marker);
    }

    // I update the marker's position and label.
    function updateMarker( marker, latitude, longitude, label ){
        // Update the position.
        marker.setPosition(
            new google.maps.LatLng(
                latitude,
                longitude
            )
        );

        // Update the title if it was provided.
        if (label){
            marker.setTitle( label );
        }
    }

    function placeMarkerForAddress(address, city, postcode, country) {
        geocoder.geocode( { 'address': address}, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                var marker = new google.maps.Marker({
                    map: map,
                    position: results[0].geometry.location,
                    title: address + ', ' + city + ', ' + postcode + ', ' + country
                });
            } else {
                alert('Geocode was not successful for the following reason: ' + status);
            }
        });
    }

    //now add markers
    @foreach (var item in Model.Events) {
        @:placeMarkerForAddress('@item.Location.Address', '@item.Location.City', '@item.Location.PostCode', 'UK');
        @:console.log('boo!');
    }

    // -------------------------------------------------- //
    // -------------------------------------------------- //
    // -------------------------------------------------- //
    // -------------------------------------------------- //


    // Check to see if this browser supports geolocation.
    if (navigator.geolocation) {

        // This is the location marker that we will be using
        // on the map. Let's store a reference to it here so
        // that it can be updated in several places.
        var locationMarker = null;


        // Get the location of the user's browser using the
        // native geolocation service. When we invoke this method
        // only the first callback is requied. The second
        // callback - the error handler - and the third
        // argument - our configuration options - are optional.
        navigator.geolocation.getCurrentPosition(
            function (position) {

                // Check to see if there is already a location.
                // There is a bug in FireFox where this gets
                // invoked more than once with a cahced result.
                if (locationMarker) {
                    return;
                }

                // Log that this is the initial position.
                console.log("Initial Position Found");

                // Add a marker to the map using the position.
                locationMarker = addMarker(
                    position.coords.latitude,
                    position.coords.longitude,
                    "Initial Position"
                );
            },
            function (error) {
                console.log("Something went wrong: ", error);
            },
            {
                timeout: (5 * 1000),
                maximumAge: (1000 * 60 * 15),
                enableHighAccuracy: true
            }
        );

        // Now tha twe have asked for the position of the user,
        // let's watch the position to see if it updates. This
        // can happen if the user physically moves, of if more
        // accurate location information has been found (ex.
        // GPS vs. IP address).
        //
        // NOTE: This acts much like the native setInterval(),
        // invoking the given callback a number of times to
        // monitor the position. As such, it returns a "timer ID"
        // that can be used to later stop the monitoring.
        var positionTimer = navigator.geolocation.watchPosition(
            function (position) {

                // Log that a newer, perhaps more accurate
                // position has been found.
                console.log("Newer Position Found");

                // Set the new position of the existing marker.
                updateMarker(
                    locationMarker,
                    position.coords.latitude,
                    position.coords.longitude,
                    "Updated / Accurate Position"
                );
            }
        );

        // If the position hasn't updated within 5 minutes, stop
        // monitoring the position for changes.
        setTimeout(
            function () {
                // Clear the position watcher.
                navigator.geolocation.clearWatch(positionTimer);
            },
            (1000 * 60 * 5)
        );
    }
</script>

我很困惑! 我试着用Firebug调试JS,但我认为必须有某种对地址解析API超时机制,它给我的错误,当我尝试通过代码在调试模式下移动。 此外,我不能完成我的身边,为什么我的地图周围没有用户发现位置为中心的头。

Answer 1:

尝试使用完整的地址为您geolocator请求,该区域设置为英国(如果您所有的地址都在英国),这应该缩小搜索了一下

function placeMarkerForAddress(address, city, postcode, country) {
    var fullAddress = address + ', ' + city + ', ' + postcode + ', ' + country;
    geocoder.geocode( { 'address': fullAddress, 'region':'UK'}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            var marker = new google.maps.Marker({
                map: map,
                position: results[0].geometry.location,
                title: fullAddress
            });
        } else {
                alert('Geocode was not successful for the following reason: ' + status);
        }
    });
}

当你得到你需要将地图更新的位置以及移动标记

function updateMarker( marker, latitude, longitude, label ){
    // Update the position.
    var pos=new google.maps.LatLng(latitude,longitude);
    // move the marker
    marker.setPosition(pos);
    // centre the map
    marker.getMap().setCenter(pos);
    // Update the title if it was provided.
    if (label){
        marker.setTitle( label );
    }
}


文章来源: Google Maps Geocode Showing Wrong Address