(postal adress)Adresse aus GeoField generieren?
Eingetragen von xip (65)
am 12.09.2012 - 09:06 Uhr in
am 12.09.2012 - 09:06 Uhr in
Hallo,
bin gerade dabei eine Umkreissuche mit Proximity zu basteln. Leider benötige ich dazu Adressen oder Postleitzahlen. Habe aber in meiner Datenbank nur GeoField Informationen. Wollte jetzt die User das nicht doppelt eingeben lassen, erstmal nen Punkt auf der Karte und dann noch mal dazu die Adresse. Nene, lieber automatisch. Umgekeht geht das ja über das "geocode from another field". Diese Funktion nur umgekehrt wäre schick! :)
Habt ihr da eine Idee?
Vielen Dank
-Patrick
- Anmelden oder Registrieren um Kommentare zu schreiben
falles es wen interessiert
am 15.09.2012 - 15:02 Uhr
falles es wen interessiert wies geht:
Hier die Lösung:
<?php
function googlereversegeocode_node_presave($node)
{
require_once DRUPAL_ROOT . '/includes/locale.inc';
$latlng = $node->field_posi['und'][0]['lat'].','.$node->field_posi['und'][0]['lon'];
$google_revgeocode = xip_geolocate($latlng);
$node->field_adress['und'][0]['postal_code'] = $google_revgeocode['plz'];
$node->field_adress['und'][0]['thoroughfare'] = $google_revgeocode['Strasse'];
$node->field_adress['und'][0]['locality'] = $google_revgeocode['Stadt'];
// Wenn das Land nicht gefunden wird, dann wird ein false gesetzt. das wird dann ignoriert, also nicht bearbeiten.
$country_list = country_get_list();
$country = $google_revgeocode['Land'];
$langcode = array_search(t($country), $country_list);
$node->field_adress['und'][0]['country'] = $langcode;
}
function xip_geolocate($location) {
$data = array ( 'Strasse' => NULL,
'plz' => NULL,
'Land' => NULL,
'Stadt' => NULL );
$json = drupal_http_request("http://maps.googleapis.com/maps/api/geocode/json?latlng=$location&sensor=true");
$response = drupal_json_decode($json->data);
switch ($response['status']) {
case 'OK':
foreach($response['results'] as $results)
{
if (isset($results['address_components'][0]['types'][0]))
{
if(strcmp($results['address_components'][0]['types'][0],"postal_code")==0 && !isset($data['plz']))
{
$data['plz'] = $results['address_components'][0]['long_name'];
}
if(strcmp($results['address_components'][0]['types'][0],"route")==0 && !isset($data['Strasse']))
{
$data['Strasse'] = $results['address_components'][0]['long_name'];
}
if(strcmp($results['address_components'][0]['types'][0],"country")==0 && !isset($data['Land']))
{
$data['Land'] = $results['address_components'][0]['long_name'];
}
if(strcmp($results['address_components'][0]['types'][0],"locality")==0 && !isset($data['Stadt']))
{
$data['Stadt'] = $results['address_components'][0]['long_name'];
}
}
}
break;
case 'ZERO_RESULTS':
break;
case 'OVER_QUERY_LIMIT':
watchdog('geolocate', t('OVER QUERY LIMIT'), array(), WATCHDOG_ALERT);
break;
}
if(!isset($data['Stadt']))
$data['Stadt']=' ';
if(!isset($data['Land']))
$data['Land']=' ';
if(!isset($data['plz']))
$data['plz']=' ';
if(!isset($data['Strasse']))
$data['Strasse']=' ';
return($data);
}
?>