From: Markus Gail Date: Mon, 21 Mar 2016 13:26:39 +0000 (+0100) Subject: Merge branch 'tigerlines' of /home/markus/Nominatim into tiger X-Git-Tag: v3.0.0~190^2~1 X-Git-Url: https://git.openstreetmap.org./nominatim.git/commitdiff_plain/a4ecd9d73e93a56aeee336c7fa7e18aa42bd9e03 Merge branch 'tigerlines' of /home/markus/Nominatim into tiger Conflicts: lib/Geocode.php lib/ReverseGeocode.php lib/lib.php --- a4ecd9d73e93a56aeee336c7fa7e18aa42bd9e03 diff --cc lib/Geocode.php index 8eaa5402,c24c84ae..4b15b3c8 --- a/lib/Geocode.php +++ b/lib/Geocode.php @@@ -1479,7 -1477,7 +1479,7 @@@ if ($aSearch['sClass'] && sizeof($aPlaceIDs)) { -- $sPlaceIDs = join(',', aPlaceIDs); ++ $sPlaceIDs = join(',', $aPlaceIDs); $aClassPlaceIDs = array(); if (!$aSearch['sOperator'] || $aSearch['sOperator'] == 'name') diff --cc lib/PlaceLookup.php index f62ca627,55e0f11c..985ed224 --- a/lib/PlaceLookup.php +++ b/lib/PlaceLookup.php @@@ -133,7 -83,7 +133,7 @@@ $sSQL = "select place_id,partition, 'T' as osm_type, place_id as osm_id, 'place' as class, 'house' as type, null as admin_level, housenumber, null as street, null as isin, postcode,"; $sSQL .= " 'us' as country_code, parent_place_id, null as linked_place_id, 30 as rank_address, 30 as rank_search,"; $sSQL .= " coalesce(null,0.75-(30::float/40)) as importance, null as indexed_status, null as indexed_date, null as wikipedia, 'us' as calculated_country_code, "; -- $sSQL .= " get_address_by_language(place_id, housenumber,$sLanguagePrefArraySQL) as langaddress,"; ++ $sSQL .= " get_address_by_language(place_id, housenumber, $sLanguagePrefArraySQL) as langaddress,"; $sSQL .= " null as placename,"; $sSQL .= " null as ref,"; if ($this->bExtraTags) $sSQL .= " null as extra,"; diff --cc lib/ReverseGeocode.php index 9eb7f7f2,2a901e3b..3dff161e --- a/lib/ReverseGeocode.php +++ b/lib/ReverseGeocode.php @@@ -167,9 -116,9 +167,7 @@@ $sSQL .= ' AND ST_DWithin('.$sPointSQL.', linegeo, '.$fSearchDiam.')'; //no centroid anymore in Tiger data, now we have lines $sSQL .= ' ORDER BY ST_distance('.$sPointSQL.', linegeo) ASC limit 1'; -- -- // print all house numbers in the parent (street) -- /*if (CONST_Debug) ++ if (CONST_Debug) { $sSQL = preg_replace('/limit 1/', 'limit 100', $sSQL); var_dump($sSQL); @@@ -179,7 -128,7 +177,7 @@@ { echo $i['housenumber'] . ' | ' . $i['distance'] * 1000 . ' | ' . $i['lat'] . ' | ' . $i['lon']. ' | '. "
\n"; } -- }*/ ++ } $aPlaceTiger = $this->oDB->getRow($sSQL); if (PEAR::IsError($aPlace)) @@@ -221,8 -166,8 +219,9 @@@ } return array('place_id' => $iPlaceID, - 'type' => $bPlaceIsTiger ? 'tiger' : 'osm'); - 'type' => $bPlaceIsTiger ? 'tiger' : 'osm', - 'fraction' => $bPlaceIsTiger ? $iFraction : -1 ); ++ 'type' => $bPlaceIsTiger ? 'tiger' : 'osm', ++ 'fraction' => $bPlaceIsTiger ? $iFraction : -1); } + } ?> diff --cc settings/settings.php index 7285ee66,3427d5e0..d48aff73 --- a/settings/settings.php +++ b/settings/settings.php @@@ -6,7 -4,7 +6,7 @@@ // General settings @define('CONST_Debug', false); -- @define('CONST_Database_DSN', 'pgsql://@/nominatim'); // ://:@:/ ++ @define('CONST_Database_DSN', 'pgsql://@/nominatim'); // ://:@:/ @define('CONST_Database_Web_User', 'www-data'); @define('CONST_Max_Word_Frequency', '50000'); @define('CONST_Limit_Reindexing', true); diff --cc tests-php/Nominatim/NominatimTest.php index d50a8da4,129fa012..8213be00 --- a/tests-php/Nominatim/NominatimTest.php +++ b/tests-php/Nominatim/NominatimTest.php @@@ -187,74 -142,72 +187,136 @@@ class NominatimTest extends \PHPUnit_Fr 65536, count( getWordSets(array_fill( 0, 18, 'a'),0) ) ); + } + } + + + + + public function test_geometryText2Points() + { + $fRadius = 1; + + // invalid value + $this->assertEquals( + NULL, + geometryText2Points('', $fRadius) + ); + + + // POINT + $aPoints = geometryText2Points('POINT(10 20)', $fRadius); + $this->assertEquals( + 101, + count($aPoints) + ); + + $this->assertEquals( + + array( + ['', 10, 21], + ['', 10.062790519529, 20.998026728428], + ['', 10.125333233564, 20.992114701314] + ), + array_splice($aPoints, 0,3) + ); + + // POLYGON + $this->assertEquals( + array( + ['30 10', '30', '10'], + ['40 40', '40', '40'], + ['20 40', '20', '40'], + ['10 20', '10', '20'], + ['30 10', '30', '10'] + ), + geometryText2Points('POLYGON((30 10, 40 40, 20 40, 10 20, 30 10))', $fRadius) + ); + + // MULTIPOLYGON + // only the first polygon is used + $this->assertEquals( + array( + ['30 20', '30', '20'], + ['45 40', '45', '40'], + ['10 40', '10', '40'], + ['30 20', '30', '20'], + + // ['15 5' , '15', '5' ], + // ['45 10', '45', '10'], + // ['10 20', '10', '20'], + // ['5 10' , '5' , '10'], + // ['15 5' , '15', '5' ] + ), + geometryText2Points('MULTIPOLYGON(((30 20, 45 40, 10 40, 30 20)),((15 5, 40 10, 10 20, 5 10, 15 5)))', $fRadius) + ); + // you might say we're creating a circle + public function test_createPointsAroundCenter() + { + $aPoints = createPointsAroundCenter(0, 0, 2); + $this->assertEquals( + 101, + count($aPoints) + ); + $this->assertEquals( + array( + ['', 0, 2], + ['', 0.12558103905863, 1.9960534568565], + ['', 0.25066646712861, 1.984229402629] + ), + array_splice($aPoints, 0, 3) + ); } + public function test_geometryText2Points() + { + $fRadius = 1; + // invalid value + $this->assertEquals( + NULL, + geometryText2Points('', $fRadius) + ); + + // POINT + $aPoints = geometryText2Points('POINT(10 20)', $fRadius); + $this->assertEquals( + 101, + count($aPoints) + ); + $this->assertEquals( + array( + [10, 21], + [10.062790519529, 20.998026728428], + [10.125333233564, 20.992114701314] + ), + array_splice($aPoints, 0,3) + ); + + // POLYGON + $this->assertEquals( + array( + ['30', '10'], + ['40', '40'], + ['20', '40'], + ['10', '20'], + ['30', '10'] + ), + geometryText2Points('POLYGON((30 10, 40 40, 20 40, 10 20, 30 10))', $fRadius) + ); + + // MULTIPOLYGON + $this->assertEquals( + array( + ['30', '20'], // first polygon only + ['45', '40'], + ['10', '40'], + ['30', '20'], + ), + geometryText2Points('MULTIPOLYGON(((30 20, 45 40, 10 40, 30 20)),((15 5, 40 10, 10 20, 5 10, 15 5)))', $fRadius) + ); + } }