Prepare replays for vector tiles

This commit is contained in:
GaborFarkas
2017-05-15 22:52:19 +02:00
parent 0faf0dd2a1
commit c0fac0f5ca
2 changed files with 57 additions and 45 deletions

View File

@@ -324,16 +324,19 @@ if (ol.ENABLE_WEBGL) {
*/ */
ol.render.webgl.LineStringReplay.prototype.drawMultiLineString = function(multiLineStringGeometry, feature) { ol.render.webgl.LineStringReplay.prototype.drawMultiLineString = function(multiLineStringGeometry, feature) {
var indexCount = this.indices.length; var indexCount = this.indices.length;
var lineStringGeometries = multiLineStringGeometry.getLineStrings(); var ends = multiLineStringGeometry.getEnds();
ends.unshift(0);
var flatCoordinates = multiLineStringGeometry.getFlatCoordinates();
var stride = multiLineStringGeometry.getStride();
var i, ii; var i, ii;
for (i = 0, ii = lineStringGeometries.length; i < ii; ++i) { if (ends.length > 1) {
var flatCoordinates = lineStringGeometries[i].getFlatCoordinates(); for (i = 1, ii = ends.length; i < ii; ++i) {
var stride = lineStringGeometries[i].getStride(); if (this.isValid_(flatCoordinates, ends[i - 1], ends[i], stride)) {
if (this.isValid_(flatCoordinates, 0, flatCoordinates.length, stride)) { var lineString = ol.geom.flat.transform.translate(flatCoordinates, ends[i - 1], ends[i],
flatCoordinates = ol.geom.flat.transform.translate(flatCoordinates, 0, flatCoordinates.length, stride, -this.origin[0], -this.origin[1]);
stride, -this.origin[0], -this.origin[1]); this.drawCoordinates_(
this.drawCoordinates_( lineString, 0, lineString.length, stride);
flatCoordinates, 0, flatCoordinates.length, stride); }
} }
} }
if (this.indices.length > indexCount) { if (this.indices.length > indexCount) {

View File

@@ -712,28 +712,33 @@ if (ol.ENABLE_WEBGL) {
* @inheritDoc * @inheritDoc
*/ */
ol.render.webgl.PolygonReplay.prototype.drawMultiPolygon = function(multiPolygonGeometry, feature) { ol.render.webgl.PolygonReplay.prototype.drawMultiPolygon = function(multiPolygonGeometry, feature) {
var polygons = multiPolygonGeometry.getPolygons(); var endss = multiPolygonGeometry.getEndss();
var stride = multiPolygonGeometry.getStride(); var stride = multiPolygonGeometry.getStride();
var currIndex = this.indices.length; var currIndex = this.indices.length;
var currLineIndex = this.lineStringReplay.getCurrentIndex(); var currLineIndex = this.lineStringReplay.getCurrentIndex();
var flatCoordinates = multiPolygonGeometry.getFlatCoordinates();
var i, ii, j, jj; var i, ii, j, jj;
for (i = 0, ii = polygons.length; i < ii; ++i) { var start = 0;
var linearRings = polygons[i].getLinearRings(); for (i = 0, ii = endss.length; i < ii; ++i) {
if (linearRings.length > 0) { var ends = endss[i];
var flatCoordinates = linearRings[0].getFlatCoordinates(); if (ends.length > 0) {
flatCoordinates = ol.geom.flat.transform.translate(flatCoordinates, 0, flatCoordinates.length, var outerRing = ol.geom.flat.transform.translate(flatCoordinates, start, ends[0],
stride, -this.origin[0], -this.origin[1]); stride, -this.origin[0], -this.origin[1]);
var holes = []; if (outerRing.length) {
var holeFlatCoords; var holes = [];
for (j = 1, jj = linearRings.length; j < jj; ++j) { var holeFlatCoords;
holeFlatCoords = linearRings[j].getFlatCoordinates(); for (j = 1, jj = ends.length; j < jj; ++j) {
holeFlatCoords = ol.geom.flat.transform.translate(holeFlatCoords, 0, holeFlatCoords.length, if (ends[j] !== ends[j - 1]) {
stride, -this.origin[0], -this.origin[1]); holeFlatCoords = ol.geom.flat.transform.translate(flatCoordinates, ends[j - 1],
holes.push(holeFlatCoords); ends[j], stride, -this.origin[0], -this.origin[1]);
holes.push(holeFlatCoords);
}
}
this.lineStringReplay.drawPolygonCoordinates(outerRing, holes, stride);
this.drawCoordinates_(outerRing, holes, stride);
} }
this.lineStringReplay.drawPolygonCoordinates(flatCoordinates, holes, stride);
this.drawCoordinates_(flatCoordinates, holes, stride);
} }
start = ends[ends.length - 1];
} }
if (this.indices.length > currIndex) { if (this.indices.length > currIndex) {
this.startIndices.push(currIndex); this.startIndices.push(currIndex);
@@ -753,30 +758,34 @@ if (ol.ENABLE_WEBGL) {
* @inheritDoc * @inheritDoc
*/ */
ol.render.webgl.PolygonReplay.prototype.drawPolygon = function(polygonGeometry, feature) { ol.render.webgl.PolygonReplay.prototype.drawPolygon = function(polygonGeometry, feature) {
var linearRings = polygonGeometry.getLinearRings(); var ends = polygonGeometry.getEnds();
var stride = polygonGeometry.getStride(); var stride = polygonGeometry.getStride();
if (linearRings.length > 0) { if (ends.length > 0) {
this.startIndices.push(this.indices.length); var flatCoordinates = polygonGeometry.getFlatCoordinates();
this.startIndicesFeature.push(feature); var outerRing = ol.geom.flat.transform.translate(flatCoordinates, 0, ends[0],
if (this.state_.changed) {
this.styleIndices_.push(this.indices.length);
this.state_.changed = false;
}
this.lineStringReplay.setPolygonStyle(feature);
var flatCoordinates = linearRings[0].getFlatCoordinates();
flatCoordinates = ol.geom.flat.transform.translate(flatCoordinates, 0, flatCoordinates.length,
stride, -this.origin[0], -this.origin[1]); stride, -this.origin[0], -this.origin[1]);
var holes = []; if (outerRing.length) {
var i, ii, holeFlatCoords; var holes = [];
for (i = 1, ii = linearRings.length; i < ii; ++i) { var i, ii, holeFlatCoords;
holeFlatCoords = linearRings[i].getFlatCoordinates(); for (i = 1, ii = ends.length; i < ii; ++i) {
holeFlatCoords = ol.geom.flat.transform.translate(holeFlatCoords, 0, holeFlatCoords.length, if (ends[i] !== ends[i - 1]) {
stride, -this.origin[0], -this.origin[1]); holeFlatCoords = ol.geom.flat.transform.translate(flatCoordinates, ends[i - 1],
holes.push(holeFlatCoords); ends[i], stride, -this.origin[0], -this.origin[1]);
holes.push(holeFlatCoords);
}
}
this.startIndices.push(this.indices.length);
this.startIndicesFeature.push(feature);
if (this.state_.changed) {
this.styleIndices_.push(this.indices.length);
this.state_.changed = false;
}
this.lineStringReplay.setPolygonStyle(feature);
this.lineStringReplay.drawPolygonCoordinates(outerRing, holes, stride);
this.drawCoordinates_(outerRing, holes, stride);
} }
this.lineStringReplay.drawPolygonCoordinates(flatCoordinates, holes, stride);
this.drawCoordinates_(flatCoordinates, holes, stride);
} }
}; };