void WKBWriter::writePolygon(const Polygon& g) { writeByteOrder(); writeGeometryType(WKBConstants::wkbPolygon, g.getSRID()); writeSRID(g.getSRID()); if(g.isEmpty()) { writeInt(0); return; } std::size_t nholes = g.getNumInteriorRing(); writeInt(static_cast<int>(nholes + 1)); const LineString* ls = g.getExteriorRing(); assert(ls); const CoordinateSequence* cs = ls->getCoordinatesRO(); assert(cs); writeCoordinateSequence(*cs, true); for(std::size_t i = 0; i < nholes; i++) { ls = g.getInteriorRingN(i); assert(ls); cs = ls->getCoordinatesRO(); assert(cs); writeCoordinateSequence(*cs, true); } }
void WKBWriter::writePolygon(const Polygon &g) { writeByteOrder(); writeGeometryType(WKBConstants::wkbPolygon, g.getSRID()); writeSRID(g.getSRID()); int nholes = g.getNumInteriorRing(); writeInt(nholes+1); const LineString* ls = g.getExteriorRing(); assert(ls); const CoordinateSequence* cs=ls->getCoordinatesRO(); assert(cs); writeCoordinateSequence(*cs, true); for (int i=0; i<nholes; i++) { ls = g.getInteriorRingN(i); assert(ls); cs = ls->getCoordinatesRO(); assert(cs); writeCoordinateSequence(*cs, true); } }
void WKBWriter::writeLineString(const LineString& g) { writeByteOrder(); writeGeometryType(WKBConstants::wkbLineString, g.getSRID()); writeSRID(g.getSRID()); const CoordinateSequence* cs = g.getCoordinatesRO(); assert(cs); writeCoordinateSequence(*cs, true); }
void WKBWriter::writePoint(const Point& g) { if(g.isEmpty()) throw util::IllegalArgumentException("Empty Points cannot be represented in WKB"); writeByteOrder(); writeGeometryType(WKBConstants::wkbPoint, g.getSRID()); writeSRID(g.getSRID()); const CoordinateSequence* cs = g.getCoordinatesRO(); assert(cs); writeCoordinateSequence(*cs, false); }