Question

I am using nokia maps nokia.places.search.manager.findPlaces and get maximum of 100 results.

But i need unlimited results say around 500 or 1000. How can i get it?

my nokia function:

nokia.places.search.manager.findPlaces({ searchTerm: searchterm, searchCenter: lat,lng ,
limit:100, didYouMean: 5 });
Was it helpful?

Solution

findPlaces is a local search. Local searches are focused with results around a small area. The limit for a places search is currently 100 places, as places beyond a set distance are not considered relevant. Adding the limit parameter is no guarantee that you would find 100 relevant places within a given search area anyway.

The trick here is not to attempt to make a request for 1000 results, but to use an observer and make a series of asynchronous requests for the closest 100 results as the focus of the map moves. Putting thousands of markers on any map would lead it to being unreadable, slow and unresponsive anyway.

Try something like the following, with your own app id and token of course .

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- 
    Example from Nokia Maps API Playground, for more information visit http://api.maps.nokia.com
 -->
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="X-UA-Compatible" content="IE=7; IE=EmulateIE9"/>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
        <title>Nokia Maps API Example: Search by category</title>
        <meta name="description" content="Search by category"/>
        <meta name="keywords" content="search, services, places, category"/>
        <!-- For scaling content for mobile devices, setting the viewport to the width of the device-->
        <meta name=viewport content="width=device-width, height=device-height, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
        <!-- By default we add ?with=all to load every package available, it's better to change this parameter to your use case. Options ?with=maps|positioning|places|placesdata|directions|datarendering|all -->
        <script type="text/javascript" charset="UTF-8" src="http://api.maps.nokia.com/2.2.3/jsl.js?with=all"></script>
        <!-- JavaScript for example container (NoteContainer & Logger)  -->
        <style type="text/css">
            html {
                overflow:hidden;
            }

            body {
                margin: 0;
                padding: 0;
                overflow: hidden;
                width: 100%;
                height: 100%;
                position: absolute;
            }

            #mapContainer {
                width: 80%;
                height: 80%;
                left: 0;
                top: 0;
                position: absolute;
            }
            #progress {
                width: 80%;
                height: 10%;
                left: 0;
                top: 80%;
                position: absolute;
            }
            #buttons {
                width: 80%;
                height: 10%;
                left: 0;
                top: 90%;
                position: absolute;
            }
        </style>
    </head>
    <body>
        <div id="mapContainer"></div>
        <div id="progress"></div>

        <script type="text/javascript" id="exampleJsSource">
/*  Set authentication token and appid 
*   WARNING: this is a demo-only key
*   please register on http://api.developer.nokia.com/ 
*   and obtain your own developer's API key 
*/
nokia.Settings.set("appId", "MY APP ID"); 
nokia.Settings.set("authenticationToken", "MY TOKEN");


// Get the DOM node to which we will append the map
var mapContainer = document.getElementById("mapContainer");
// Create a map inside the map container DOM node
var map = new nokia.maps.map.Display(mapContainer, {
    // Initial center and zoom level of the map
    center: [52.51, 13.4],
    zoomLevel: 13,
    components: [       
        new nokia.maps.map.component.Behavior()
    ]
});

var searchManager = nokia.places.search.manager,
    resultSet;




// Function for receiving search results from places search and process them
var processResults = function (data, requestStatus, requestId) {
    var i, len, locations, marker;
    if (requestStatus == "OK") {
        // The function findPlaces() and reverseGeoCode() of  return results in slightly different formats
        locations = data.results ? data.results.items : [data.location];
        // We check that at least one location has been found
        if (locations.length > 0) {
            // Remove results from previous search from the map
            if (resultSet) map.objects.remove(resultSet);
            // Convert all found locations into a set of markers
            resultSet = new nokia.maps.map.Container();
            for (i = 0, len = locations.length; i < len; i++) {
                marker = new nokia.maps.map.StandardMarker(locations[i].position, { text: i+1 });
                resultSet.objects.add(marker);
            }
            // Next we add the marker(s) to the map's object collection so they will be rendered onto the map
            map.objects.add(resultSet);
            // We zoom the map to a view that encapsulates all the markers into map's viewport
            //map.zoomTo(resultSet.getBoundingBox(), true);

        } else { 
            //alert("Your search produced no results!");
        }
         searching = false;
    } else {
        alert("The search request failed");
        searching = false;
    }
};



// Binding of DOM elements to several variables so we can install event handlers.
var progressUiElt = document.getElementById("progress");

// This function is called whenever we make a search
var searching = false;
search = function(searchCenter){
// Make a place search request
var category = "eat-drink"
progressUiElt.innerHTML = "Looking for places in the '" + category + "' category...'";
searchManager.findPlacesByCategory({
    category: category,
    onComplete: processResults,
    searchCenter: searchCenter,
    limit: 50,
});
}


search(new nokia.maps.geo.Coordinate(52.51, 13.4));



// This observer will call the search function if the center of the map is moved
// Beyond the area covered in the previous search
var centerObserver = function (obj, key, newValue, oldValue) {
    if ((searching == false) && (resultSet.getBoundingBox().contains(newValue) == false) ){
        searching = true;
        search(newValue);
    }

};

map.addObserver("center", centerObserver );


        </script>
    </body>
</html>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top