Security News
38% of CISOs Fear They’re Not Moving Fast Enough on AI
CISOs are racing to adopt AI for cybersecurity, but hurdles in budgets and governance may leave some falling behind in the fight against cyber threats.
Utility for warping GIS-like triangular meshes to fit a projection; meant for helping WebGL raster reprojection.
A tool for subdividing triangular meshes for GIS reprojection purposes.
See https://ivan.sanchezortega.es/development/2021/03/08/introducing-arrugator.html
The inputs are:
projector
function (which takes an Array
of 2 Number
s, and returns an Array
of 2 Number
s). Typically this is meant to be a proj4js
forward projection function, like proj4(srcCRS, destCRS).forward
; however, arrugator has no hard dependency on proj4js, so other projection methods could be used.Array
of Array
s of 2 Number
s, typically NW-SW-NE-SE)Array
of Array
s of 2 Number
s, typically [[0,0],[0,1],[1,0],[1,1]]
)Array
of Array
s of 3 Number
s, typically [[0,1,3],[0,3,2]]
).Note that the typical input is four vertices, but there's no hard requirement on that. Any triangular mesh should do (and maybe there are edge cases I haven't think of where it's required so things work for weird projections like polyhedral ones).
And the ouputs are:
Array
of Array
s of 2 Number
s)Array
of Array
s of 2 Number
s)Array
of Array
s of 2 Number
s)Array
of Array
s of 3 Number
s).Initialize some data (assuming proj4
has already been set up):
// These are the corner coordinates of a Spanish 1:2.000.000 overview map in ETRS89+UTM30N:
let epsg25830coords = [
[-368027.127, 4880336.821], // top-left
[-368027.127, 3859764.821], // bottom-left
[1152416.873, 4880336.821], // top-right
[1152416.873, 3859764.821], // bottom-right
];
let sourceUV = [
[0, 0], // top-left
[0, 1], // bottom-left
[1, 0], // top-right
[1, 1], // bottom-right
];
let arruga = new Arrugator(
proj4('EPSG:25830','EPSG:3034').forward,
epsg25830coords,
sourceUV,
[[0,1,3],[0,3,2]] // topleft-bottomleft-bottomright ; topleft-bottomright-topright
);
Then, subdivide once:
arruga.step();
Or subdivide several times:
for (let i=0; i<10; i++) {
arruga.step();
}
Or subdivide until epsilon is lower than a given number (square of distance in map units of the projected CRS - in this example, EPSG:3034 map units):
arruga.lowerEpsilon(1000000); // 1000 "meter"s, squared
Once you're happy with the subdivisions, fetch the mesh state:
let arrugado = arruga.output();
let unprojectedCoords = arrugado.unprojected;
let projectedCoords = arrugado.projected;
let uvCoords = arrugado.uv;
let trigs = arrugado.trigs;
The output are Array
s of Array
s, so the use case of dumping the data into a TypedArray
to use it in a WebGL buffer needs them to be .flat()
tened before.
How to do this depends on how you're usign WebGL (or what WebGL framework you're using). For example, my glii examples work like:
const pos = new glii.SingleAttribute({ glslType: "vec2", growFactor: 2 });
const uv = new glii.SingleAttribute({ glslType: "vec2", growFactor: 2 });
const indices = new glii.TriangleIndices({ growFactor: 2 });
pos.setBytes(0, 0, Float32Array.from(arrugado.projected.flat()));
uv.setBytes(0, 0, Float32Array.from(arrugado.uv.flat()));
solidIndices.allocateSlots(arrugado.trigs.length * 3);
solidIndices.set(0, arrugado.trigs.flat());
wireIndices.allocateSlots(arrugado.trigs.length * 3);
wireIndices.set(0, arrugado.trigs.flat());
See the demo
branch of this git repository; there are some glii-powered examples there, including demo raster data.
Released under the General Public License, v3. See the LICENSE file for details.
v1.0.0 2021-03-09
FAQs
Utility for warping GIS-like triangular meshes to fit a projection; meant for helping WebGL raster reprojection.
The npm package arrugator receives a total of 0 weekly downloads. As such, arrugator popularity was classified as not popular.
We found that arrugator demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
CISOs are racing to adopt AI for cybersecurity, but hurdles in budgets and governance may leave some falling behind in the fight against cyber threats.
Research
Security News
Socket researchers uncovered a backdoored typosquat of BoltDB in the Go ecosystem, exploiting Go Module Proxy caching to persist undetected for years.
Security News
Company News
Socket is joining TC54 to help develop standards for software supply chain security, contributing to the evolution of SBOMs, CycloneDX, and Package URL specifications.