在运行时向Codenameone MapContainer添加x个数字标记

时间:2018-12-28 04:14:58

标签: codenameone

我检索了大量的latlong值并存储在ArrayList中。我想使用ArrayList中的latlong值向我的MapContainer添加标记。但是,挑战在于,引脚永远不会在地图(模拟器和设备)上正确定位。我已经尝试了一切,但仍然没有成功。这是一个工作示例。可以,但是在运行时引脚位置错误。

    Form hi = new Form("cReporter", new BorderLayout());
        hi.setScrollableY(false);
        Container n = new Container(new BorderLayout());
        MapContainer mc = new MapContainer();//
        mc.setShowMyLocation(true);
        hi.add("Center", mc);
        List lx = new ArrayList();
        addPoints(lx);
        hi.show();
        addMarkers(mc, lx);

       public void addPoints(List lx)
       {
           Map m= new HashMap();
           m.put("long", 8.993082);
           m.put("lat", 38.747393);
           lx.add(m);

           m= new HashMap();
           m.put("long", 8.988419);
           m.put("lat", 38.727094);
           lx.add(m);

           m= new HashMap();
           m.put("long", 8.991724);
           m.put("lat", 38.775203);
           lx.add(m);
       }

       public void addMarkers(MapContainer mc, List coordList)
   {    

        Style s = new Style();
        s.setFgColor(0xff0000);
        s.setBgTransparency(0);
        FontImage markerImg = FontImage.createMaterial(FontImage.MATERIAL_PLACE, s, 5);

       for(Object m: coordList)
       {
           Map p= (Map)m;
           Coord moscone = new Coord(Double.parseDouble(p.get("lat").toString()), Double.parseDouble(p.get("long").toString()));
           mc.addMarker(EncodedImage.createFromImage(markerImg, false), mc.getCameraPosition(), "Hi marker", "Optional long description", new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    System.out.println("Bounding box is "+mc.getBoundingBox());
                    ToastBar.showMessage("You clicked the marker", FontImage.MATERIAL_PLACE);
                }
            });
           mc.setCameraPosition(moscone);
           mc.revalidate();
       }

   }

1 个答案:

答案 0 :(得分:1)

我猜测您未使用正确的地图投影纬度/经度值,因为这些值会根据不同的实现而有所不同。请参阅以下内容以了解不同类型的定位:Source event strange latitude & longitude

我注意到您为每个标记位置创建了一个新的编码图像。这是非常低效的,因为每个此类映像都将占用RAM,而x100执行此操作可能会带来严重的开销。这是您应该重复使用的图像。