Clean up the gamma semantics a little.

0 (default) means unchanged: maxzoom contains all the dots.

Positive number, even very small, means that it still checks
the gap size and thins out dots if they are close together.

Negative number means no gamma, and the old random instead of
uniform dropping at low zooms.
This commit is contained in:
Eric Fischer
2015-03-23 14:44:21 -07:00
parent 26bcdef06b
commit a880f44a91
3 changed files with 29 additions and 27 deletions
+1 -1
View File
@@ -58,7 +58,7 @@ Options
* -f: Delete the mbtiles file if it already exists instead of giving an error * -f: Delete the mbtiles file if it already exists instead of giving an error
* -r <i>rate</i>: Rate at which dots are dropped at lower zoom levels (default 2.5) * -r <i>rate</i>: Rate at which dots are dropped at lower zoom levels (default 2.5)
* -b <i>pixels</i>: Buffer size where features are duplicated from adjacent tiles (default 5) * -b <i>pixels</i>: Buffer size where features are duplicated from adjacent tiles (default 5)
* -g <i>gamma</i>: Rate at which especially dense dots are dropped (default 1, for no effect). A gamma of 2 reduces the number of dots less than a pixel apart to the square root of their original number. * -g <i>gamma</i>: Rate at which especially dense dots are dropped (default 0, for no effect). A gamma of 2 reduces the number of dots less than a pixel apart to the square root of their original number.
Example Example
------- -------
+1 -1
View File
@@ -901,7 +901,7 @@ int main(int argc, char **argv) {
int minzoom = 0; int minzoom = 0;
int force = 0; int force = 0;
double droprate = 2.5; double droprate = 2.5;
double gamma = 1; double gamma = 0;
int buffer = 5; int buffer = 5;
const char *tmpdir = "/tmp"; const char *tmpdir = "/tmp";
+4 -2
View File
@@ -489,11 +489,11 @@ long long write_tile(char **geoms, char *metabase, unsigned *file_bbox, int z, u
continue; continue;
} }
if (t == VT_POINT && z < feature_minzoom && gamma == 0) { if (t == VT_POINT && z < feature_minzoom && gamma < 0) {
continue; continue;
} }
if (t == VT_POINT && gamma != 0) { if (t == VT_POINT && gamma >= 0) {
seq++; seq++;
if (seq >= 0) { if (seq >= 0) {
seq -= interval; seq -= interval;
@@ -501,6 +501,7 @@ long long write_tile(char **geoms, char *metabase, unsigned *file_bbox, int z, u
continue; continue;
} }
if (gamma > 0) {
unsigned long long index = encode(bbox[0] / 2 + bbox[2] / 2, bbox[1] / 2 + bbox[3] / 2); unsigned long long index = encode(bbox[0] / 2 + bbox[2] / 2, bbox[1] / 2 + bbox[3] / 2);
if (gap > 0) { if (gap > 0) {
if (index == previndex) { if (index == previndex) {
@@ -528,6 +529,7 @@ long long write_tile(char **geoms, char *metabase, unsigned *file_bbox, int z, u
previndex = index; previndex = index;
} }
}
bool reduced = false; bool reduced = false;
if (t == VT_POLYGON) { if (t == VT_POLYGON) {