Socket
Socket
Sign inDemoInstall

gdalclip

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

gdalclip - npm Package Compare versions

Comparing version 1.0.1 to 1.1.0

static/illustration.png

4

app.js

@@ -9,2 +9,4 @@ const gdalclip = require('./src/index.js');

gdalclip.processData(talhoes, solos);
const data = gdalclip.processData(talhoes, solos);
console.log(data);
{
"name": "gdalclip",
"version": "1.0.1",
"version": "1.1.0",
"description": "Clip geometries between two datasets while maintain the attributes from both",

@@ -32,4 +32,5 @@ "main": "src/index.js",

"dependencies": {
"gdal": "^0.9.6"
"gdal": "^0.9.6",
"uuid": "^3.2.1"
}
}
# gdalClip
Clip geometries between two datasets while maintain the attributes from both.
## Dependencies
* [gdal](https://www.npmjs.com/package/gdal)
## Setup
```bash
npm install gdalclip
```
## Usage
```bash
const data = gdalclip.processData(<clipFeature>, <inputFeature>, <outputName>, <outputFormat>);
```
## Sample Usage
```bash
const gdalclip = require('gdalclip');
const gdal = require('gdal');
const getFeatures = shapefile => gdal.open(shapefile).layers.get(0);
const baseData = getFeatures('path/to/baseData.shp');
const clipData = getFeatures('path/to/clipData.shp');
gdalclip.processData(talhoes, solos, 'path/to/outputData.shp', 'ESRI Shapefile');
```
## Ilustration
![](static/illustration.png)
---
=^]

@@ -17,5 +17,12 @@ const gdal = require('gdal');

const newLayer = newDataset.layers.create(`${datasetCut.name}_clip`, srid, 6);
const datasetCutColumns = getColumns(datasetCut);
const datasetBaseColumns = getColumns(datasetBase).map(value => {
if (datasetCutColumns.map(cutColumn => cutColumn.toUpperCase()).includes(value.toUpperCase())) {
return `${value}|${value.slice(0, -1)}1`;
}
return value;
});
const layersColumns = {
datasetCut: getColumns(datasetCut),
datasetBase: getColumns(datasetBase),
datasetCut: datasetCutColumns,
datasetBase: datasetBaseColumns,
};

@@ -25,7 +32,12 @@

for (const column of columns) {
const fieldDefinition = dataset.fields.get(column);
newdataset.fields.add(fieldDefinition);
if (!column.includes('|')) {
const fieldDefinition = dataset.fields.get(column);
newdataset.fields.add(fieldDefinition);
} else {
const fieldDefinition = dataset.fields.get(column.split('|')[0]);
fieldDefinition.name = column.split('|')[1].toString();
newdataset.fields.add(fieldDefinition);
}
}
};
addColumns(layersColumns.datasetCut, datasetCut, newLayer);

@@ -45,17 +57,43 @@ addColumns(layersColumns.datasetBase, datasetBase, newLayer);

datasetBase.setSpatialFilter(envelope);
const baseFeatures = datasetBase.features;
baseFeatures.forEach(baseFeature => {
const clipFeature = cutFeature.getGeometry().intersection(baseFeature.getGeometry());
if (!clipFeature.isEmpty()) {
const feature = new gdal.Feature(newLayer);
feature.setGeometry(clipFeature);
for (const column of layersColumns.datasetCut) {
feature.fields.set(column, cutFeature.fields.get(column));
if (clipFeature.constructor.name === 'Polygon');
{
const feature = new gdal.Feature(newLayer);
feature.setGeometry(clipFeature);
for (const column of layersColumns.datasetCut) {
feature.fields.set(column, cutFeature.fields.get(column));
}
for (const column of layersColumns.datasetBase) {
if (!column.includes('|')) {
feature.fields.set(column, baseFeature.fields.get(column));
} else {
const columnName = column.split('|')[1];
const columnValue = baseFeature.fields.get(column.split('|')[0]);
feature.fields.set(columnName, columnValue);
}
}
newLayer.features.add(feature);
}
for (const column of layersColumns.datasetBase) {
feature.fields.set(column, baseFeature.fields.get(column));
if (clipFeature.constructor.name === 'MultiPolygon') {
for (const multipart of clipFeature.children.toArray()) {
const feature = new gdal.Feature(newLayer);
feature.setGeometry(multipart);
for (const column of layersColumns.datasetCut) {
feature.fields.set(column, cutFeature.fields.get(column));
}
for (const column of layersColumns.datasetBase) {
if (!column.includes('|')) {
feature.fields.set(column, baseFeature.fields.get(column));
} else {
const columnName = column.split('|')[1];
const columnValue = baseFeature.fields.get(column.split('|')[0]);
feature.fields.set(columnName, columnValue);
}
}
newLayer.features.add(feature);
}
}
newLayer.features.add(feature);
}

@@ -68,4 +106,36 @@ });

const exportLayer = (clippedData, outputName, outputFormat) => {
const srid = clippedData.srs;
const layerName = outputName
.substring(0, outputName.lastIndexOf('.'))
.split('/')
.pop();
const outputFile = gdal.open(outputName, 'w', outputFormat);
const outputLayer = outputFile.layers.create(layerName, srid, 6);
for (const columnName of clippedData.fields.getNames()) {
outputLayer.fields.add(clippedData.fields.get(columnName));
}
clippedData.features.first();
let clippedFeature = clippedData.features.next();
while (clippedFeature) {
const outputFeature = new gdal.Feature(outputLayer);
outputFeature.setGeometry(clippedFeature.getGeometry());
for (const columnName of clippedData.fields.getNames()) {
outputFeature.fields.set(columnName, clippedFeature.fields.get(columnName));
}
outputLayer.features.add(outputFeature);
clippedFeature = clippedData.features.next();
}
outputLayer.flush();
outputFile.close();
return outputName;
};
exports.validateEPSG = validateEPSG;
exports.createLayer = createLayer;
exports.clipFeatures = clipFeatures;
exports.exportLayer = exportLayer;
const gdalFuncs = require('./gdalFuncs');
const uuid = require('uuid');
const processData = (datasetCut, datasetBase) => {
const processData = (
datasetCut,
datasetBase,
outputName = `tmp/output_${uuid().replace(/-/g, '')}.shp`,
outputFormat = 'ESRI Shapefile',
) => {
try {

@@ -12,4 +18,5 @@ if (datasetCut.constructor.name !== 'Layer' || datasetBase.constructor.name !== 'Layer') {

const clippedData = gdalFuncs.clipFeatures(newLayer, layersColumns, datasetCut, datasetBase);
const exportData = gdalFuncs.exportLayer(clippedData, outputName, outputFormat);
return clippedData;
return exportData;
} catch (error) {

@@ -16,0 +23,0 @@ throw Error(error);

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc