0

ユーザーが郵便番号をフォームに入力し、データベースに保存されている場所の郵便番号に最も近い一致を見つけて、これら 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);
        }
    }   
});

ありがとう!

4

0 に答える 0