Multiple overlay items

Put problem concerning MapActivities, MapViews, Overlays and GPS in this forum.

Multiple overlay items

Postby BeerBelly » Fri Mar 19, 2010 5:51 pm

I seem to be having a problem with using ItemizedOverlay and OveralyItems in it.

I can get the first overlayItem to appear on the map but not any items after that.

Example of the code:

Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.  
  2. protected void myCalledFunction(Location myLoc) {
  3.  
  4.                 // TODO Auto-generated method stub
  5.  
  6.                 Markers usersMarker = new Markers(user,overview.this);
  7.  
  8.                 int lat,lon;
  9.  
  10.                 HttpEntity ser_resp;
  11.  
  12.                 String text;
  13.  
  14.                
  15.  
  16.                 /* Add my location to the list */
  17.  
  18.                 if (myLoc != null) {                
  19.  
  20.            
  21.  
  22.            
  23.  
  24.             GeoPoint myPoint = new GeoPoint(
  25.  
  26.                     (int) (myLoc.getLatitude() * 1E6),
  27.  
  28.                     (int) (myLoc.getLongitude() * 1E6));
  29.  
  30.             mc.animateTo(myPoint);
  31.  
  32.             OverlayItem itemMyself = new OverlayItem(myPoint,getString(R.string.myPosition),getString(R.string.myPosition));
  33.  
  34.             itemMyself.setMarker(this.icon);
  35.  
  36.            
  37.  
  38.             usersMarker.addOverlay(itemMyself);              
  39.  
  40.                 }
  41.  
  42.  
  43.  
  44.                 if (this.userid != -1) {
  45.  
  46.                         Map<String, String> data = new HashMap<String, String>();
  47.  
  48.                         data.put("userid", this.userid.toString());
  49.  
  50.                        
  51.  
  52.                         try {
  53.  
  54.                                 HttpResponse re = Registration.doPost("http://www.android-town.com/getCloseUsers.php",data);
  55.  
  56.                                
  57.  
  58.                                 ser_resp = re.getEntity();
  59.  
  60.                                 InputStream is = ser_resp.getContent();
  61.  
  62.                     BufferedInputStream bis = new BufferedInputStream(is);
  63.  
  64.                     ByteArrayBuffer baf = new ByteArrayBuffer(20);
  65.  
  66.  
  67.  
  68.                     int current = 0;  
  69.  
  70.                     while((current = bis.read()) != -1){  
  71.  
  72.                         baf.append((byte)current);  
  73.  
  74.                     }  
  75.  
  76.                          
  77.  
  78.                        /* Convert the Bytes read to a String. */  
  79.  
  80.                     text = new String(baf.toByteArray());
  81.  
  82.                                
  83.  
  84.                     /* If the web service returns nearby users... */
  85.  
  86.                     if (text != "") {              
  87.  
  88.                    
  89.  
  90.                         if (text.indexOf("##")>0) {
  91.  
  92.                                 String[] users = text.split("##");
  93.  
  94.                                 for (String user : users) {
  95.  
  96.                                         String[] userData = user.split(";");
  97.  
  98.                                         lat = Integer.valueOf(userData[1]);
  99.  
  100.                                         lon = Integer.valueOf(userData[2]);
  101.  
  102.                                                
  103.  
  104.                                         Log.e("overview", "username: "+userData[0]+", lat: "+userData[1]+", lon: "+userData[2]);
  105.  
  106.                                                
  107.  
  108.                                         GeoPoint p = new GeoPoint(
  109.  
  110.                                         (int) (lat * 1E6),
  111.  
  112.                                         (int) (lon * 1E6));
  113.  
  114.                                         OverlayItem item = new OverlayItem(p,userData[0],userData[3]);
  115.  
  116.                                         item.setMarker(this.user);
  117.  
  118.                                        
  119.  
  120.                                
  121.  
  122.                                         usersMarker.addOverlay(item);
  123.  
  124.                                
  125.  
  126.                                 }
  127.  
  128.                         } else {
  129.  
  130.                                 String[] userData = text.split(";");
  131.  
  132.                                 lat = Integer.valueOf(userData[1]);
  133.  
  134.                                 lon = Integer.valueOf(userData[2]);
  135.  
  136.                                        
  137.  
  138.                                 Log.e("overview", "username: "+userData[0]+", lat: "+userData[1]+", lon: "+userData[2]);
  139.  
  140.                                        
  141.  
  142.                                 GeoPoint p = new GeoPoint(
  143.  
  144.                                 (int) (lat * 1E6),
  145.  
  146.                                 (int) (lon * 1E6));
  147.  
  148.                                          
  149.  
  150.                                 OverlayItem item = new OverlayItem(p,userData[0],userData[3]);    
  151.  
  152.                                 item.setMarker(this.user);
  153.  
  154.                                 usersMarker.addOverlay(item);
  155.  
  156.                         }                                              
  157.  
  158.                        
  159.  
  160.                     }
  161.  
  162.                    
  163.  
  164.                         } catch (ClientProtocolException e) {
  165.  
  166.                 e.printStackTrace();
  167.  
  168.                 Toast.makeText(getApplicationContext(), getString(R.string.noURLAccess), Toast.LENGTH_SHORT).show();
  169.  
  170.                         } catch (IOException e) {
  171.  
  172.                 e.printStackTrace();
  173.  
  174.                 Toast.makeText(getApplicationContext(), getString(R.string.noURLAccess), Toast.LENGTH_SHORT).show();
  175.  
  176.                         }
  177.  
  178.                 }
  179.  
  180.                
  181.  
  182.                 /* Draw markers */
  183.  
  184.         //mc.setZoom(16);
  185.  
  186.         Log.e("overlays","items: "+String.valueOf(usersMarker.size())+", overlays: "+String.valueOf(mapOverlays.size()));
  187.  
  188.        
  189.  
  190.         if (mapOverlays.size() == 0) {
  191.  
  192.                 mapOverlays.add(usersMarker);
  193.  
  194.         } else {
  195.  
  196.                 mapOverlays.clear();
  197.  
  198.                 mapOverlays.add(usersMarker);
  199.  
  200.         }                                            
  201.  
  202.         karta.invalidate();
  203.  
  204.                
  205.  
  206.         }
Parsed in 0.048 seconds, using GeSHi 1.0.8.4


and my implementation of the ItemizedOverlay class:

Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.  
  2. public class Markers extends ItemizedOverlay {
  3.  
  4.        
  5.  
  6.         private Context ctx;
  7.  
  8.        
  9.  
  10.         private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
  11.  
  12.  
  13.  
  14.         public Markers(Drawable defaultMarker, Context cont) {
  15.  
  16.                
  17.  
  18.                 super(boundCenterBottom(defaultMarker));
  19.  
  20.                 this.ctx = cont;
  21.  
  22.                 // TODO Auto-generated constructor stub
  23.  
  24.         }
  25.  
  26.  
  27.  
  28.         @Override
  29.  
  30.         protected OverlayItem createItem(int i) {
  31.  
  32.                 // TODO Auto-generated method stub
  33.  
  34.                 return mOverlays.get(i);
  35.  
  36.         }
  37.  
  38.  
  39.  
  40.         @Override
  41.  
  42.         public boolean onTap(GeoPoint p, MapView mapView) {
  43.  
  44.                 // TODO Auto-generated method stub
  45.  
  46.                 return super.onTap(p, mapView);
  47.  
  48.         }
  49.  
  50.  
  51.  
  52.        
  53.  
  54.         @Override
  55.  
  56.         protected boolean onTap(int index) {
  57.  
  58.                 // TODO Auto-generated method stub
  59.  
  60.                 Toast.makeText(this.ctx, mOverlays.get(index).getTitle().toString()+", Latitude: "+mOverlays.get(index).getPoint().getLatitudeE6(), Toast.LENGTH_SHORT).show();
  61.  
  62.                 return super.onTap(index);             
  63.  
  64.         }
  65.  
  66.        
  67.  
  68.         @Override
  69.  
  70.         public int size() {
  71.  
  72.                 // TODO Auto-generated method stub
  73.  
  74.                 return mOverlays.size();
  75.  
  76.         }
  77.  
  78.  
  79.  
  80.         public void addOverlay(OverlayItem item) {
  81.  
  82.                 mOverlays.add(item);
  83.  
  84.                 setLastFocusedIndex(-1);
  85.  
  86.                 populate();
  87.  
  88.                
  89.  
  90.         }
  91.  
  92.        
  93.  
  94.         public void clear() {
  95.  
  96.                 mOverlays.clear();
  97.  
  98.                 setLastFocusedIndex(-1);
  99.  
  100.                 populate();
  101.  
  102.         }
  103.  
  104.  
  105.  
  106.        
  107.  
  108. }
Parsed in 0.036 seconds, using GeSHi 1.0.8.4


the first marker shows up on the map but if I add any more they don't show up? Is there a problem with the populate() method? I tried calling it manually after adding all markers but it still didn't help. Please, if you have any idea what could be wrong, say so.
BeerBelly
Freshman
Freshman
 
Posts: 5
Joined: Thu Mar 11, 2010 3:54 pm

Top

Postby therealhoudini » Fri Apr 30, 2010 8:28 pm

Hi there!

Nice code, but I don't get it to work... could you show me the hole source code please?

Would be nice! Thx!
therealhoudini
Freshman
Freshman
 
Posts: 8
Joined: Sat Jan 09, 2010 11:01 pm

Top

Return to Map Problems

Who is online

Users browsing this forum: No registered users and 5 guests