0

street addressフィールド、、、cityに入力された値を取得し、それらの値を使用してとの非表示フィールドにデータを入力stateしようとしています。zipcodelongitudelatitude

私がやろうとしていることの例をここで見ることができます。私は複数の入力フィールドでそれをやろうとしています。

{...}内はCMS式エンジン用であるため、value=" "無視できます

フォームフィールド:

<div class="formsection clearfix">
    <label for="trainer_address">Street Address</label>
    <span class="directions">This will NOT be displayed in your listing. Only for search Purposes.</span>
    <input type="text" name="trainer_address" id="trainer_address" value="{trainer_address}">
</div>

<div class="formsection clearfix">
    <label for="trainer_city">City</label>
    <span class="directions">The city to be displayed in your listing.</span>
    <input type="text" name="trainer_city" id="trainer_city" value="{trainer_city}">
</div>

<div class="formsection clearfix">
    <label for="trainer_state">State</label>
    <span class="directions">The state to be displayed in your listing.</span>
    <select name="trainer_state">
        {options:trainer_state}
            <option value="{option_value}"{selected}>{option_name}</option>
        {/options:trainer_state}
    </select>
</div>

<div class="formsection clearfix">
    <label for="trainer_zip">Zip Code</label>
    <span class="directions">The zip code to be displayed in your listing.</span>
    <input type="text" name="trainer_zip" id="trainer_zip" value="{trainer_zip}">
</div>

隠された緯度と経度のフィールドは次のとおりです。

<input type="hidden" id="trainer_longitude" name="trainer_longitude" value="{trainer_longitude}" />
<input type="hidden" id="trainer_latitude" name="trainer_latitude" value="{trainer_latitude}" />
4

1 に答える 1

1

これには google geo coder を使用できます。すべての住所フィールドに onchange を結び付けるだけです。完全な住所があれば、このようなことを行って longlat を取得できます。ところで、アドレス形式は、Googleマップで受け入れられる値をかなり許容しています。ここでも受け入れられます。

// リファレンス https://developers.google.com/maps/documentation/javascript/reference#LatLng

// スクリプトを含める src="https://maps.googleapis.com/maps/api/js?sensor=false">

// the method to get the geocode
var geocoder = new google.maps.Geocoder();

function getLatLng (address, callback){
    geocoder.geocode({ 'address': address}, function(results, status){
        if (status == google.maps.GeocoderStatus.OK) {
            callback(results[0].geometry.location)
        }
        else {
            callback(false);
        }
    });
}

// how to use it
getLatLng ("1600 Pennsylvania Ave NW, Washington, DC, United States", function(result){

    if (result == false){ alert("ADDRESS IS NO GOOD"); }
    else {
        alert("Lng: " + result.lng() + " Lat: " +result.lat());
    }    
});
于 2013-03-12T17:24:32.273 に答える