我正在使用jsf / primefaces开发一个Web应用程序。在我的应用程序中,我将多个多边形推到gmap叠加层上。但是,当我将多边形推到叠加层上时,它会合并为一个大的多边形,因为对象名称在多边形多边形处是静态的。我的问题是如何在迭代时重命名多边形并更改为多边形对象名称从多边形到polygon1,polygon2,polygon3等。这是我的代码片段,我试图将多边形推到叠加层上。
Polygon polygon = new Polygon();
while (rs.next()) {
HashMap<Integer, Polygon> map;
map = new HashMap<Integer, Polygon>();
int id = rs.getInt(1);
String value = rs.getString(2);
String valuereal = value.replaceAll("[^0-9 .,-]+", "");
ArrayList<String> myList = new ArrayList<String>(Arrays.asList(valuereal.split(",")));
myList.remove(myList.size() - 1);
for (String coordString : myList) {
String[] parts = coordString.split(" ");
String latS = parts[0];
String lngS = parts[1];
double lat = Double.parseDouble(latS);
double lng = Double.parseDouble(lngS);
LatLng coord = new LatLng(lat, lng);
polygon.getPaths().add(coord);
map.put(id, polygon);
}
polygon.setStrokeColor("#000000");
polygon.setFillColor("#009900");
polygon.setStrokeOpacity(2.0);
polygon.setFillOpacity(3.0);
System.out.println(map.get(id).getPaths());
polygonModel.addOverlay((Polygon) map.get(id));
答案 0 :(得分:2)
您的问题是您已在循环外实例化polygon
对象。要将它们分开,您不需要创建'polygon1,plygon2 ..等等'。
更清洁的方法是在循环外创建一个数组列表,在循环内部创建一个新的“多边形”并继续在数组列表中推送多边形。优点是您可以稍后使用此ArrayList迭代并对多边形执行任何操作
ArrayList <Polygon> polygons = new ArrayList<Polygon>();
while (rs.next()) {
Polygon polygon = new Polygon();
.
.
.
.
for(....){
polygon.getPaths().add(coord);
polygons.add(polygon)
}
// now add all polygons to map
for (Polygon p : polygons) {
map.put(id, p);
}
} // end of while
以上只是一个片段,但应该让你知道我的意思。请原谅任何语法错误,自从我讲任何Java以来已经有一段时间了。
这将为您提供添加到地图的单独多边形对象,但是我不太确定您将其添加到地图对象中的“id”。这似乎是商业逻辑。但是你明白了。在最大值时,您可能必须使用新ID添加每个多边形,这会将map.put
循环推到while
答案 1 :(得分:1)
看起来你反复更新同一个polygon
对象,因为它在你的while循环之外被实例化。尝试在while循环中新建它,例如
Polygon polygon = new Polygon();
while (rs.next()) {
HashMap<Integer, Polygon> map;
...变为
while (rs.next()) {
Polygon polygon = new Polygon();
HashMap<Integer, Polygon> map;