Ignore:
Timestamp:
2019-09-11T14:10:24+02:00 (5 years ago)
Author:
frederik
Message:

support multipolygons, in case osm2pgsql was called with -G option

File:
1 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/seachart/jrenderpgsql/src/jrenderpgsql/JrenderPgsql.java

    r35094 r35110  
    3434import org.postgis.LineString;
    3535import org.postgis.Polygon;
     36import org.postgis.MultiPolygon;
    3637import org.postgis.LinearRing;
    3738import org.postgis.PGgeometry;
     
    109110    }
    110111
     112    private static void addpoly(Polygon po, String table, String osmid)
     113    {
     114        if (po.numRings() > 1)
     115        {
     116            System.err.println("warning: polygons with holes not supported (" + table + " id=" + osmid + ")");
     117        }
     118        LinearRing lr = (LinearRing) po.getRing(0);
     119        waybuf.append("<way id=\"");
     120        waybuf.append(++wid);
     121        waybuf.append("\" version=\"1\" user=\"1\" uid=\"1\" changeset=\"1\" timestamp=\"1980-01-01T00:00:00Z\">\n");
     122        for (int i=0; i < lr.numPoints(); i++)
     123        {
     124            int n = addnode ((Point) lr.getPoint(i), true);
     125            waybuf.append("<nd ref=\"" + n + "\" />\n");
     126        }
     127    }
     128
    111129    /**
    112130     *  helper for adding a PostGIS geometry to pseudo OSM XML
    113131     *  @returns either the node or the way string buffer, depending on geom type
    114132     */
    115     private static StringBuilder decode_geom(PGgeometry geom)
     133    private static StringBuilder decode_geom(PGgeometry geom, String table, String osmid)
    116134    {
    117135        if (geom.getGeoType() == Geometry.POINT)
     
    135153        else if (geom.getGeoType() == Geometry.POLYGON)
    136154        {
    137             Polygon po = (Polygon) geom.getGeometry();
    138             if (po.numRings() > 1)
    139             {
    140                 System.err.println("warning: polygons with holes not supported");
    141             }
    142             LinearRing lr = (LinearRing) po.getRing(0);
    143             waybuf.append("<way id=\"");
    144             waybuf.append(++wid);
    145             waybuf.append("\" version=\"1\" user=\"1\" uid=\"1\" changeset=\"1\" timestamp=\"1980-01-01T00:00:00Z\">\n");
    146             for (int i=0; i < lr.numPoints(); i++)
    147             {
    148                 int n = addnode ((Point) lr.getPoint(i), true);
    149                 waybuf.append("<nd ref=\"" + n + "\" />\n");
     155            addpoly((Polygon) geom.getGeometry(), table, osmid);
     156            return waybuf;
     157        }
     158        else if (geom.getGeoType() == Geometry.MULTIPOLYGON)
     159        {
     160            MultiPolygon po = (MultiPolygon) geom.getGeometry();
     161            for (Polygon p : po.getPolygons())
     162            {
     163                addpoly(p, table, osmid);
    150164            }
    151165            return waybuf;
     
    299313            int geomcol = 0;
    300314            int tagscol = 0;
     315            int idcol = 0;
    301316            for (int i = 1; i<colCount; i++)
    302317            {
     
    306321                } else if (n.equals("tags")) {
    307322                    tagscol = i;
     323                } else if (n.equals("osm_id")) {
     324                    idcol = i;
    308325                } else if (n.equals("mygeom")) {
    309326                    geomcol = i;
     
    330347            {
    331348                PGgeometry geom = (PGgeometry) rs.getObject(geomcol);
    332                 StringBuilder currentbuf = decode_geom(geom);
     349                String osmid = (idcol> 0) ? rs.getString(idcol) : "nil";
     350                StringBuilder currentbuf = decode_geom(geom, table, osmid);
    333351
    334352                for (int i = 1; i<colCount; i++)
Note: See TracChangeset for help on using the changeset viewer.