Skip to content

Commit dfb1372

Browse files
authored
Add Flatgeobuf Workspace (#64)
1 parent a2ec197 commit dfb1372

6 files changed

Lines changed: 213 additions & 1 deletion

File tree

doc/api/workspace/flatgeobuf.rst

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
:class:`workspace.Flatgeobuf`
2+
=====================
3+
4+
.. class:: workspace.Flatgeobuf(config)
5+
6+
:arg config: ``Object`` Configuration object.
7+
8+
Create a workspace from an Flatgeobuf directory.
9+
10+
11+
Config Properties
12+
-----------------
13+
14+
.. describe:: file
15+
16+
``String``
17+
Directory path to the Flatgeobuf files (required).
18+
19+
Properties
20+
----------
21+
22+
.. attribute:: Flatgeobuf.layers
23+
24+
``Array``
25+
The available layers in the workspace.
26+
27+
.. attribute:: Flatgeobuf.names
28+
29+
``Array``
30+
The available layer names in the workspace.
31+
32+
33+
Methods
34+
-------
35+
36+
37+
.. function:: Flatgeobuf.add
38+
39+
:arg layer: :class:`layer.Layer` The layer to be added.
40+
:arg options: ``Object`` Options for adding the layer.
41+
42+
Options:
43+
* `name`: ``String`` Name for the new layer.
44+
* `filter`: :class:`filter.Filter` Filter to apply to features before adding.
45+
* `projection`: :class:`proj.Projection` Destination projection for the layer.
46+
47+
:returns: :class:`layer.Layer`
48+
49+
Create a new layer in this workspace with the features from an existing
50+
layer. If a layer with the same name already exists in this workspace,
51+
you must provide a new name for the layer.
52+
53+
.. function:: Flatgeobuf.close
54+
55+
Close the workspace. This discards any existing connection to the
56+
underlying data store and discards the reference to the store.
57+
58+
.. function:: Flatgeobuf.get
59+
60+
:arg name: ``String`` Layer name.
61+
:returns: :class:`layer.Layer`
62+
63+
Get a layer by name. Returns ``undefined`` if name doesn't correspond
64+
to a layer source in the workspace.
65+
66+
67+
68+
69+
70+
71+

pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,11 @@
151151
<artifactId>gt-geobuf</artifactId>
152152
<version>${gt.version}</version>
153153
</dependency>
154+
<dependency>
155+
<groupId>org.geotools</groupId>
156+
<artifactId>gt-flatgeobuf</artifactId>
157+
<version>${gt.version}</version>
158+
</dependency>
154159
</dependencies>
155160
<build>
156161
<plugins>

src/main/resources/org/geoscript/js/lib/geoscript/workspace.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ exports.GeoPackage = require("./workspace/geopackage").GeoPackage;
4545
/** api: classes[] = geobuf */
4646
exports.Geobuf = require("./workspace/geobuf").Geobuf;
4747

48+
/** api: classes[] = flatgeobuf */
49+
exports.Flatgeobuf = require("./workspace/flatgeobuf").Flatgeobuf;
50+
4851
/** private: classes[] = spatialite */
4952
exports.SpatiaLite = require("./workspace/spatialite").SpatiaLite;
5053

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
var register = require("./util").register;
2+
var Factory = require("../factory").Factory;
3+
var Workspace = require("./workspace").Workspace;
4+
var UTIL = require("../util");
5+
6+
var FlatgeobufDataStoreFactory = Packages.org.geotools.data.flatgeobuf.FlatgeobufDataStoreFactory;
7+
8+
/** private: (define)
9+
* module = workspace
10+
* class = Flatgeobuf
11+
*/
12+
13+
var prepConfig = function(config) {
14+
if (config) {
15+
if (typeof config === "string") {
16+
config = {'flatgeobuf-file': config};
17+
}
18+
if (!(typeof config.file === "string")) {
19+
throw "Flatgeobuf config must include file path.";
20+
}
21+
config = {
22+
'flatgeobuf-file': String(config.file)
23+
};
24+
}
25+
return config;
26+
};
27+
28+
/** private: (extends)
29+
* workspace/workspace.js
30+
*/
31+
var Flatgeobuf = UTIL.extend(Workspace, {
32+
33+
/** private: config[file]
34+
* ``String``
35+
* Path to the file (required).
36+
*/
37+
38+
/** private: constructor
39+
* .. class:: Flatgeobuf
40+
*
41+
* :arg config: ``Object`` Configuration object.
42+
*
43+
* Create a workspace from a Flatgeobuf directory.
44+
*/
45+
constructor: function Flatgeobuf(config) {
46+
Workspace.prototype.constructor.apply(this, [prepConfig(config)]);
47+
},
48+
49+
/** private: method[_create]
50+
* :arg config: ``Object``
51+
* :returns: ``org.geotools.data.flatgeobuf.FlatgeobufDataStore``
52+
*
53+
* Create the underlying store for the workspace.
54+
*/
55+
_create: function(config) {
56+
var factory = new FlatgeobufDataStoreFactory();
57+
return factory.createDataStore(config);
58+
},
59+
60+
/** private: property[config]
61+
*/
62+
get config() {
63+
return {
64+
type: this.constructor.name,
65+
file: this.file
66+
};
67+
}
68+
69+
});
70+
71+
exports.Flatgeobuf = Flatgeobuf;
72+
73+
// register a Flatgeobuf factory for the module
74+
register(new Factory(Flatgeobuf, {
75+
handles: function(config) {
76+
var capable = false;
77+
if (typeof config.type === "string" && config.type.toLowerCase() === "Flatgeobuf") {
78+
try {
79+
config = prepConfig(config);
80+
capable = true;
81+
} catch (err) {
82+
// pass
83+
}
84+
}
85+
return capable;
86+
}
87+
}));

src/test/resources/org/geoscript/js/tests/geoscript/test_workspace.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ exports["test: Workspace.from_"] = function() {
3535
exports["test: Directory"] = require("./workspace/test_directory");
3636
exports["test: H2"] = require("./workspace/test_h2");
3737
exports["test: GeoPackage"] = require("./workspace/test_geopackage");
38-
exports["test: Geobu"] = require("./workspace/test_geobuf");
38+
exports["test: Geobuf"] = require("./workspace/test_geobuf");
39+
exports["test: Flatgeobuf"] = require("./workspace/test_flatgeobuf");
3940
exports["test: Memory"] = require("./workspace/test_memory");
4041
// exports["test: PostGIS"] = require("./workspace/test_postgis");
4142

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
var ASSERT = require("assert");
2+
var WORKSPACE = require("geoscript/workspace");
3+
var LAYER = require("geoscript/layer");
4+
var GEOM = require("geoscript/geom");
5+
var FS = require("fs");
6+
7+
exports["test: constructor"] = function() {
8+
9+
var Files = Packages.java.nio.file.Files;
10+
var file = Files.createTempDirectory("flatgeobuf").toFile().getAbsolutePath();
11+
var geobuf = new WORKSPACE.Flatgeobuf({file: file});
12+
13+
ASSERT.ok(geobuf instanceof WORKSPACE.Workspace, "instanceof Workspace");
14+
ASSERT.ok(geobuf instanceof WORKSPACE.Flatgeobuf, "instanceof Flatgeobuf");
15+
16+
geobuf.close();
17+
18+
};
19+
20+
exports["test: create"] = function() {
21+
22+
var Files = Packages.java.nio.file.Files;
23+
var file = Files.createTempDirectory("flatgeobuf").toFile().getAbsolutePath();
24+
var geobuf = new WORKSPACE.Flatgeobuf({file: file});
25+
26+
var layer = new LAYER.Layer({
27+
name: "places",
28+
fields: [{
29+
name: "name", type: "String"
30+
}, {
31+
name: "geom", type: "Point"
32+
}]
33+
});
34+
var geobufLayer = geobuf.add(layer);
35+
36+
geobufLayer.add({name: "San Francisco", geom: new GEOM.Point([-122.42, 37.78])});
37+
geobufLayer.add({name: "New York", geom: new GEOM.Point([-73.58, 40.47])});
38+
ASSERT.ok(geobufLayer.count == 2);
39+
40+
geobuf.close();
41+
};
42+
43+
if (require.main == module.id) {
44+
system.exit(require("test").run(exports));
45+
}

0 commit comments

Comments
 (0)