72 lines
2.4 KiB
JavaScript
72 lines
2.4 KiB
JavaScript
import path from "path-source";
|
|
import array from "array-source";
|
|
import stream from "stream-source";
|
|
import dbf from "./dbf/index";
|
|
import shapefile from "./shapefile/index";
|
|
import shp from "./shp/index";
|
|
|
|
export function open(shp, dbf, options) {
|
|
if (typeof dbf === "string") {
|
|
if (!/\.dbf$/i.test(dbf)) dbf += ".dbf";
|
|
dbf = path(dbf, options);
|
|
} else if (dbf instanceof ArrayBuffer || dbf instanceof Uint8Array) {
|
|
dbf = array(dbf);
|
|
} else if (dbf != null) {
|
|
dbf = stream(dbf);
|
|
}
|
|
if (typeof shp === "string") {
|
|
if (!/\.shp$/i.test(shp)) shp += ".shp";
|
|
if (dbf === undefined) dbf = path(shp.substring(0, shp.length - 4) + ".dbf", options).catch(function () { });
|
|
shp = path(shp, options);
|
|
} else if (shp instanceof ArrayBuffer || shp instanceof Uint8Array) {
|
|
shp = array(shp);
|
|
} else {
|
|
shp = stream(shp);
|
|
}
|
|
return Promise.all([shp, dbf]).then(function (sources) {
|
|
var shp = sources[0], dbf = sources[1], encoding = "windows-1252";
|
|
if (options && options.encoding != null) encoding = options.encoding;
|
|
return shapefile(shp, dbf, dbf && new TextDecoder(encoding));
|
|
});
|
|
}
|
|
|
|
export function openShp(source, options) {
|
|
if (typeof source === "string") {
|
|
if (!/\.shp$/i.test(source)) source += ".shp";
|
|
source = path(source, options);
|
|
} else if (source instanceof ArrayBuffer || source instanceof Uint8Array) {
|
|
source = array(source);
|
|
} else {
|
|
source = stream(source);
|
|
}
|
|
return Promise.resolve(source).then(shp);
|
|
}
|
|
|
|
export function openDbf(source, options) {
|
|
var encoding = "windows-1252";
|
|
if (options && options.encoding != null) encoding = options.encoding;
|
|
encoding = new TextDecoder(encoding);
|
|
if (typeof source === "string") {
|
|
if (!/\.dbf$/i.test(source)) source += ".dbf";
|
|
source = path(source, options);
|
|
} else if (source instanceof ArrayBuffer || source instanceof Uint8Array) {
|
|
source = array(source);
|
|
} else {
|
|
source = stream(source);
|
|
}
|
|
return Promise.resolve(source).then(function (source) {
|
|
return dbf(source, encoding);
|
|
});
|
|
}
|
|
|
|
export function read(shp, dbf, options) {
|
|
return open(shp, dbf, options).then(function (source) {
|
|
var features = [], collection = { type: "FeatureCollection", features: features, bbox: source.bbox };
|
|
return source.read().then(function read(result) {
|
|
if (result.done) return collection;
|
|
features.push(result.value);
|
|
return source.read().then(read);
|
|
});
|
|
});
|
|
}
|