从PostgreSQL DB获取多个坐标并显示多边形

时间:2014-12-09 08:57:27

标签: java android sql postgresql polygon

我在理解ResultSet时遇到了一些麻烦,所以我问你。我将简要介绍一下我的担忧。

我有一张看起来像这样的表

id(serial) | border(geometry)
    1          latlnggeom1
    2          latlnggeom2
    3          latlnggeom3

我想从该表中获取坐标并将它们显示在PolygonOptions中,通常我会这样做:

PolygonOptions p = new PolygonOptions().add(new LatLng(lat1, lng1), new LatLng(lat2, lng2), new LatLng(lat3, lng3));

当坐标不在数据库中,但是有175个坐标,我不知道从数据库中获取坐标时怎么做,我想我不需要在add()方法中添加175个条目。到目前为止我的代码看起来像:

prepst = dbops.connect(DB_URL, DB_USER, DB_PW)
                        .prepareStatement(sql);
                rs = prepst.executeQuery();
                while (rs.next()) {
                    int id = rs.getInt("id");
                    double x = rs.getDouble("x");
                    double y = rs.getDouble("y");
                    Log.e(Borders.class.getName(), id + " " + x + " " + y);
                    PolygonOptions rectOptions = new PolygonOptions()
                            .add(new LatLng(x, y)).strokeWidth((float) 1.5)
                            .fillColor(color);
                    map.addPolygon(rectOptions);
                }

Log.e正确显示值:

1 44.371002 23.739099
2 44.365234 23.749742
...
175 44.370394 23.738563

但我坚持将值添加到PolygonOptions并进一步将多边形添加到地图中。提前谢谢。

1 个答案:

答案 0 :(得分:0)

我确实解决了这个问题,我使用了LatLng的ArrayList,它运行得很好。我将发布代码并在下面解释,以便将来遇到这个问题。

    //initialize an ArrayList of LatLng type.
    ArrayList<LatLng> border = new ArrayList<LatLng>();

    if (dbops.connect(DB_URL, DB_USER, DB_PW).isValid(1)) {
        dbops.disconnect();
        prepst = dbops.connect(DB_URL, DB_USER, DB_PW)
                .prepareStatement(sql);
        rs = prepst.executeQuery();
        while (rs.next()) {
            int id = rs.getInt("id");
            double x = rs.getDouble("x");
            double y = rs.getDouble("y");
            Log.e(Borders.class.getName(), id + " " + x + " " + y);
            LatLng ll = new LatLng(x, y); //Create a LatLng object to store the x,y doubles inside the array.
            border.add(ll); //add each x,y taken from the database into your ArrayList.

        }
        Log.e(Borders.class.getName(), "" + border); //check and make sure your arraylist was created succesfully.

        PolygonOptions rectOptions = new PolygonOptions().addAll(border)
                .strokeWidth((float) 1.5).fillColor(color); //take each item from the arraylist and add it to your polygon
        map.addPolygon(rectOptions);
        Log.e(Borders.class.getName(), "polygonadded");
        dbops.disconnect();
    }

所以你基本上做的是,你初始化一个LatLng类型的ArrayList,从数据库中获取数据并创建一个LatLng对象来存储从数据库中获取的值。然后将LatLng对象存储在ArrayList中,最后将ArrayList添加到PolygonOptions中。请注意,我使用addAll();

更改了方法add()