我需要存储我在地图上绘制的多边形的名称。我的所有多边形都有一个名称,但GoogleMap API不允许你将自己的id放在多边形上(有人请解释原因?!这没有任何意义!!)通过id识别多边形的唯一方法是因此要在其z-index中保留一种ID。 z-index是一个浮点数,我的id是字符串。因此我试图将我的字符串转换为bytes []然后浮动,并在我需要识别我的多边形时解码它。以下是我尝试这样做的方法:
private float convertStringToFloat(ZoneData zone) {
byte[] stringinBytes = zone.getName().getBytes();
return ByteBuffer.wrap(stringinBytes).getFloat();
}
private String convertFloatToString(float nameFloat) {
Float f = new Float(nameFloat);
byte[] nameBytesArray = new byte [] { (byte) (f.byteValue() >>> 56),
(byte) (f.byteValue() >>> 48),
(byte) (f.byteValue() >>> 40),
(byte) (f.byteValue() >>> 32),
(byte) (f.byteValue() >>> 24),
(byte) (f.byteValue() >>> 16),
(byte) (f.byteValue() >>> 8),
(byte) f.byteValue() };
return new String(nameBytesArray);
}
不幸的是它只是不起作用,我不确定为什么,当我打印输出字符串时,我得到一个:
[����������������, ����������������]
再一次,我只是不明白为什么没有办法确定多边形是API,如果有人形成谷歌,请阅读这个我们想要绘制多边形但不能识别它们的世界?!
更新
以下是我的ZoneData代码的工作原理:
public class ZoneData {
private LatLng P1;
private LatLng P2;
private LatLng P3;
private LatLng P4;
private String name;
public ZoneData(JSONObject zone){
patients = new ArrayList<PatientData>();
try {
this.name = zone.getString("name");
this.P1 = new LatLng(zone.getDouble("P1Lat"), zone.getDouble("P1Lon"));
this.P2 = new LatLng(zone.getDouble("P2Lat"), zone.getDouble("P2Lon"));
this.P3 = new LatLng(zone.getDouble("P3Lat"), zone.getDouble("P3Lon"));
this.P4 = new LatLng(zone.getDouble("P4Lat"), zone.getDouble("P4Lon"));
} catch (JSONException e) {
e.printStackTrace();
}
}
public LatLng getP1() {
return P1;
}
public void setP1(LatLng p1) {
P1 = p1;
}
public LatLng getP2() {
return P2;
}
public void setP2(LatLng p2) {
P2 = p2;
}
public LatLng getP3() {
return P3;
}
public void setP3(LatLng p3) {
P3 = p3;
}
public LatLng getP4() {
return P4;
}
public void setP4(LatLng p4) {
P4 = p4;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
答案 0 :(得分:1)
使用和hashmap存储ZoneData id和折线id之间的关联:
HashMap<String,String> myIds = new HashMap<>();
Polyline polyline = map.addPolyline(...);
myIds.put(polyline.getId(),zone.getName();
和颜色:
折线line = map.addPolyline(new PolylineOptions() .add(新LatLng(51.5,-0.1),新LatLng(40.7,-74.0)) .WIDTH(5) 。颜色(Color.RED));