2010-09-27 9 views
27

Cześć, co to jest formuła, aby uzyskać długość i szerokość geograficzną dowolnego adresu, jeśli mam street_name, State_name, City_name, Country_name i kod pocztowy w PHP? DziękiJak uzyskać długość i szerokość geograficzną dowolnego adresu?

+0

Hi Ajay - Myślę, że masz na myśli "Długość" – Paddyslacker

+5

możliwy duplikat [Jak uzyskać długości i szerokości geograficznej na adres ulicy programowo (i prawnie)] (http: // stackoverflow.com/questions/158474/how-to-get-longitude-and-latitude-for-a-street-address-programme-and-l) – jball

+0

Aby wyjaśnić, nie ma formuły, ale firmy świadczą usługi geokodowania. Zobacz powyższy link "dupe". – jball

Odpowiedz

1

Potrzebujesz dostępu do usługi geokodowania (tj. Od Google), nie ma prostej formuły przesyłania adresów do współrzędnych geograficznych.

2

Możesz użyć do tego interfejsu API Map Google. Więcej informacji można znaleźć w poście na blogu poniżej.

http://stuff.nekhbet.ro/2008/12/12/how-to-get-coordinates-for-a-given-address-using-php.html

+1

Podczas gdy ten link może odpowiedzieć na pytanie, lepiej umieścić w nim istotne części odpowiedzi i podać link do odsyłacza. Odpowiedzi dotyczące linków mogą stać się nieprawidłowe, jeśli strona z linkami się zmieni. - [Z recenzji] (/ opinia/niskiej jakości-posts/18603186) – Don

0

Nie ma forumula, jak nazwy ulic i miast są zasadniczo rozdawane losowo. Adres należy wyszukać w bazie danych. Możesz również wyszukać kod pocztowy w bazie danych dla regionu, dla którego przeznaczony jest kod pocztowy.

Nie wspomniałeś o kraju, więc zakładam, że chcesz tylko adresy w USA. Istnieje wiele baz danych, z których możesz korzystać, niektóre są bezpłatne, inne nie.

Możesz również użyć interfejsu API Map Google, aby wyszukać adres w swojej bazie danych. Jest to prawdopodobnie najłatwiejsze rozwiązanie, ale wymaga, aby aplikacja zawsze miała działające połączenie internetowe.

3

Należy spojrzeć na PHP5 biblioteki Geocoder :)

+1

Podczas gdy ten link może odpowiedzieć na pytanie, lepiej umieścić tutaj istotne części odpowiedzi i podać link do odsyłacza. Odpowiedzi dotyczące linków mogą stać się nieprawidłowe, jeśli strona z linkami się zmieni. - [Z recenzji] (/ opinia/niskiej jakości-posts/18603183) –

77

można użyć kodu miech uzyskania lat, długo za pomocą php. Oto dwa rodzaje dostać ten

Type-1

<?php 
    // Get lat and long by address   
     $address = $dlocation; // Google HQ 
     $prepAddr = str_replace(' ','+',$address); 
     $geocode=file_get_contents('https://maps.google.com/maps/api/geocode/json?address='.$prepAddr.'&sensor=false'); 
     $output= json_decode($geocode); 
     $latitude = $output->results[0]->geometry->location->lat; 
     $longitude = $output->results[0]->geometry->location->lng; 

?> 

edit - Google Maps wnioski muszą być nad https

Type-2

<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script> 
<script> 
    var geocoder; 
    var map; 
    function initialize() { 
    geocoder = new google.maps.Geocoder(); 
    var latlng = new google.maps.LatLng(50.804400, -1.147250); 
    var mapOptions = { 
    zoom: 6, 
    center: latlng 
    } 
    map = new google.maps.Map(document.getElementById('map-canvas12'), mapOptions); 
    } 

    function codeAddress(address,tutorname,url,distance,prise,postcode) { 
    var address = address; 

    geocoder.geocode({ 'address': address}, function(results, status) { 
    if (status == google.maps.GeocoderStatus.OK) { 
     map.setCenter(results[0].geometry.location); 
     var marker = new google.maps.Marker({ 
     map: map, 
     position: results[0].geometry.location 
    }); 

    var infowindow = new google.maps.InfoWindow({ 
    content: 'Tutor Name: '+tutorname+'<br>Price Guide: '+prise+'<br>Distance: '+distance+' Miles from you('+postcode+')<br> <a href="'+url+'" target="blank">View Tutor profile</a> ' 
    }); 
    infowindow.open(map,marker); 

     } /*else { 
     alert('Geocode was not successful for the following reason: ' + status); 
    }*/ 
    }); 
} 


    google.maps.event.addDomListener(window, 'load', initialize); 

window.onload = function(){ 
    initialize(); 
    // your code here 
    <?php foreach($addr as $add) { 

    ?> 
    codeAddress('<?php echo $add['address']; ?>','<?php echo $add['tutorname']; ?>','<?php echo $add['url']; ?>','<?php echo $add['distance']; ?>','<?php echo $add['prise']; ?>','<?php echo substr($postcode1,0,4); ?>'); 
    <?php } ?> 
}; 
    </script> 

<div id="map-canvas12"></div> 
+0

Dokładnie tego szukałem. Dziękuję Ci! Czy mogę o coś zapytać? Potrzebuję tej funkcji tylko do wewnętrznych obliczeń. Dokumentacja API wyraźnie mówi, że interfejs API może być używany wyłącznie w połączeniu z usługą Google Maps. Czy Twój kod jest przykładowy w tym stanie? – CHaP

+0

Kod typu 2 zawiera znaczniki adresu –

+0

W typie 1 otrzymuję komunikat "Przekroczyłeś dzienny limit żądań dla tego interfejsu API." jako komunikat o błędzie po kilku testach ... jakiekolwiek obejście, aby nie otrzymać dziennego limitu żądań? – Jeremy

1

PHP ma wbudowane funkcje umożliwiające uzyskanie położenia geograficznego kation. Może rzucić okiem tutaj: http://php.net/manual/en/ref.geoip.php

Według instrukcji php „. To rozszerzenie wymaga wersji biblioteki GeoIP C 1.4.0 lub wyższy do instalacji można pobrać najnowszą wersję ze strony» http://www.maxmind.com/app/c i skompilować go samodzielnie.”

1

wymyśliłem następujących składników, które uwzględnia śmieci przeszedł w upadających i file_get_contents ....

function get_lonlat( $addr ) { 
    try { 
      $coordinates = @file_get_contents('http://maps.googleapis.com/maps/api/geocode/json?address=' . urlencode($addr) . '&sensor=true'); 
      $e=json_decode($coordinates); 
      // call to google api failed so has ZERO_RESULTS -- i.e. rubbish address... 
      if (isset($e->status)) { if ($e->status == 'ZERO_RESULTS') {echo '1:'; $err_res=true; } else {echo '2:'; $err_res=false; } } else { echo '3:'; $err_res=false; } 
      // $coordinates is false if file_get_contents has failed so create a blank array with Longitude/Latitude. 
      if ($coordinates == false || $err_res == true ) { 
       $a = array('lat'=>0,'lng'=>0); 
       $coordinates = new stdClass(); 
       foreach ( $a as $key => $value) 
       { 
        $coordinates->$key = $value; 
       } 
      } else { 
       // call to google ok so just return longitude/latitude. 
       $coordinates = $e; 

       $coordinates = $coordinates->results[0]->geometry->location; 
      } 

      return $coordinates; 
    } 
    catch (Exception $e) { 
    } 

następnie dostać przewody: gdzie $ pc jest kod pocztowy lub adres .... $ address = get_lonlat ($ pc); $ l1 = $ adres-> łat; $ l2 = $ adres-> lng;

9
<?php 
$address = 'BTM 2nd Stage, Bengaluru, Karnataka 560076'; // Address 

// Get JSON results from this request 
$geo = file_get_contents('http://maps.googleapis.com/maps/api/geocode/json?address='.urlencode($address).'&sensor=false'); 
$geo = json_decode($geo, true); // Convert the JSON to an array 

if (isset($geo['status']) && ($geo['status'] == 'OK')) { 
    $latitude = $geo['results'][0]['geometry']['location']['lat']; // Latitude 
    $longitude = $geo['results'][0]['geometry']['location']['lng']; // Longitude 
}?> 
Powiązane problemy