'Brandenburg', 'BE' => 'Berlin', 'BW' => 'Baden-Württemberg', 'BY' => 'Bayern', 'HB' => 'Bremen', 'HE' => 'Hessen', 'HH' => 'Hamburg', 'MV' => 'Mecklenburg-Vorpommern', 'NI' => 'Niedersachsen', 'NW' => 'Nordrhein-Westfalen', 'RP' => 'Rheinland-Pfalz', 'SH' => 'Schleswig-Holstein', 'SL' => 'Saarland', 'SN' => 'Sachsen', 'ST' => 'Sachsen-Anhalt', 'TH' => 'Thüringen' ); } /** * Map link. * * @param array $location * Is an associative array that represents a full location where * 'street' => the street portions of the location * 'supplemental' => additional street portion of the location * 'province' => the province, state, or territory * 'country' => lower-cased two-letter ISO code (REQUIRED) * * @param array $hide * Is associative array that represents a full location in the same way that * parameter $location_b does. * * @returns string * A link to driving directions */ function location_map_link_de($location = array(), $hide = array()) { $map_links = array(); // For now, just call the suchen (tinfo) function. May want to make this configurable on some level // in order to maintain freedom of choice so users and site-admins don't have to be slaves // to tinfo!.... not that I have anything personal against tinfo!. if ($link = _location_map_link_de_suchen($location)) { $map_links['suchen'] = $link; } return $map_links; } /** * Map link. */ function _location_map_link_de_suchen($location = array()) { $get_query = '?'; $get_query .= 'where='; $query_parts = array(); if (isset($location['street'])) { $query_parts[] = $location['street']; } if ($location['postal_code'] != '') { $query_parts[] = $location['postal_code']; } if ($location['city'] != '') { $query_parts[] = $location['city']; } $get_query .= urlencode(implode(', ', $query_parts)); return ('http://www.suchen.de/lokalmap' . $get_query); } /** * Providers. */ function location_map_link_de_providers() { return array( 'suchen' => array( 'name' => 'suchen.de (T-Info)', 'url' => 'http://www.suchen.de/', 'tos' => 'http://www.suchen.de/agb', ), 'google' => array( 'name' => t('Google Maps'), 'url' => 'http://maps.google.com', 'tos' => 'http://www.google.com/help/terms_local.html', ), ); } /** * Default providers. */ function location_map_link_de_default_providers() { return array('google'); } /** * Directions link. * * For now, assume site-admin wants driving directions linked to tinfo! * Maybe later, we can add some kind of country-specific settings page that allows the site-admin to * decide which site to link to for driving directions. * * @param array $location_a * Is an associative array that represents a full location where * 'street' => the street portions of the location * 'supplemental' => additional street portion of the location * 'province' => the province, state, or territory * 'country' => lower-cased two-letter ISO code (REQUIRED) * * @param array $location_b * Is associative array that represents a full location in the same way that * parameter $location_b does. * * @returns string * A link to driving directions */ function location_driving_directions_link_de($location_a, $location_b) { return _location_driving_directions_link_de_suchen($location_a, $location_b); } /** * Directions link. * * @param array $location_a * Is an associative array that represents a full location where * 'street' => the street portions of the location * 'supplemental' => additional street portion of the location * 'province' => the province, state, or territory * 'country' => lower-cased two-letter ISO code (REQUIRED) * * @param array $location_b * Is associative array that represents a full location in the same way that * parameter $location_b does. * * @return string * URL with HTTP GET variables * Depending on how full the locationes are, the URL will either point to the driving directions * on tinfo! or, if only partial locationes are provided, a URL that points to the *form* for * tinfo! driving directions where the form is filled with whatever fields have been provided * for the partial location(es). */ function _location_driving_directions_link_de_suchen($location_a, $location_b) { foreach ($location_a as $field => $value) { $location_a[$field] = trim($value); } foreach ($location_b as $field => $value) { $location_b[$field] = trim($value); } if ($location_a['country'] == 'de' and $location_b['country'] == 'de') { $get_query = '?'; // VON. $query_parts = array(); if (isset($location_a['street'])) { $query_parts[] = $location_a['street']; } if ($location_a['postal_code'] != '') { $query_parts[] = $location_a['postal_code']; } if ($location_a['city'] != '') { $query_parts[] = $location_a['city']; } $get_query .= 'route_from=' . urlencode(implode(', ', $query_parts)); // NACH. $query_parts = array(); if (isset($location_b['street'])) { $query_parts[] = $location_b['street']; } if ($location_b['postal_code'] != '') { $query_parts[] = $location_b['postal_code']; } if ($location_b['city'] != '') { $query_parts[] = $location_b['city']; } $get_query .= '&route_to=' . urlencode(implode(', ', $query_parts)); return ('http://www.suchen.de/route' . $get_query); } } /** * Google link. */ function location_map_link_de_google($location = array()) { $query_params = array(); foreach (array('street', 'postal_code', 'city', 'country') as $field) { if (isset($location[$field])) { $query_params[] = $location[$field]; } } if (count($query_params)) { return ('http://maps.google.com?q=' . urlencode(implode(', ', $query_params))); } else { return NULL; } } /** * Theme callback. */ function theme_location_de($location = array(), $hide = array()) { $output = ''; if (count($location)) { $output .= "\n"; $output .= '
' . "\n"; if (!empty($location['name']) && !in_array('name', $hide)) { $output .= '
' . $location['name'] . '
'; } if (!empty($location['street']) && !in_array('street', $hide)) { $output .= '
' . $location['street']; if (!empty($location['additional']) && !in_array('street', $hide)) { $output .= ' ' . $location['additional']; } $output .= '
'; } if ((!empty($location['city']) && !in_array('city', $hide)) || (!empty($location['postal_codet']) && !in_array('postal_code', $hide)) ) { $city_postal = array(); if (!empty($location['postal_code']) && !in_array('postal_code', $hide)) { $city_postal[] = '' . $location['postal_code'] . ''; } if (!empty($location['city']) && !in_array('city', $hide)) { $city_postal[] = '' . $location['city'] . ''; } $output .= '
' . implode(' ', $city_postal) . '
'; } if (!in_array('country', $hide)) { $output .= '
' . t('Germany') . '
'; } if (location_has_coordinates($location)) { $output .= '
'; } $output .= '
'; } return $output; } /** * Returns a lat/lon pair of the approximate center of the given postal code in the given country. * * @param array $location * An associative array $location where only postal code and country are necessary, but can have the keys: * 'street' => the street portion of the location * 'supplemental' => additional street portion of the location * 'province' => the province, state, or territory * 'country' => lower-cased two-letter ISO code (REQUIRED) * 'postal_code' => the international postal code for this location (REQUIRED) * * @return array * An associative array where * 'lat' => approximate latitude of the center of the postal code's area * 'lon' => approximate longitude of the center of the postal code's area */ function location_get_postalcode_data_de($location = array()) { $dash_index = strpos($location['postal_code'], '-'); // First we strip slash off if we're dealing with a 9-digit US zipcode. if ($dash_index === FALSE) { $location['postal_code'] = substr($location['postal_code'], 0, $dash_index); } // Now we pad the thing and query. $row = db_query( "SELECT * FROM {zipcodes} where country = :country AND zip = :zip", array( ':country' => $location['country'], ':zip' => str_pad($location['postal_code'], 5, "0", STR_PAD_LEFT), ) )->fetchObject(); if ($row) { return array( 'lat' => $row->latitude, 'lon' => $row->longitude, 'city' => $row->city, 'province' => $row->state, 'country' => $row->country, ); } else { return NULL; } } /** * Returns minimum and maximum latitude and longitude needed to create a bounding box. */ function location_bounds_de() { return array( 'minlng' => 5.87225, 'minlat' => 47.2249, 'maxlng' => 15.04765, 'maxlat' => 55.0839, ); }