-
Notifications
You must be signed in to change notification settings - Fork 0
/
geojson.js
71 lines (61 loc) · 1.6 KB
/
geojson.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
// geojson.js
// Martin Pravda
/*jslint browser */
import GeoJSON from "ol/format/GeoJSON.js";
import {get} from "ol/proj.js";
// Converts geojson-vt data to GeoJSON
// taken from https://openlayers.org/en/latest/examples/geojson-vt.html
function replacer(ignore, value) {
if (!value || !value.geometry) {
return value;
}
let type;
const rawType = value.type;
let geometry = value.geometry;
if (rawType === 1) {
type = "MultiPoint";
if (geometry.length === 1) {
type = "Point";
geometry = geometry[0];
}
} else if (rawType === 2) {
type = "MultiLineString";
if (geometry.length === 1) {
type = "LineString";
geometry = geometry[0];
}
} else if (rawType === 3) {
type = "Polygon";
if (geometry.length > 1) {
type = "MultiPolygon";
geometry = [geometry];
}
}
return {
"geometry": {
"coordinates": geometry,
"type": type
},
"properties": value.tags,
"type": "Feature"
};
}
function transform_geojson(
geojson,
source_projection,
dest_projection
) {
const format = new GeoJSON();
const features = format.readFeatures(geojson, {
dataProjection: get(source_projection),
featureProjection: get(dest_projection)
});
return format.writeFeaturesObject(features, {
dataProjection: get(dest_projection),
featureProjection: get(dest_projection)
});
}
export default Object.freeze({
replacer,
transform_geojson
});