我检索了大量的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();
}
}
答案 0 :(得分:1)
我猜测您未使用正确的地图投影纬度/经度值,因为这些值会根据不同的实现而有所不同。请参阅以下内容以了解不同类型的定位:Source event strange latitude & longitude
我注意到您为每个标记位置创建了一个新的编码图像。这是非常低效的,因为每个此类映像都将占用RAM,而x100执行此操作可能会带来严重的开销。这是您应该重复使用的图像。