Получите аккуратно отформатированный адрес: Latlng -> Address Google Maps

Я создаю страницу, которая использует объект геокодера Google Maps для поиска введенного пользователем адреса. Я могу найти точки широты и долготы, но я хотел бы отформатировать адрес (очистить его), чтобы я мог хранить широту, долготу и адрес в 3 отдельных полях в базе данных MySQL. Вот мой текущий код:

также не стесняйтесь критиковать текущий код с точки зрения безопасности, я совершенно новичок в API Gmaps и не очень хорошо разбираюсь в js

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Basic Map</title>


<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;sensor=true_or_false&amp;key=ABQIAAAAKgJa4e_5XNFRJJF7MsI1eRQN1RsnicNCcG4bidjiZE76b9vSTBTCbiFNb-LGPKHeiBuV_2yfnWNSTA" type="text/javascript">
</script>



</head>

<body>


Input address Here: <input type="text" name="locate_address" id="locate_address" />
<input type="button" name="locate_address" value="Locate Address" onclick="locateAddress()" />
<div>
<p id="lat">Lat: </p>
<p id="lng">Lng: </p>
<p id="address"></p>
</div>

<br />
<div id="map" style="width: 300px; height:300px"></div>
<script type="text/javascript">

function locateAddress() {
    var address = document.getElementById('locate_address').value;
    geocoder = new GClientGeocoder();

    geocoder.getLatLng (
        address,
        function (point) {
            if (!point) {
                alert(address + " not found!");
            }
            else {
                map.setCenter(point, 13);
                var marker = new GMarker (point);
                map.addOverlay (marker);
                marker.openInfoWindowHtml(address);
                document.getElementById('address').innerHTML = address;
                document.getElementById('lat').innerHTML += point.y;
                document.getElementById('lng').innerHTML += point.x;
            }
        })

}



var map = new GMap2(document.getElementById("map"));
map.setCenter(new GLatLng(39.1700149, -86.5148133), 13);

map.setMapType(G_NORMAL_MAP);



</script>







</body>
</html>

person Eric T    schedule 19.07.2011    source источник
comment
Используйте v3 API Карт Google. Версия 2, которую вы используете, устарела   -  person Michal    schedule 20.07.2011
comment
Как бы я сделал это в версии 3?   -  person Eric T    schedule 20.07.2011


Ответы (1)


Если вы действительно хотите использовать v2 API

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Basic Map</title>


<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;sensor=true_or_false&amp;key=ABQIAAAAKgJa4e_5XNFRJJF7MsI1eRQN1RsnicNCcG4bidjiZE76b9vSTBTCbiFNb-LGPKHeiBuV_2yfnWNSTA" type="text/javascript">
</script>



</head>

<body>


Input address Here: <input type="text" name="locate_address" id="locate_address" />
<input type="button" name="locate_address" value="Locate Address" onclick="locateAddress()" />
<div>
<p id="lat">Lat: </p>
<p id="lng">Lng: </p>
<p id="address"></p>
</div>

<br />
<div id="map" style="width: 300px; height:300px"></div>
<script type="text/javascript">

function locateAddress() {
    var address = document.getElementById('locate_address').value;
    geocoder = new GClientGeocoder();


     geocoder.getLocations(address, getFormattedAddress)

}

function getFormattedAddress(response){
console.log(response)
     if (!response || response.Status.code != 200) {
    alert("\"" + address + "\" not found");
  } else {
    //get itemised address
        street = response.Placemark[0].AddressDetails.Country.AdministrativeArea.Locality.Thoroughfare.ThoroughfareName;
        city = response.Placemark[0].AddressDetails.Country.AdministrativeArea.AdministrativeAreaName
    locality = response.Placemark[0].AddressDetails.Country.AdministrativeArea.Locality.LocalityName;
    postcode = response.Placemark[0].AddressDetails.Country.AdministrativeArea.Locality.PostalCode.PostalCodeNumber;
    country = response.Placemark[0].AddressDetails.Country.CountryName;
    alert(street + " " + locality + " " +postcode + " " +country + " "+city)


    place = response.Placemark[0];
    point = new GLatLng(place.Point.coordinates[1],
                        place.Point.coordinates[0]);
    marker = new GMarker(point);
    map.addOverlay(marker);
    marker.openInfoWindowHtml(place.address + '<br>' + 
      '<b>Country code:</b> ' + place.AddressDetails.Country.CountryNameCode);
  }
}

var map = new GMap2(document.getElementById("map"));
map.setCenter(new GLatLng(39.1700149, -86.5148133), 13);

map.setMapType(G_NORMAL_MAP);



</script>







</body>
</html>

для версии 3 см. http://code.google.com/apis/maps/documentation/javascript/services.html#GeocodingResponses

person Michal    schedule 20.07.2011