X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/d4b633bfc50188f36e3c4a8b2b99c3a0e6a7f12e..b133f2bc4cd5e467ff6ef10124416b1307cfdb62:/utils/export.php?ds=sidebyside diff --git a/utils/export.php b/utils/export.php index 9d3037aa..ae18891e 100644 --- a/utils/export.php +++ b/utils/export.php @@ -3,8 +3,8 @@ // from a running nominatim instance as CSV data - require_once(CONST_BasePath.'/lib/init-cmd.php'); - require_once(CONST_BasePath.'/lib/ParameterParser.php'); + require_once(CONST_LibDir.'/init-cmd.php'); + require_once(CONST_LibDir.'/ParameterParser.php'); ini_set('memory_limit', '800M'); $aCMDOptions = array( @@ -21,6 +21,7 @@ array('restrict-to-osm-node', '', 0, 1, 1, 1, 'int', 'Export only objects that are children of this OSM node'), array('restrict-to-osm-way', '', 0, 1, 1, 1, 'int', 'Export only objects that are children of this OSM way'), array('restrict-to-osm-relation', '', 0, 1, 1, 1, 'int', 'Export only objects that are children of this OSM relation'), + array('project-dir', '', 0, 1, 1, 1, 'realpath', 'Base directory of the Nominatim installation (default: .)'), "\nAddress ranks: continent, country, state, county, city, suburb, street, path", 'Additional output types: postcode, placeid (placeid for each object)', "\noutput-format must be a semicolon-separated list of address ranks. Multiple ranks", @@ -30,6 +31,8 @@ ); getCmdOpt($_SERVER['argv'], $aCMDOptions, $aCMDResult, true, true); + loadSettings($aCMDResult['project-dir'] ?? getcwd()); + $aRankmap = array( 'continent' => 1, 'country' => 4, @@ -116,10 +119,8 @@ $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); + $sSQL = 'select place_id from placex where osm_type = :osm_type and osm_id = :osm_id'; + $sParentId = $oDB->getOne($sSQL, array('osm_type' => $sOsmType, 'osm_id' => $sOsmId)); if (!$sParentId) fail('Could not find place '.$sOsmType.' '.$sOsmId); } if ($sParentId) { @@ -131,15 +132,15 @@ // Iterate over placeids // to get further hierarchical information //var_dump($sPlacexSQL); - $aRes =& $oDB->query($sPlacexSQL); + $oResults = $oDB->getQueryStatement($sPlacexSQL); $fOutstream = fopen('php://output', 'w'); - while ($aRes->fetchInto($aRow)) { - //var_dump($aRow); + while ($aRow = $oResults->fetch()) { + //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 = "select rank_address,get_name_by_language(name,$sLanguagePrefArraySQL) as localname from get_addressdata(:place_id, -1)"; $sSQL .= ' WHERE isaddress'; $sSQL .= ' order by rank_address desc,isaddress desc'; - $aAddressLines = $oDB->getAll($sSQL); + $aAddressLines = $oDB->getAll($sSQL, array('place_id' => $iPlaceID)); $aOutput = array_fill(0, $iNumCol, ''); // output address parts @@ -154,9 +155,9 @@ $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 .= 'and pa.place_id in (select place_id from place_addressline where address_place_id in (:first_place_id)) '; $sSQL .= 'group by postcode order by count(*) desc limit 1'; - $sRes = $oDB->getOne($sSQL); + $sRes = $oDB->getOne($sSQL, array('first_place_id' => substr($aRow['place_ids'], 1, -1))); $aOutput[$aColumnMapping['postcode']] = substr($sRes, 1, -1); } else {