X-Git-Url: https://git.openstreetmap.org/nominatim.git/blobdiff_plain/75f951d254127d8857b6ad95cac241917f88e542..ff5a2372001b024e2e11d6d4db8d69809b1e5d29:/utils/export.php diff --git a/utils/export.php b/utils/export.php deleted file mode 100644 index 9d3037aa..00000000 --- a/utils/export.php +++ /dev/null @@ -1,171 +0,0 @@ - 1, - 'country' => 4, - 'state' => 8, - 'county' => 12, - 'city' => 16, - 'suburb' => 20, - 'street' => 26, - 'path' => 27 - ); - - $oDB = new Nominatim\DB(); - $oDB->connect(); - - if (isset($aCMDResult['output-type'])) { - if (!isset($aRankmap[$aCMDResult['output-type']])) fail('unknown output-type: '.$aCMDResult['output-type']); - $iOutputRank = $aRankmap[$aCMDResult['output-type']]; - } else { - $iOutputRank = $aRankmap['street']; - } - - - // Preferred language - $oParams = new Nominatim\ParameterParser(); - if (!isset($aCMDResult['language'])) $aCMDResult['language'] = 'xx'; - $aLangPrefOrder = $oParams->getPreferredLanguages($aCMDResult['language']); - $sLanguagePrefArraySQL = $oDB->getArraySQL($oDB->getDBQuotedList($aLangPrefOrder)); - - // output formatting: build up a lookup table that maps address ranks to columns - $aColumnMapping = array(); - $iNumCol = 0; - if (!isset($aCMDResult['output-format'])) $aCMDResult['output-format'] = 'street;suburb;city;county;state;country'; - foreach (preg_split('/\s*;\s*/', $aCMDResult['output-format']) as $sColumn) { - $bHasData = false; - foreach (preg_split('/\s*,\s*/', $sColumn) as $sRank) { - if ($sRank == 'postcode' || $sRank == 'placeid') { - $aColumnMapping[$sRank] = $iNumCol; - $bHasData = true; - } elseif (isset($aRankmap[$sRank])) { - $iRank = $aRankmap[$sRank]; - if ($iRank <= $iOutputRank) { - $aColumnMapping[(string)$iRank] = $iNumCol; - $bHasData = true; - } - } - } - if ($bHasData) $iNumCol++; - } - - // build the query for objects - $sPlacexSQL = 'select min(place_id) as place_id, '; - $sPlacexSQL .= 'array_agg(place_id) as place_ids, '; - $sPlacexSQL .= 'country_code as cc, '; - $sPlacexSQL .= 'postcode, '; - // get the address places excluding postcodes - $sPlacexSQL .= 'array(select address_place_id from place_addressline a'; - $sPlacexSQL .= ' where a.place_id = placex.place_id and isaddress'; - $sPlacexSQL .= ' and address_place_id != placex.place_id'; - $sPlacexSQL .= ' and not cached_rank_address in (5,11)'; - $sPlacexSQL .= ' and cached_rank_address > 2 order by cached_rank_address)'; - $sPlacexSQL .= ' as address'; - $sPlacexSQL .= ' from placex where name is not null and linked_place_id is null'; - - $sPlacexSQL .= ' and rank_address = '.$iOutputRank; - - if (isset($aCMDResult['restrict-to-country'])) { - $sPlacexSQL .= ' and country_code = '.$oDB->getDBQuoted($aCMDResult['restrict-to-country']); - } - - // restriction to parent place id - $sParentId = false; - $sOsmType = false; - - if (isset($aCMDResult['restrict-to-osm-node'])) { - $sOsmType = 'N'; - $sOsmId = $aCMDResult['restrict-to-osm-node']; - } - if (isset($aCMDResult['restrict-to-osm-way'])) { - $sOsmType = 'W'; - $sOsmId = $aCMDResult['restrict-to-osm-way']; - } - if (isset($aCMDResult['restrict-to-osm-relation'])) { - $sOsmType = 'R'; - $sOsmId = $aCMDResult['restrict-to-osm-relation']; - } - if ($sOsmType) { - $sSQL = 'select place_id from placex where'; - $sSQL .= ' osm_type = '.$oDB->getDBQuoted($sOsmType); - $sSQL .= ' and osm_id = '.$sOsmId; - $sParentId = $oDB->getOne($sSQL); - if (!$sParentId) fail('Could not find place '.$sOsmType.' '.$sOsmId); - } - if ($sParentId) { - $sPlacexSQL .= ' and place_id in (select place_id from place_addressline where address_place_id = '.$sParentId.' and isaddress)'; - } - - $sPlacexSQL .= " group by name->'name', address, postcode, country_code, placex.place_id"; - - // Iterate over placeids - // to get further hierarchical information - //var_dump($sPlacexSQL); - $aRes =& $oDB->query($sPlacexSQL); - $fOutstream = fopen('php://output', 'w'); - while ($aRes->fetchInto($aRow)) { - //var_dump($aRow); - $iPlaceID = $aRow['place_id']; - $sSQL = "select rank_address,get_name_by_language(name,$sLanguagePrefArraySQL) as localname from get_addressdata($iPlaceID, -1)"; - $sSQL .= ' WHERE isaddress'; - $sSQL .= ' order by rank_address desc,isaddress desc'; - $aAddressLines = $oDB->getAll($sSQL); - - $aOutput = array_fill(0, $iNumCol, ''); - // output address parts - foreach ($aAddressLines as $aAddress) { - if (isset($aColumnMapping[$aAddress['rank_address']])) { - $aOutput[$aColumnMapping[$aAddress['rank_address']]] = $aAddress['localname']; - } - } - // output postcode - if (isset($aColumnMapping['postcode'])) { - if ($aCMDResult['output-all-postcodes']) { - $sSQL = 'select array_agg(px.postcode) from placex px join place_addressline pa '; - $sSQL .= 'on px.place_id = pa.address_place_id '; - $sSQL .= 'where pa.cached_rank_address in (5,11) '; - $sSQL .= 'and pa.place_id in (select place_id from place_addressline where address_place_id in ('.substr($aRow['place_ids'], 1, -1).')) '; - $sSQL .= 'group by postcode order by count(*) desc limit 1'; - $sRes = $oDB->getOne($sSQL); - - $aOutput[$aColumnMapping['postcode']] = substr($sRes, 1, -1); - } else { - $aOutput[$aColumnMapping['postcode']] = $aRow['postcode']; - } - } - if (isset($aColumnMapping['placeid'])) { - $aOutput[$aColumnMapping['placeid']] = substr($aRow['place_ids'], 1, -1); - } - fputcsv($fOutstream, $aOutput); - } - fclose($fOutstream);