Location:

Search Service

[Navinfo Navigation SDK for Android] provides users with a total of 10 million levels of POI (Point of Interest) search service, search service online and offline search function. At present, the provided POI search methods include: keyword search, peripheral search, type search, search along the road, and the like.

1. The keyword search method is PoiSearch.searchWithKeyword;

2. The surrounding search method is PoiSearch.forceNearBy(true), set the forced use of the surrounding search, and then complete the search by calling PoiSearch.searchWithKeyword;

3. The search method along the way is PoiSearch.searchAlongRoute. The search engine needs to be initialized before using the search method. The initialization content includes: the size of the memory buffer used by the keyword search, the number of returned POIs, the coverage of the surrounding search, etc.;

4. Searching along the route requires navigation module support.

                (For complete code, see NewSearchActivity.java in the Demo project)
                /**
                * Initialization of the engine to be used here mainly uses the POI search engine and graphics engine
                */
                private void init () {
                    ……
                    // Initialize the POI search engine
                    mPoiSearch = new PoiSearch();
                    // Set the search mode:
                    // onlineOnly online search offlineOnly offline search
                    mPoiSearch.setDataPreference(DataPreference.onlineOnly);
                    // Set the search city id
                    mPoiSearch.setCity(cityName); 
                    // Set the search center point
                    mPoiSearch.setCenter(mCenter); // Register search listener callback method
                    mPoiSearch.setListener(new PoiSearch.Listener() {           
                        @Override             
                        public void onPoiSearch(int event) {                 
                            Log.d("search", event + "");                 
                            switch (event) {                     
                                case PoiSearch.Event.queryFinished:                         
                                Logger.i("luke finished event revieved");                         
                                break;                    
                            case PoiSearch.Event.pageLoaded:                         
                                try {                            
                                    // bubbles before the situation
                                    clearAnnotation();                            
                                    mPoiItems.clear();                             
                                    // For example, if you searched for 3 pages, poisearch contains all the information from 1 to 3 pages, so you need to calculate the position of the third page to get it.
                                    boolean flag1 = mPoiSearch.getTotalPoiItemSum() <= (mPageIndex + 1) * mPoiSearch.getPageSize();                            
                                    int maxIndex = flag1 ? mPoiSearch.getTotalPoiItemSum() : (mPageIndex + 1) * mPoiSearch.getPageSize();                             
                                    // Get the current number of load pages
                                    int index = mPoiSearch.getCurrentPoiNum();                            
                                    if (index > 0) {                                 
                                        int poiNumbers = mPoiSearch.getItemNum(BaseItem.ItemType.poi);                                
                                        if (poiNumbers > 0) {                                    
                                            if (poiNumbers == 1) {                                         
                                                PoiItem poiItem = (PoiItem) mPoiSearch.getItemByIndex(BaseItem.ItemType.poi, 0);                                        
                                                // If it is an administrative area, jump to the administrative district.
                                                if (poiItem.type == PoiItem.ItemType.region) {                                            
                                                    RegionPoiItem regionPoiItem = (RegionPoiItem) poiItem;                                             
                                                    mDemoMapView.setCarPosition(regionPoiItem.center);                                             
                                                    mPoiSearch.setCity(regionPoiItem.completeName);                                            
                                                    mPoiSearch.setCenter(regionPoiItem.center);                                            
                                                    return;                                      
                                                }                            
                                            }
                                        }
                                    }
                                }
                                ……
                        }
                    }
                    // Ride on the map
                    private void drawAnnotation() {
                        mAnnotations.clear();
                        Vector2DF vec = new Vector2DF(0.9f, 0.5f);
                        Point point = new Point();
                        int zlevel = 100;
                        Bitmap icon = BitmapFactory.decodeResource(getResources(), R.drawable.gas);
                        for (int i = 0; i < mPoiItems.size(); i++) {
                            point.x = mPoiItems.get(i).position.x;
                            point.y = mPoiItems.get(i).position.y;
                            CustomAnnotation annot = new CustomAnnotation(zlevel, point, i, vec, icon);
                            annot.setTitle(mPoiItems.get(i).name);
                            mAnnotations.add(annot);
                        }
                        for (int i = 0; i < mAnnotations.size(); i++) {
                            mDemoMapView.getMapRenderer().addAnnotation(mAnnotations.get(i));
                        }
                        if (mPoiItems.size() > 0) {
                            // Mobile Map Center
                            mDemoMapView.setWorldCenter(mPoiItems.get(0).position);
                        }
                    }
                    // delete the point on the map
                    private void clearAnnotation() {
                        for (int i = 0; i < mAnnotations.size(); i++) {
                            mDemoMapView.getMapRenderer().removeAnnotation(mAnnotations.get(i));
                        }
                    }
                }
            

Search interface after running:

搜索操作界面

Click the search button to return the result:

点击搜索按钮返回结果
TOP