【问题标题】:postcode search for nearest location邮政编码搜索最近的位置
【发布时间】:2013-02-28 13:58:26
【问题描述】:

谁能告诉我如何将英国位置列表添加到谷歌地图,然后使用邮政编码搜索最近的位置。

我有一个 google api,有人可以帮忙吗?

非常感谢

更新:非常感谢您的回复。

我有一个包含地址的 CSV 文件,是否可以即时获取每个地址的地理编码并填充我的谷歌地图?

我目前正在查询我的数据库以获取存储的地理编码。

这是我的示例:

http://www.mharrisweb.co.uk/maps/map.html

【问题讨论】:

    标签: google-maps postal-code


    【解决方案1】:
    /*jslint browser: true */
    /*global google */
    function toRad(value) {
        "use strict";
        /** Converts numeric degrees to radians */
        return value * (Math.PI / 180);
    }
    
    function getDistanceFromLatLonInKm(lat1, lon1, lat2, lon2, unit) {
        "use strict";
        var a, c, d, R, dLat, dLon;
        R = (unit === 'mi') ? 3958.75587 : (unit === 'ft') ? 20902230.9711286 : 6371; // Mean radius of the earth in km
        dLat = toRad(lat2 - lat1); // toRad below
        dLon = toRad(lon2 - lon1);
        a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(toRad(lat1)) * Math.cos(toRad(lat2)) * Math.sin(dLon / 2) * Math.sin(dLon / 2);
        c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
        d = R * c; // Distance in km
        return d;
    }
    
    function calcDistance(checkCoords, lat, lng) {
        "use strict";
        var closestLatLng, distance = 7000, i, latlng;
        for (i = 0; i < checkCoords.length; i = i + 1) {
            latlng = checkCoords[i].split(",");
            if (getDistanceFromLatLonInKm(latlng[0], latlng[1], lat, lng) < distance) {
                distance = getDistanceFromLatLonInKm(latlng[0], latlng[1], lat, lng);
                closestLatLng = [latlng[0], latlng[1]];
            }
        }
        return closestLatLng;
    }
    
    function addMarker(lat, lng, title, map) {
        "use strict";
        var marker = new google.maps.Marker({
            position: new google.maps.LatLng(lat, lng),
            title: title
        });
        marker.setMap(map);
        return (lat + ',' + lng);
    }
    
    function show_map(lat, lng) {
        "use strict";
        var checkCoords = [], closestLatLng, latlng, map, myOptions;
        latlng = new google.maps.LatLng(lat, lng);
        myOptions = {
            zoom: 10,
            center: latlng,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        map = new google.maps.Map(document.getElementById("map_container"), myOptions);
        checkCoords[0] = addMarker(51.477118, -0.000732, 'Royal Observatory, Greenwich, London', map);
        checkCoords[1] = addMarker(38.92126, -77.066442, 'US Naval Observatory, Washington, DC', map);
        checkCoords[2] = addMarker(48.853499, 2.348090, 'Notre Dame Cathedral, Paris', map);
        closestLatLng = calcDistance(checkCoords, lat, lng);
        map.panTo(new google.maps.LatLng(closestLatLng[0], closestLatLng[1]));
    }
    
    function getLatLng(postcode) {
        "use strict";
        var geocoder = new google.maps.Geocoder();
        geocoder.geocode({
            'address': postcode
        }, function (results, status) {
            if (status === google.maps.GeocoderStatus.OK) {
                show_map(results[0].geometry.location.lat(), results[0].geometry.location.lng());
            }
        });
    }
    
    function get_location() {
        "use strict";
        document.getElementById('map').innerHTML = '<form id="postcodeEntry" method="post" action="#" onsubmit="getLatLng(this.postcode.value);return false;">'
            + '<fieldset>'
            + '<label for="postcode">Enter your postcode for directions</label>'
            + '<input type="text" name="postcode" id="postcode" />' + '<input type="submit" />'
            + '</fieldset>'
            + '</form>'
            + '<div id="map_container" style="width:300px;height:300px">Map will appear after postcode entry</div>';
    }
    
    get_location();
    

    *编辑通过 jslint

    这是您所追求的基本形式。您可以在此(更新)jsfiddle 上看到它的实际效果。

    【讨论】:

      【解决方案2】:

      我想您想在说“添加位置列表”时添加标记,为此,您可以执行循环并为每个位置添加标记。

      你可以这样做:

      function addMarker (locations){
         for(var i =0; i< locations.length; i ++)
         {
             // Create a new location
             var loc = new google.maps.LatLng(locations[i].latitude, locations[i].longitude);
      
             // Create the marker options
             var markerOptions = {
                 map: yourMap,
                 position: loc
             };
             // Add the marker on map
             var marker = new google.maps.Marker(markerOptions);
         }
      }
      

      而且你的地图上都有你的所有位置。

      您说过要进行邮政编码搜索以找到最近的。

      所以我发现这个link 会让你感兴趣。

      希望对您有所帮助。

      【讨论】:

        最近更新 更多