使用精彩的原生谷歌地图cn1lib,我试图在地图上放置标记,首先是代表用户的标记,然后是另外一些代表我数据库中对象的标记。第一个标记总是很好地掠过,我可以重新定位它(通过擦除它并在新位置创建一个新标记),但随后的标记不会在地图上显示。我在模拟器或Android设备上没有出现任何错误,但在其他标记上都没有显示。代码如下所示:
class MyClass{
LinkedList<MapContainer.MapObject> towerMarkers;
MapContainer towerMap;
public void displayTowers(ArrayList<HashMap<String,Object>> towers){
if(towerMarkers == null){
towerMarkers = new LinkedList<>();
}else{
for(MapContainer.MapObject marker: towerMarkers){
towerMap.removeMapObject(marker);
}
towerMarkers.clear();
}
for(HashMap<String, Object> obj: towers){
towerMarkers.add(towerMap.addMarker(EncodedImage.createFromImage(FontImage.createMaterial(
FontImage.MATERIAL_SETTINGS_INPUT_ANTENNA, cellTowerMarker, 3), false),
new Coord(Double.parseDouble((String)obj.get("latitude")), Double.parseDouble((String)obj.get("longitude"))),
"", "", null));
}
}
...
有效的代码非常相似:
towerMap.addTapListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
int x = evt.getX();
int y = evt.getY();
Coord tapCoord = towerMap.getCoordAtPosition(x, y);
if(myLocationMarker != null){
towerMap.removeMapObject(myLocationMarker);
}
myLocationMarker = towerMap.addMarker(EncodedImage.createFromImage(FontImage.createMaterial(FontImage.MATERIAL_LOCATION_ON, userLocationMarker, 4),
false), tapCoord, null, null, null);
findLongitudeField(f).setText(Double.toString(tapCoord.getLongitude()));
findLatitudeField(f).setText(Double.toString(tapCoord.getLatitude()));
findBtnUseChosenLocation(f).setEnabled(true);
}
});
我注意到的唯一奇怪的事情是当我检查地图标记时,它们全部(包括出现的标记)似乎在完全不同的系统中具有坐标。而不是(35.789 ...,32.1233 ...),他们更喜欢(3897665.88999,4277888.988884),但由于显示的那个也是这样,它似乎不是一个问题
任何帮助将不胜感激!