ユーザーが郵便番号をフォームに入力し、データベースに保存されている場所の郵便番号に最も近い一致を見つけて、これら 2 つの場所の間の距離を表示できるようにするフォームを Web サイトに作成しました。
これは、有効な郵便番号が入力された場合は正常に機能しますが、無効な郵便番号が入力された場合や、世界中の他の場所に同様の場所がある場合は、奇妙な住所が返されることがあります。たとえば、私のデータベースの郵便番号の 1 つは cr4 ですが、値「cr」だけをファインダーに入力すると、場所「カリフォルニア」が開始点として返されますが、これは正しくありません。
私の質問は、Google Maps API が郵便番号の場所のみを検索できるようにする方法はありますか? ドキュメントで検索しましたが、これはどこにも見当たりません。
これが私のコードです:
私のデータベース内の場所の例:
{
address1: "Unit 2",
address2: "Leslie Retail Park",
address3: "Boucher Road",
address4: "Belfast",
postcode: "BT12 6HH",
name: "Belfast",
lat: 54.577708,
lon: -5.961649,
opening_hours: "Mon-Thu: 6:30 AM - 10:00 PM ^Fri: 6:30 AM - 8:00 PM ^Sat-Sun: 9:00 AM - 5:00 PM ^Bank Holidays: 9:00 AM - 5:00 PM",
bank_holidays: "",
id: 1,
targetpage: "<?php echo $this->baseurl; ?>/index.php/our-gyms/fitspace-belfast",
image: "<?php echo $this->baseurl; ?>/images/belfast.jpg"
}
そして私のGoogle Maps API検索コード:
var geocoder, location1, location2;
jQuery('#postcode_search_form').submit(function(e) {
e.preventDefault();
geocoder = new GClientGeocoder();
geocoder.getLocations(document.forms[0].postcode_search.value, function (response) {
if (response || response.Status.code != 200) {
location1 = {lat: response.Placemark[0].Point.coordinates[1], lon: response.Placemark[0].Point.coordinates[0], address: response.Placemark[0].address};
calculateDistance();
}
});
});
function calculateDistance()
{
var closeClubs = [];
var sortable = [];
var resultsArray = new Array();
try {
jQuery(gyms).each(function(i, v) {
var glatlng1 = new GLatLng(location1.lat, location1.lon);
var glatlng2 = new GLatLng(v.lat, v.lon);
var miledistance = glatlng1.distanceFrom(glatlng2, 3959).toFixed(1);
if(miledistance <= 50) {
gyms[i].distance = miledistance;
closeClubs.push(v);
}
var kmdistance = (miledistance * 1.609344).toFixed(1);
});
closeClubs.sort(function(a, b) {
return a.distance - b.distance;
});
document.getElementById('club_search_start').style.display = "block";
document.getElementById('club_search_start').innerHTML = '<strong>Your location: </strong>' + location1.address;
var html = "";
for(var i = 0; i < closeClubs.length; i++) {
html += "<div class='club'>";
html += "<div class='result_left'><img src='" + closeClubs[i].image + "' /></div>";
html += "<div class='result_right'><a href='" + closeClubs[i].targetpage + "'>" + closeClubs[i].name + "</a>";
html += "<p class='club_postcode'>" + closeClubs[i].postcode + "</p>";
html += "<p class='club_description'>" + closeClubs[i].opening_hours + "</p>";
html += "<p class='distance'>Distance:" + closeClubs[i].distance + " miles </p>";
html += "</div>"
html += "</div>"
}
jQuery('#club_search_results').hide().html(html).fadeIn('slow');
}
catch (error) {
alert(error);
}
}
});
ありがとう!