将对象或类链接到Google Map标记

时间:2013-02-07 17:54:44

标签: java android marker google-maps-android-api-2

在GoogleMap应用中,我目前正在使用标记来标记船位。我做了Ship 记录许多属性的类,例如船名,纬度,经度,MMSI代码等。当用户点击地图上的许多标记之一时,将打开生成的可点击信息窗口。当该用户单击信息窗口时,将打开另一个活动,显示有关该标记的详细信息。

至少最后一句话是我想要的。我可以提取纬度和经度位置但不是很多。问题是,虽然我有一个Ship类,其中包含我需要的所有信息,但它没有以任何参考方式连接到标记,我也不知道如何做这样的事情!

我最好的想法是让Ship扩展Marker,但根据Eclipse IDE,这是一个final类,因此无法扩展。

这是我的Ship课程:

public class Ship {

    /** Ship has the following properties
     *  */
    private String shipname = "";
    private String MMSI = "XXXX";
    private double[] loc = new double[2];

    public Ship(String _shipname, String _MMSI, double[] _loc) {
        shipname = _shipname;
        MMSI = _MMSI;
        loc[0] = _loc[0]; // Latitude
        loc[1] = _loc[1]; // Longitude

    }
    public String getName() {
        return shipname;
    }
    public String getMMSI() {
        return MMSI;
    }
    public double getLat() {
        return loc[0];
    }
    public double getLongi() {
        return loc[1];
    }
}

同时,GoogleMap标记通过以下方式动态插入:

public void setupRegion(GoogleMap map, ArrayList<Ship> ships) throws IOException {
        for(Ship ship : ships) {
            map.addMarker(new MarkerOptions()
               .icon(BitmapDescriptorFactory.fromResource(R.drawable.marker_red))
               .position(new LatLng(ship.getLat(), ship.getLongi()))
               .title(ship.getName())
               .snippet("Simulate"));
        }
}

2 个答案:

答案 0 :(得分:1)

不是使用snippet()填充"Simulate",而是使用Ship的一些唯一标识符填充它,以便您可以在Ship中查找DockWharfShipyardOnePercenterYachtClubHashMap<String,Ship>或存储Ship个实例的任何位置。

您还需要设置InfoWindowAdapter,这样您就可以自定义信息窗口内容,以便不显示代码段,假设您使用的是信息窗口。

答案 1 :(得分:1)

常用的解决方案是在您的活动中保留Map<Marker, Ship>,并在map.get(marker)内部onInfoWindowClick回调(或其他任何内容){。}}。

您还可以尝试添加Marker.setData(Object)Marker.getData()函数的库,这样您就可以在创建标记之后将Ship实例放在那里,并将它们放回onInfoWindowClick回调中。

http://code.google.com/p/android-maps-extensions/