$sLanguagePrefArraySQL = "ARRAY[".join(',',array_map("getDBQuoted", $this->aLangPrefOrder))."]";
- $sSQL = "select placex.place_id, partition, osm_type, osm_id, class, type, admin_level, housenumber, street, isin, postcode, country_code, extratags, parent_place_id, linked_place_id, rank_address, rank_search";
- $sSQL .= " importance, indexed_status, indexed_date, wikipedia, calculated_country_code, ";
+ $sSQL = "select placex.place_id, partition, osm_type, osm_id, class, type, admin_level, housenumber, street, isin, postcode, country_code, extratags, parent_place_id, linked_place_id, rank_address, rank_search, ";
+ $sSQL .= " coalesce(importance,0.75-(rank_search::float/40)) as importance, indexed_status, indexed_date, wikipedia, calculated_country_code, ";
$sSQL .= " get_address_by_language(place_id, $sLanguagePrefArraySQL) as langaddress,";
$sSQL .= " get_name_by_language(name, $sLanguagePrefArraySQL) as placename,";
$sSQL .= " get_name_by_language(name, ARRAY['ref']) as ref,";
}
if (isset($aPlace['lat'])) $aFilteredPlaces['lat'] = $aPlace['lat'];
if (isset($aPlace['lon'])) $aFilteredPlaces['lon'] = $aPlace['lon'];
+
+ $aFilteredPlaces['place_rank'] = $aPlace['rank_search'];
+
$aFilteredPlaces['category'] = $aPlace['class'];
$aFilteredPlaces['type'] = $aPlace['type'];
+
+ $aFilteredPlaces['importance'] = $aPlace['importance'];
+
$aFilteredPlaces['addresstype'] = strtolower($aPlace['addresstype']);
$aFilteredPlaces['display_name'] = $aPlace['langaddress'];
insert into placex (osm_type, osm_id, class, type, admin_level, housenumber, street, addr_place, isin, postcode,
country_code, parent_place_id, rank_address, rank_search, indexed_status, geometry)
values ('N',prevnode.osm_id, 'place', 'house', prevnode.admin_level, housenum, prevnode.street, prevnode.addr_place, prevnode.isin, coalesce(prevnode.postcode, defpostalcode),
- prevnode.country_code, prevnode.parent_place_id, prevnode.rank_address, prevnode.rank_search, 1, ST_Line_Interpolate_Point(linegeo, (housenum::float-orginalstartnumber::float)/originalnumberrange::float));
+ prevnode.country_code, prevnode.parent_place_id, prevnode.rank_address, prevnode.rank_search, 1, ST_LineInterpolatePoint(linegeo, (housenum::float-orginalstartnumber::float)/originalnumberrange::float));
newpoints := newpoints + 1;
--RAISE WARNING 'interpolation number % % ',prevnode.place_id,housenum;
END LOOP;
FOR relation IN SELECT place_id FROM placex
WHERE ST_DWithin(location.geometry, placex.geometry, 0.001) and placex.rank_search = 26
and st_geometrytype(location.geometry) in ('ST_LineString')
- ORDER BY (ST_distance(placex.geometry, ST_Line_Interpolate_Point(location.geometry,0))+
- ST_distance(placex.geometry, ST_Line_Interpolate_Point(location.geometry,0.5))+
- ST_distance(placex.geometry, ST_Line_Interpolate_Point(location.geometry,1))) ASC limit 1
+ ORDER BY (ST_distance(placex.geometry, ST_LineInterpolatePoint(location.geometry,0))+
+ ST_distance(placex.geometry, ST_LineInterpolatePoint(location.geometry,0.5))+
+ ST_distance(placex.geometry, ST_LineInterpolatePoint(location.geometry,1))) ASC limit 1
LOOP
--RAISE WARNING 'using nearest street to address interpolation line,0.001 %',relation;
NEW.parent_place_id := relation.place_id;
RETURN;
END IF;
- p1 := ST_Line_Interpolate_Point(line,0);
- p2 := ST_Line_Interpolate_Point(line,0.5);
- p3 := ST_Line_Interpolate_Point(line,1);
+ p1 := ST_LineInterpolatePoint(line,0);
+ p2 := ST_LineInterpolatePoint(line,0.5);
+ p3 := ST_LineInterpolatePoint(line,1);
-- start
IF in_partition = -partition- THEN
FOR housenum IN startnumber..endnumber BY stepsize LOOP
insert into location_property_tiger_import (place_id, partition, parent_place_id, housenumber, postcode, centroid)
values (nextval('seq_place'), out_partition, out_parent_place_id, housenum, in_postcode,
- ST_Line_Interpolate_Point(linegeo, (housenum::float-rangestartnumber::float)/numberrange::float));
+ ST_LineInterpolatePoint(linegeo, (housenum::float-rangestartnumber::float)/numberrange::float));
newpoints := newpoints + 1;
END LOOP;
} else {
pgsqlRunScript('CREATE EXTENSION postgis');
}
+ if ($fPostgisVersion < 2.1) {
+ // Function was renamed in 2.1 and throws an annoying deprecation warning
+ pgsqlRunScript('ALTER FUNCTION st_line_interpolate_point(geometry, double precision) RENAME TO ST_LineInterpolatePoint');
+ }
$sVersionString = $oDB->getOne('select postgis_full_version()');
preg_match('#POSTGIS="([0-9]+)[.]([0-9]+)[.]([0-9]+)( r([0-9]+))?"#', $sVersionString, $aMatches);
if (CONST_Postgis_Version != $aMatches[1].'.'.$aMatches[2])
--- /dev/null
+#!/usr/bin/php -Cq
+<?php
+
+ require_once(dirname(dirname(__FILE__)).'/lib/init-cmd.php');
+ ini_set('memory_limit', '800M');
+
+ $aCMDOptions = array(
+ "Tools to warm nominatim db",
+ array('help', 'h', 0, 1, 0, 0, false, 'Show Help'),
+ array('quiet', 'q', 0, 1, 0, 0, 'bool', 'Quiet output'),
+ array('verbose', 'v', 0, 1, 0, 0, 'bool', 'Verbose output'),
+ array('reverse-only', '', 0, 1, 0, 0, 'bool', 'Warm reverse only'),
+ array('search-only', '', 0, 1, 0, 0, 'bool', 'Warm reverse only'),
+ );
+ getCmdOpt($_SERVER['argv'], $aCMDOptions, $aResult, true, true);
+
+ require_once(CONST_BasePath.'/lib/log.php');
+ require_once(CONST_BasePath.'/lib/Geocode.php');
+ require_once(CONST_BasePath.'/lib/PlaceLookup.php');
+ require_once(CONST_BasePath.'/lib/ReverseGeocode.php');
+
+ $oDB =& getDB();
+
+ $bVerbose = $aResult['verbose'];
+
+ if (!$aResult['search-only']) {
+
+ $oReverseGeocode = new ReverseGeocode($oDB);
+ $oReverseGeocode->setIncludeAddressDetails(true);
+
+ echo "Warm reverse: ";
+ if ($bVerbose) echo "\n";
+ for($i = 0; $i < 1000; $i++) {
+ $fLat = rand(-9000, 9000) / 100;
+ $fLon = rand(-18000, 18000) / 100;
+ if ($bVerbose) echo "$fLat, $fLon = ";
+ $oReverseGeocode->setLanguagePreference(array('en'));
+ $oReverseGeocode->setLatLon($fLat, $fLon);
+ $oReverseGeocode->setZoom(20);
+ $aDetails = $oReverseGeocode->lookup();
+ if ($bVerbose) echo $aDetails['langaddress']."\n";
+ else echo ".";
+ }
+ echo "\n";
+ }
+
+ if (!$aResult['reverse-only']) {
+
+ $oGeocode =& new Geocode($oDB);
+
+ echo "Warm search: ";
+ if ($bVerbose) echo "\n";
+ $sSQL = 'select word from word where word is not null order by search_name_count desc limit 1000';
+ foreach($oDB->getCol($sSQL) as $sWord) {
+ if ($bVerbose) echo "$sWord = ";
+ $oGeocode->setLanguagePreference(array('en'));
+ $oGeocode->setQuery($sWord);
+ $aSearchResults = $oGeocode->lookup();
+ if ($bVerbose) echo $aSearchResults[0]['langaddress']."\n";
+ else echo ".";
+ }
+ }
+