邮编搜索最近的位置

3
请问有人能告诉我如何在谷歌地图上添加一个英国地点列表,并使用邮政编码搜索最近的地点吗?
我有一个谷歌API,有人可以帮忙吗?
非常感谢。
更新:非常感谢您的回复。
我有一个包含地址的CSV文件,是否可能即时获取每个地址的地理编码,并填充我的谷歌地图?
我目前查询我的数据库以获取存储的地理编码。
这是我的样本:

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

2个回答

2
/*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();

这是你想要的基本形式。你可以在这个(更新后的)jsfiddle上看到它的实际效果。

0

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

你可以这样做:

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);
   }
}

而且你的地点都标在地图上。

你说想要做一个邮编搜索来找到最近的地点。

所以我找到了这个链接,可能会对你有帮助。

希望能帮到你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接