getArraySQL($oDB->getDBQuotedList($mLangPref)); } if (!isset($sHousenumber)) { $sHousenumber = -1; } $sSQL = 'SELECT *,'; $sSQL .= ' get_name_by_language(name,'.$mLangPref.') as localname'; $sSQL .= ' FROM get_addressdata('.$iPlaceID.','.$sHousenumber.')'; $sSQL .= ' ORDER BY rank_address DESC, isaddress DESC'; $this->aAddressLines = $oDB->getAll($sSQL); } private static function isAddress($aLine) { return $aLine['isaddress'] || $aLine['type'] == 'country_code'; } public function getAddressDetails($bAll = false) { if ($bAll) { return $this->aAddressLines; } return array_filter($this->aAddressLines, array(__CLASS__, 'isAddress')); } public function getLocaleAddress() { $aParts = array(); $sPrevResult = ''; foreach ($this->aAddressLines as $aLine) { if ($aLine['isaddress'] && $sPrevResult != $aLine['localname']) { $sPrevResult = $aLine['localname']; $aParts[] = $sPrevResult; } } return join(', ', $aParts); } public function getAddressNames() { $aAddress = array(); $aFallback = array(); foreach ($this->aAddressLines as $aLine) { if (!self::isAddress($aLine)) { continue; } $bFallback = false; $aTypeLabel = ClassTypes\getInfo($aLine); if ($aTypeLabel === false) { $aTypeLabel = ClassTypes\getFallbackInfo($aLine); $bFallback = true; } $sName = null; if (isset($aLine['localname']) && $aLine['localname']!=='') { $sName = $aLine['localname']; } elseif (isset($aLine['housenumber']) && $aLine['housenumber']!=='') { $sName = $aLine['housenumber']; } if (isset($sName)) { $sTypeLabel = strtolower(isset($aTypeLabel['simplelabel']) ? $aTypeLabel['simplelabel'] : $aTypeLabel['label']); $sTypeLabel = str_replace(' ', '_', $sTypeLabel); if (!isset($aAddress[$sTypeLabel]) || isset($aFallback[$sTypeLabel]) || $aLine['class'] == 'place' ) { $aAddress[$sTypeLabel] = $sName; if ($bFallback) { $aFallback[$sTypeLabel] = $bFallback; } } } } return $aAddress; } public function addGeocodeJsonAddressParts(&$aJson) { $aFieldMappings = array( 'house_number' => 'housenumber', 'road' => 'street', 'locality' => 'locality', 'postcode' => 'postcode', 'city' => 'city', 'district' => 'district', 'county' => 'county', 'state' => 'state', 'country' => 'country' ); $aAddrNames = $this->getAddressNames(); foreach ($aFieldMappings as $sFrom => $sTo) { if (isset($aAddrNames[$sFrom])) { $aJson[$sTo] = $aAddrNames[$sFrom]; } } } public function getAdminLevels() { $aAddress = array(); foreach (array_reverse($this->aAddressLines) as $aLine) { if (self::isAddress($aLine) && isset($aLine['admin_level']) && $aLine['admin_level'] < 15 && !isset($aAddress['level'.$aLine['admin_level']]) ) { $aAddress['level'.$aLine['admin_level']] = $aLine['localname']; } } return $aAddress; } public function debugInfo() { return $this->aAddressLines; } }