New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

three-geojson-geometry

Package Overview
Dependencies
Maintainers
1
Versions
28
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

three-geojson-geometry - npm Package Compare versions

Comparing version 0.2.0 to 0.3.0

src/interpolateLine.js

54

dist/three-geojson-geometry.common.js

@@ -72,3 +72,38 @@ 'use strict';

function GeoJsonGeometry(geoJson, radius) {
var getInterpolatedVals = function getInterpolatedVals(start, end, numPnts) {
var result = [];
for (var i = 1; i <= numPnts; i++) {
result.push(start + (end - start) * i / (numPnts + 1));
}
return result;
};
var interpolateLine = function interpolateLine() {
var lineCoords = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var maxDegDistance = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
var result = [];
var prevPnt = null;
lineCoords.forEach(function (pnt) {
if (prevPnt) {
var dist = Math.sqrt(Math.pow(pnt[0] - prevPnt[0], 2) + Math.pow(pnt[1] - prevPnt[1], 2));
if (dist > maxDegDistance) {
var numAdditionalPnts = Math.floor(dist / maxDegDistance);
var lngs = getInterpolatedVals(prevPnt[0], pnt[0], numAdditionalPnts);
var lats = getInterpolatedVals(prevPnt[1], pnt[1], numAdditionalPnts);
for (var i = 0, len = lngs.length; i < len; i++) {
result.push([lngs[i], lats[i]]);
}
}
}
result.push(prevPnt = pnt);
});
return result;
};
function GeoJsonGeometry(geoJson, radius, resolution) {
three.Geometry.call(this);

@@ -78,5 +113,6 @@ this.type = 'GeoJsonGeometry';

geoJson: geoJson,
radius: radius
radius: radius,
resolution: resolution
};
this.fromBufferGeometry(new GeoJsonBufferGeometry(geoJson, radius));
this.fromBufferGeometry(new GeoJsonBufferGeometry(geoJson, radius, resolution));
this.mergeVertices();

@@ -88,3 +124,3 @@ }

function GeoJsonBufferGeometry(geoJson, radius) {
function GeoJsonBufferGeometry(geoJson, radius, resolution) {
var _this = this;

@@ -96,6 +132,8 @@

geoJson: geoJson,
radius: radius
radius: radius,
resolution: resolution
}; // defaults
radius = radius || 1; // process various geometry types
radius = radius || 1;
resolution = resolution || 5; // process various geometry types

@@ -156,3 +194,3 @@ var groups = ({

function genLineString(coords, r) {
var coords3d = coords.map(function (_ref3) {
var coords3d = interpolateLine(coords, resolution).map(function (_ref3) {
var _ref4 = _slicedToArray(_ref3, 2),

@@ -199,3 +237,3 @@ lng = _ref4[0],

var coords3d = coords.map(function (coordsSegment) {
return coordsSegment.map(function (_ref7) {
return interpolateLine(coordsSegment, resolution).map(function (_ref7) {
var _ref8 = _slicedToArray(_ref7, 2),

@@ -202,0 +240,0 @@ lng = _ref8[0],

@@ -1,2 +0,2 @@

// Version 0.2.0 three-geojson-geometry - https://github.com/vasturiano/three-geojson-geometry
// Version 0.3.0 three-geojson-geometry - https://github.com/vasturiano/three-geojson-geometry
(function (global, factory) {

@@ -720,3 +720,38 @@ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('three')) :

function GeoJsonGeometry(geoJson, radius) {
var getInterpolatedVals = function getInterpolatedVals(start, end, numPnts) {
var result = [];
for (var i = 1; i <= numPnts; i++) {
result.push(start + (end - start) * i / (numPnts + 1));
}
return result;
};
var interpolateLine = function interpolateLine() {
var lineCoords = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var maxDegDistance = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
var result = [];
var prevPnt = null;
lineCoords.forEach(function (pnt) {
if (prevPnt) {
var dist = Math.sqrt(Math.pow(pnt[0] - prevPnt[0], 2) + Math.pow(pnt[1] - prevPnt[1], 2));
if (dist > maxDegDistance) {
var numAdditionalPnts = Math.floor(dist / maxDegDistance);
var lngs = getInterpolatedVals(prevPnt[0], pnt[0], numAdditionalPnts);
var lats = getInterpolatedVals(prevPnt[1], pnt[1], numAdditionalPnts);
for (var i = 0, len = lngs.length; i < len; i++) {
result.push([lngs[i], lats[i]]);
}
}
}
result.push(prevPnt = pnt);
});
return result;
};
function GeoJsonGeometry(geoJson, radius, resolution) {
three.Geometry.call(this);

@@ -726,5 +761,6 @@ this.type = 'GeoJsonGeometry';

geoJson: geoJson,
radius: radius
radius: radius,
resolution: resolution
};
this.fromBufferGeometry(new GeoJsonBufferGeometry(geoJson, radius));
this.fromBufferGeometry(new GeoJsonBufferGeometry(geoJson, radius, resolution));
this.mergeVertices();

@@ -736,3 +772,3 @@ }

function GeoJsonBufferGeometry(geoJson, radius) {
function GeoJsonBufferGeometry(geoJson, radius, resolution) {
var _this = this;

@@ -744,6 +780,8 @@

geoJson: geoJson,
radius: radius
radius: radius,
resolution: resolution
}; // defaults
radius = radius || 1; // process various geometry types
radius = radius || 1;
resolution = resolution || 5; // process various geometry types

@@ -804,3 +842,3 @@ var groups = ({

function genLineString(coords, r) {
var coords3d = coords.map(function (_ref3) {
var coords3d = interpolateLine(coords, resolution).map(function (_ref3) {
var _ref4 = _slicedToArray(_ref3, 2),

@@ -847,3 +885,3 @@ lng = _ref4[0],

var coords3d = coords.map(function (coordsSegment) {
return coordsSegment.map(function (_ref7) {
return interpolateLine(coordsSegment, resolution).map(function (_ref7) {
var _ref8 = _slicedToArray(_ref7, 2),

@@ -850,0 +888,0 @@ lng = _ref8[0],

4

dist/three-geojson-geometry.min.js

@@ -1,2 +0,2 @@

// Version 0.2.0 three-geojson-geometry - https://github.com/vasturiano/three-geojson-geometry
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("three")):"function"==typeof define&&define.amd?define(["exports","three"],t):t((e=e||self).THREE=e.THREE||{},e.THREE)}(this,(function(e,t){"use strict";function n(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(!(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)))return;var n=[],r=!0,i=!1,o=void 0;try{for(var u,x=e[Symbol.iterator]();!(r=(u=x.next()).done)&&(n.push(u.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{r||null==x.return||x.return()}finally{if(i)throw o}}return n}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function r(e){return function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t<e.length;t++)n[t]=e[t];return n}}(e)||function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}var i=u,o=u;function u(e,t,n){n=n||2;var r,i,o,u,v,c,s,y=t&&t.length,h=y?t[0]*n:e.length,g=x(e,0,h,n,!0),m=[];if(!g||g.next===g.prev)return m;if(y&&(g=function(e,t,n,r){var i,o,u,a,v,c=[];for(i=0,o=t.length;i<o;i++)u=t[i]*r,a=i<o-1?t[i+1]*r:e.length,(v=x(e,u,a,r,!1))===v.next&&(v.steiner=!0),c.push(d(v));for(c.sort(p),i=0;i<c.length;i++)l(c[i],n),n=f(n,n.next);return n}(e,t,g,n)),e.length>80*n){r=o=e[0],i=u=e[1];for(var Z=n;Z<h;Z+=n)(v=e[Z])<r&&(r=v),(c=e[Z+1])<i&&(i=c),v>o&&(o=v),c>u&&(u=c);s=0!==(s=Math.max(o-r,u-i))?1/s:0}return a(g,m,n,r,i,s),m}function x(e,t,n,r,i){var o,u;if(i===z(e,t,n,r)>0)for(o=t;o<n;o+=r)u=E(o,e[o],e[o+1],u);else for(o=n-r;o>=t;o-=r)u=E(o,e[o],e[o+1],u);return u&&b(u,u.next)&&(j(u),u=u.next),u}function f(e,t){if(!e)return e;t||(t=e);var n,r=e;do{if(n=!1,r.steiner||!b(r,r.next)&&0!==Z(r.prev,r,r.next))r=r.next;else{if(j(r),(r=t=r.prev)===r.next)break;n=!0}}while(n||r!==t);return t}function a(e,t,n,r,i,o,u){if(e){!u&&o&&function(e,t,n,r){var i=e;do{null===i.z&&(i.z=h(i.x,i.y,t,n,r)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next}while(i!==e);i.prevZ.nextZ=null,i.prevZ=null,function(e){var t,n,r,i,o,u,x,f,a=1;do{for(n=e,e=null,o=null,u=0;n;){for(u++,r=n,x=0,t=0;t<a&&(x++,r=r.nextZ);t++);for(f=a;x>0||f>0&&r;)0!==x&&(0===f||!r||n.z<=r.z)?(i=n,n=n.nextZ,x--):(i=r,r=r.nextZ,f--),o?o.nextZ=i:e=i,i.prevZ=o,o=i;n=r}o.nextZ=null,a*=2}while(u>1)}(i)}(e,r,i,o);for(var x,p,l=e;e.prev!==e.next;)if(x=e.prev,p=e.next,o?c(e,r,i,o):v(e))t.push(x.i/n),t.push(e.i/n),t.push(p.i/n),j(e),e=p.next,l=p.next;else if((e=p)===l){u?1===u?a(e=s(e,t,n),t,n,r,i,o,2):2===u&&y(e,t,n,r,i,o):a(f(e),t,n,r,i,o,1);break}}}function v(e){var t=e.prev,n=e,r=e.next;if(Z(t,n,r)>=0)return!1;for(var i=e.next.next;i!==e.prev;){if(g(t.x,t.y,n.x,n.y,r.x,r.y,i.x,i.y)&&Z(i.prev,i,i.next)>=0)return!1;i=i.next}return!0}function c(e,t,n,r){var i=e.prev,o=e,u=e.next;if(Z(i,o,u)>=0)return!1;for(var x=i.x<o.x?i.x<u.x?i.x:u.x:o.x<u.x?o.x:u.x,f=i.y<o.y?i.y<u.y?i.y:u.y:o.y<u.y?o.y:u.y,a=i.x>o.x?i.x>u.x?i.x:u.x:o.x>u.x?o.x:u.x,v=i.y>o.y?i.y>u.y?i.y:u.y:o.y>u.y?o.y:u.y,c=h(x,f,t,n,r),s=h(a,v,t,n,r),y=e.prevZ,p=e.nextZ;y&&y.z>=c&&p&&p.z<=s;){if(y!==e.prev&&y!==e.next&&g(i.x,i.y,o.x,o.y,u.x,u.y,y.x,y.y)&&Z(y.prev,y,y.next)>=0)return!1;if(y=y.prevZ,p!==e.prev&&p!==e.next&&g(i.x,i.y,o.x,o.y,u.x,u.y,p.x,p.y)&&Z(p.prev,p,p.next)>=0)return!1;p=p.nextZ}for(;y&&y.z>=c;){if(y!==e.prev&&y!==e.next&&g(i.x,i.y,o.x,o.y,u.x,u.y,y.x,y.y)&&Z(y.prev,y,y.next)>=0)return!1;y=y.prevZ}for(;p&&p.z<=s;){if(p!==e.prev&&p!==e.next&&g(i.x,i.y,o.x,o.y,u.x,u.y,p.x,p.y)&&Z(p.prev,p,p.next)>=0)return!1;p=p.nextZ}return!0}function s(e,t,n){var r=e;do{var i=r.prev,o=r.next.next;!b(i,o)&&w(i,r,r.next,o)&&M(i,o)&&M(o,i)&&(t.push(i.i/n),t.push(r.i/n),t.push(o.i/n),j(r),j(r.next),r=e=o),r=r.next}while(r!==e);return r}function y(e,t,n,r,i,o){var u=e;do{for(var x=u.next.next;x!==u.prev;){if(u.i!==x.i&&m(u,x)){var v=G(u,x);return u=f(u,u.next),v=f(v,v.next),a(u,t,n,r,i,o),void a(v,t,n,r,i,o)}x=x.next}u=u.next}while(u!==e)}function p(e,t){return e.x-t.x}function l(e,t){if(t=function(e,t){var n,r=t,i=e.x,o=e.y,u=-1/0;do{if(o<=r.y&&o>=r.next.y&&r.next.y!==r.y){var x=r.x+(o-r.y)*(r.next.x-r.x)/(r.next.y-r.y);if(x<=i&&x>u){if(u=x,x===i){if(o===r.y)return r;if(o===r.next.y)return r.next}n=r.x<r.next.x?r:r.next}}r=r.next}while(r!==t);if(!n)return null;if(i===u)return n.prev;var f,a=n,v=n.x,c=n.y,s=1/0;r=n.next;for(;r!==a;)i>=r.x&&r.x>=v&&i!==r.x&&g(o<c?i:u,o,v,c,o<c?u:i,o,r.x,r.y)&&((f=Math.abs(o-r.y)/(i-r.x))<s||f===s&&r.x>n.x)&&M(r,e)&&(n=r,s=f),r=r.next;return n}(e,t)){var n=G(t,e);f(n,n.next)}}function h(e,t,n,r,i){return(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-n)*i)|e<<8))|e<<4))|e<<2))|e<<1))|(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-r)*i)|t<<8))|t<<4))|t<<2))|t<<1))<<1}function d(e){var t=e,n=e;do{(t.x<n.x||t.x===n.x&&t.y<n.y)&&(n=t),t=t.next}while(t!==e);return n}function g(e,t,n,r,i,o,u,x){return(i-u)*(t-x)-(e-u)*(o-x)>=0&&(e-u)*(r-x)-(n-u)*(t-x)>=0&&(n-u)*(o-x)-(i-u)*(r-x)>=0}function m(e,t){return e.next.i!==t.i&&e.prev.i!==t.i&&!function(e,t){var n=e;do{if(n.i!==e.i&&n.next.i!==e.i&&n.i!==t.i&&n.next.i!==t.i&&w(n,n.next,e,t))return!0;n=n.next}while(n!==e);return!1}(e,t)&&M(e,t)&&M(t,e)&&function(e,t){var n=e,r=!1,i=(e.x+t.x)/2,o=(e.y+t.y)/2;do{n.y>o!=n.next.y>o&&n.next.y!==n.y&&i<(n.next.x-n.x)*(o-n.y)/(n.next.y-n.y)+n.x&&(r=!r),n=n.next}while(n!==e);return r}(e,t)}function Z(e,t,n){return(t.y-e.y)*(n.x-t.x)-(t.x-e.x)*(n.y-t.y)}function b(e,t){return e.x===t.x&&e.y===t.y}function w(e,t,n,r){return!!(b(e,t)&&b(n,r)||b(e,r)&&b(n,t))||Z(e,t,n)>0!=Z(e,t,r)>0&&Z(n,r,e)>0!=Z(n,r,t)>0}function M(e,t){return Z(e.prev,e,e.next)<0?Z(e,t,e.next)>=0&&Z(e,e.prev,t)>=0:Z(e,t,e.prev)<0||Z(e,e.next,t)<0}function G(e,t){var n=new A(e.i,e.x,e.y),r=new A(t.i,t.x,t.y),i=e.next,o=t.prev;return e.next=t,t.prev=e,n.next=i,i.prev=n,r.next=n,n.prev=r,o.next=r,r.prev=o,r}function E(e,t,n,r){var i=new A(e,t,n);return r?(i.next=r.next,i.prev=r,r.next.prev=i,r.next=i):(i.prev=i,i.next=i),i}function j(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)}function A(e,t,n){this.i=e,this.x=t,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function z(e,t,n,r){for(var i=0,o=t,u=n-r;o<n;o+=r)i+=(e[u]-e[o])*(e[o+1]+e[u+1]),u=o;return i}function S(e,n){t.Geometry.call(this),this.type="GeoJsonGeometry",this.parameters={geoJson:e,radius:n},this.fromBufferGeometry(new O(e,n)),this.mergeVertices()}function O(e,r){var o=this;t.BufferGeometry.call(this),this.type="GeoJsonBufferGeometry",this.parameters={geoJson:e,radius:r},r=r||1;var u=({Point:v,MultiPoint:function(e,t){var r={vertices:[],indices:[]};return e.map((function(e){return v(e,t)})).forEach((function(e){var t=n(e,1)[0];P(r,t)})),[r]},LineString:c,MultiLineString:function(e,t){var r={vertices:[],indices:[]};return e.map((function(e){return c(e,t)})).forEach((function(e){var t=n(e,1)[0];P(r,t)})),[r]},Polygon:s,MultiPolygon:function(e,t){var r={vertices:[],indices:[]},i={vertices:[],indices:[]};e.map((function(e){return s(e,t)})).forEach((function(e){var t=n(e,2),o=t[0],u=t[1];P(r,o),u&&P(i,u)}));var o=[r];return i.vertices.length&&o.push(i),o}}[e.type]||function(){return[]})(e.coordinates,r),x=[],f=[],a=0;function v(e,t){return[{vertices:B(e[1],e[0],t),indices:[]}]}function c(e,t){for(var r=e.map((function(e){var r=n(e,2),i=r[0];return B(r[1],i,t)})),o=i.flatten([r]).vertices,u=Math.round(o.length/3),x=[],f=1;f<u;f++)x.push(f-1,f);return[{vertices:o,indices:x}]}function s(e,t){for(var r=e.map((function(e){return e.map((function(e){var r=n(e,2),i=r[0];return B(r[1],i,t)}))})),o=i.flatten(r),u=o.vertices,x=o.holes,f=x[0]||1/0,a=u.slice(0,f),v=u.slice(f),c=new Set(x),s=Math.round(u.length/3),y=[],p=[],l=1;l<s;l++)c.has(l)||(l<f?y.push(l-1,l):p.push(l-1-f,l-f));var h=[{indices:y,vertices:a}];return x.length&&h.push({indices:p,vertices:v}),h}u.forEach((function(e){var t=x.length;P({indices:x,vertices:f},e),o.addGroup(t,x.length-t,a++)})),x.length&&this.setIndex(x),f.length&&this.addAttribute("position",new t.Float32BufferAttribute(f,3))}function P(e,t){var n,i,o=Math.round(e.vertices.length/3);(n=e.vertices).push.apply(n,r(t.vertices)),(i=e.indices).push.apply(i,r(t.indices.map((function(e){return e+o}))))}function B(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=(90-e)*Math.PI/180,i=(90-t)*Math.PI/180;return[n*Math.sin(r)*Math.cos(i),n*Math.cos(r),n*Math.sin(r)*Math.sin(i)]}u.deviation=function(e,t,n,r){var i=t&&t.length,o=i?t[0]*n:e.length,u=Math.abs(z(e,0,o,n));if(i)for(var x=0,f=t.length;x<f;x++){var a=t[x]*n,v=x<f-1?t[x+1]*n:e.length;u-=Math.abs(z(e,a,v,n))}var c=0;for(x=0;x<r.length;x+=3){var s=r[x]*n,y=r[x+1]*n,p=r[x+2]*n;c+=Math.abs((e[s]-e[p])*(e[y+1]-e[s+1])-(e[s]-e[y])*(e[p+1]-e[s+1]))}return 0===u&&0===c?0:Math.abs((c-u)/u)},u.flatten=function(e){for(var t=e[0][0].length,n={vertices:[],holes:[],dimensions:t},r=0,i=0;i<e.length;i++){for(var o=0;o<e[i].length;o++)for(var u=0;u<t;u++)n.vertices.push(e[i][o][u]);i>0&&(r+=e[i-1].length,n.holes.push(r))}return n},i.default=o,S.prototype=Object.create(t.Geometry.prototype),S.prototype.constructor=S,O.prototype=Object.create(t.BufferGeometry.prototype),O.prototype.constructor=O,e.GeoJsonBufferGeometry=O,e.GeoJsonGeometry=S,Object.defineProperty(e,"__esModule",{value:!0})}));
// Version 0.3.0 three-geojson-geometry - https://github.com/vasturiano/three-geojson-geometry
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("three")):"function"==typeof define&&define.amd?define(["exports","three"],t):t((e=e||self).THREE=e.THREE||{},e.THREE)}(this,(function(e,t){"use strict";function n(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(!(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)))return;var n=[],r=!0,i=!1,o=void 0;try{for(var u,x=e[Symbol.iterator]();!(r=(u=x.next()).done)&&(n.push(u.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{r||null==x.return||x.return()}finally{if(i)throw o}}return n}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function r(e){return function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t<e.length;t++)n[t]=e[t];return n}}(e)||function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}var i=u,o=u;function u(e,t,n){n=n||2;var r,i,o,u,v,c,s,p=t&&t.length,l=p?t[0]*n:e.length,g=x(e,0,l,n,!0),m=[];if(!g||g.next===g.prev)return m;if(p&&(g=function(e,t,n,r){var i,o,u,a,v,c=[];for(i=0,o=t.length;i<o;i++)u=t[i]*r,a=i<o-1?t[i+1]*r:e.length,(v=x(e,u,a,r,!1))===v.next&&(v.steiner=!0),c.push(d(v));for(c.sort(y),i=0;i<c.length;i++)h(c[i],n),n=f(n,n.next);return n}(e,t,g,n)),e.length>80*n){r=o=e[0],i=u=e[1];for(var Z=n;Z<l;Z+=n)(v=e[Z])<r&&(r=v),(c=e[Z+1])<i&&(i=c),v>o&&(o=v),c>u&&(u=c);s=0!==(s=Math.max(o-r,u-i))?1/s:0}return a(g,m,n,r,i,s),m}function x(e,t,n,r,i){var o,u;if(i===z(e,t,n,r)>0)for(o=t;o<n;o+=r)u=E(o,e[o],e[o+1],u);else for(o=n-r;o>=t;o-=r)u=E(o,e[o],e[o+1],u);return u&&b(u,u.next)&&(j(u),u=u.next),u}function f(e,t){if(!e)return e;t||(t=e);var n,r=e;do{if(n=!1,r.steiner||!b(r,r.next)&&0!==Z(r.prev,r,r.next))r=r.next;else{if(j(r),(r=t=r.prev)===r.next)break;n=!0}}while(n||r!==t);return t}function a(e,t,n,r,i,o,u){if(e){!u&&o&&function(e,t,n,r){var i=e;do{null===i.z&&(i.z=l(i.x,i.y,t,n,r)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next}while(i!==e);i.prevZ.nextZ=null,i.prevZ=null,function(e){var t,n,r,i,o,u,x,f,a=1;do{for(n=e,e=null,o=null,u=0;n;){for(u++,r=n,x=0,t=0;t<a&&(x++,r=r.nextZ);t++);for(f=a;x>0||f>0&&r;)0!==x&&(0===f||!r||n.z<=r.z)?(i=n,n=n.nextZ,x--):(i=r,r=r.nextZ,f--),o?o.nextZ=i:e=i,i.prevZ=o,o=i;n=r}o.nextZ=null,a*=2}while(u>1)}(i)}(e,r,i,o);for(var x,y,h=e;e.prev!==e.next;)if(x=e.prev,y=e.next,o?c(e,r,i,o):v(e))t.push(x.i/n),t.push(e.i/n),t.push(y.i/n),j(e),e=y.next,h=y.next;else if((e=y)===h){u?1===u?a(e=s(e,t,n),t,n,r,i,o,2):2===u&&p(e,t,n,r,i,o):a(f(e),t,n,r,i,o,1);break}}}function v(e){var t=e.prev,n=e,r=e.next;if(Z(t,n,r)>=0)return!1;for(var i=e.next.next;i!==e.prev;){if(g(t.x,t.y,n.x,n.y,r.x,r.y,i.x,i.y)&&Z(i.prev,i,i.next)>=0)return!1;i=i.next}return!0}function c(e,t,n,r){var i=e.prev,o=e,u=e.next;if(Z(i,o,u)>=0)return!1;for(var x=i.x<o.x?i.x<u.x?i.x:u.x:o.x<u.x?o.x:u.x,f=i.y<o.y?i.y<u.y?i.y:u.y:o.y<u.y?o.y:u.y,a=i.x>o.x?i.x>u.x?i.x:u.x:o.x>u.x?o.x:u.x,v=i.y>o.y?i.y>u.y?i.y:u.y:o.y>u.y?o.y:u.y,c=l(x,f,t,n,r),s=l(a,v,t,n,r),p=e.prevZ,y=e.nextZ;p&&p.z>=c&&y&&y.z<=s;){if(p!==e.prev&&p!==e.next&&g(i.x,i.y,o.x,o.y,u.x,u.y,p.x,p.y)&&Z(p.prev,p,p.next)>=0)return!1;if(p=p.prevZ,y!==e.prev&&y!==e.next&&g(i.x,i.y,o.x,o.y,u.x,u.y,y.x,y.y)&&Z(y.prev,y,y.next)>=0)return!1;y=y.nextZ}for(;p&&p.z>=c;){if(p!==e.prev&&p!==e.next&&g(i.x,i.y,o.x,o.y,u.x,u.y,p.x,p.y)&&Z(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;y&&y.z<=s;){if(y!==e.prev&&y!==e.next&&g(i.x,i.y,o.x,o.y,u.x,u.y,y.x,y.y)&&Z(y.prev,y,y.next)>=0)return!1;y=y.nextZ}return!0}function s(e,t,n){var r=e;do{var i=r.prev,o=r.next.next;!b(i,o)&&M(i,r,r.next,o)&&w(i,o)&&w(o,i)&&(t.push(i.i/n),t.push(r.i/n),t.push(o.i/n),j(r),j(r.next),r=e=o),r=r.next}while(r!==e);return r}function p(e,t,n,r,i,o){var u=e;do{for(var x=u.next.next;x!==u.prev;){if(u.i!==x.i&&m(u,x)){var v=G(u,x);return u=f(u,u.next),v=f(v,v.next),a(u,t,n,r,i,o),void a(v,t,n,r,i,o)}x=x.next}u=u.next}while(u!==e)}function y(e,t){return e.x-t.x}function h(e,t){if(t=function(e,t){var n,r=t,i=e.x,o=e.y,u=-1/0;do{if(o<=r.y&&o>=r.next.y&&r.next.y!==r.y){var x=r.x+(o-r.y)*(r.next.x-r.x)/(r.next.y-r.y);if(x<=i&&x>u){if(u=x,x===i){if(o===r.y)return r;if(o===r.next.y)return r.next}n=r.x<r.next.x?r:r.next}}r=r.next}while(r!==t);if(!n)return null;if(i===u)return n.prev;var f,a=n,v=n.x,c=n.y,s=1/0;r=n.next;for(;r!==a;)i>=r.x&&r.x>=v&&i!==r.x&&g(o<c?i:u,o,v,c,o<c?u:i,o,r.x,r.y)&&((f=Math.abs(o-r.y)/(i-r.x))<s||f===s&&r.x>n.x)&&w(r,e)&&(n=r,s=f),r=r.next;return n}(e,t)){var n=G(t,e);f(n,n.next)}}function l(e,t,n,r,i){return(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-n)*i)|e<<8))|e<<4))|e<<2))|e<<1))|(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-r)*i)|t<<8))|t<<4))|t<<2))|t<<1))<<1}function d(e){var t=e,n=e;do{(t.x<n.x||t.x===n.x&&t.y<n.y)&&(n=t),t=t.next}while(t!==e);return n}function g(e,t,n,r,i,o,u,x){return(i-u)*(t-x)-(e-u)*(o-x)>=0&&(e-u)*(r-x)-(n-u)*(t-x)>=0&&(n-u)*(o-x)-(i-u)*(r-x)>=0}function m(e,t){return e.next.i!==t.i&&e.prev.i!==t.i&&!function(e,t){var n=e;do{if(n.i!==e.i&&n.next.i!==e.i&&n.i!==t.i&&n.next.i!==t.i&&M(n,n.next,e,t))return!0;n=n.next}while(n!==e);return!1}(e,t)&&w(e,t)&&w(t,e)&&function(e,t){var n=e,r=!1,i=(e.x+t.x)/2,o=(e.y+t.y)/2;do{n.y>o!=n.next.y>o&&n.next.y!==n.y&&i<(n.next.x-n.x)*(o-n.y)/(n.next.y-n.y)+n.x&&(r=!r),n=n.next}while(n!==e);return r}(e,t)}function Z(e,t,n){return(t.y-e.y)*(n.x-t.x)-(t.x-e.x)*(n.y-t.y)}function b(e,t){return e.x===t.x&&e.y===t.y}function M(e,t,n,r){return!!(b(e,t)&&b(n,r)||b(e,r)&&b(n,t))||Z(e,t,n)>0!=Z(e,t,r)>0&&Z(n,r,e)>0!=Z(n,r,t)>0}function w(e,t){return Z(e.prev,e,e.next)<0?Z(e,t,e.next)>=0&&Z(e,e.prev,t)>=0:Z(e,t,e.prev)<0||Z(e,e.next,t)<0}function G(e,t){var n=new A(e.i,e.x,e.y),r=new A(t.i,t.x,t.y),i=e.next,o=t.prev;return e.next=t,t.prev=e,n.next=i,i.prev=n,r.next=n,n.prev=r,o.next=r,r.prev=o,r}function E(e,t,n,r){var i=new A(e,t,n);return r?(i.next=r.next,i.prev=r,r.next.prev=i,r.next=i):(i.prev=i,i.next=i),i}function j(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)}function A(e,t,n){this.i=e,this.x=t,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function z(e,t,n,r){for(var i=0,o=t,u=n-r;o<n;o+=r)i+=(e[u]-e[o])*(e[o+1]+e[u+1]),u=o;return i}u.deviation=function(e,t,n,r){var i=t&&t.length,o=i?t[0]*n:e.length,u=Math.abs(z(e,0,o,n));if(i)for(var x=0,f=t.length;x<f;x++){var a=t[x]*n,v=x<f-1?t[x+1]*n:e.length;u-=Math.abs(z(e,a,v,n))}var c=0;for(x=0;x<r.length;x+=3){var s=r[x]*n,p=r[x+1]*n,y=r[x+2]*n;c+=Math.abs((e[s]-e[y])*(e[p+1]-e[s+1])-(e[s]-e[p])*(e[y+1]-e[s+1]))}return 0===u&&0===c?0:Math.abs((c-u)/u)},u.flatten=function(e){for(var t=e[0][0].length,n={vertices:[],holes:[],dimensions:t},r=0,i=0;i<e.length;i++){for(var o=0;o<e[i].length;o++)for(var u=0;u<t;u++)n.vertices.push(e[i][o][u]);i>0&&(r+=e[i-1].length,n.holes.push(r))}return n},i.default=o;var S=function(e,t,n){for(var r=[],i=1;i<=n;i++)r.push(e+(t-e)*i/(n+1));return r},O=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=[],r=null;return e.forEach((function(e){if(r){var i=Math.sqrt(Math.pow(e[0]-r[0],2)+Math.pow(e[1]-r[1],2));if(i>t)for(var o=Math.floor(i/t),u=S(r[0],e[0],o),x=S(r[1],e[1],o),f=0,a=u.length;f<a;f++)n.push([u[f],x[f]])}n.push(r=e)})),n};function P(e,n,r){t.Geometry.call(this),this.type="GeoJsonGeometry",this.parameters={geoJson:e,radius:n,resolution:r},this.fromBufferGeometry(new B(e,n,r)),this.mergeVertices()}function B(e,r,o){var u=this;t.BufferGeometry.call(this),this.type="GeoJsonBufferGeometry",this.parameters={geoJson:e,radius:r,resolution:o},r=r||1,o=o||5;var x=({Point:c,MultiPoint:function(e,t){var r={vertices:[],indices:[]};return e.map((function(e){return c(e,t)})).forEach((function(e){var t=n(e,1)[0];J(r,t)})),[r]},LineString:s,MultiLineString:function(e,t){var r={vertices:[],indices:[]};return e.map((function(e){return s(e,t)})).forEach((function(e){var t=n(e,1)[0];J(r,t)})),[r]},Polygon:p,MultiPolygon:function(e,t){var r={vertices:[],indices:[]},i={vertices:[],indices:[]};e.map((function(e){return p(e,t)})).forEach((function(e){var t=n(e,2),o=t[0],u=t[1];J(r,o),u&&J(i,u)}));var o=[r];return i.vertices.length&&o.push(i),o}}[e.type]||function(){return[]})(e.coordinates,r),f=[],a=[],v=0;function c(e,t){return[{vertices:I(e[1],e[0],t),indices:[]}]}function s(e,t){for(var r=O(e,o).map((function(e){var r=n(e,2),i=r[0];return I(r[1],i,t)})),u=i.flatten([r]).vertices,x=Math.round(u.length/3),f=[],a=1;a<x;a++)f.push(a-1,a);return[{vertices:u,indices:f}]}function p(e,t){for(var r=e.map((function(e){return O(e,o).map((function(e){var r=n(e,2),i=r[0];return I(r[1],i,t)}))})),u=i.flatten(r),x=u.vertices,f=u.holes,a=f[0]||1/0,v=x.slice(0,a),c=x.slice(a),s=new Set(f),p=Math.round(x.length/3),y=[],h=[],l=1;l<p;l++)s.has(l)||(l<a?y.push(l-1,l):h.push(l-1-a,l-a));var d=[{indices:y,vertices:v}];return f.length&&d.push({indices:h,vertices:c}),d}x.forEach((function(e){var t=f.length;J({indices:f,vertices:a},e),u.addGroup(t,f.length-t,v++)})),f.length&&this.setIndex(f),a.length&&this.addAttribute("position",new t.Float32BufferAttribute(a,3))}function J(e,t){var n,i,o=Math.round(e.vertices.length/3);(n=e.vertices).push.apply(n,r(t.vertices)),(i=e.indices).push.apply(i,r(t.indices.map((function(e){return e+o}))))}function I(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,r=(90-e)*Math.PI/180,i=(90-t)*Math.PI/180;return[n*Math.sin(r)*Math.cos(i),n*Math.cos(r),n*Math.sin(r)*Math.sin(i)]}P.prototype=Object.create(t.Geometry.prototype),P.prototype.constructor=P,B.prototype=Object.create(t.BufferGeometry.prototype),B.prototype.constructor=B,e.GeoJsonBufferGeometry=B,e.GeoJsonGeometry=P,Object.defineProperty(e,"__esModule",{value:!0})}));

@@ -66,3 +66,38 @@ import { Geometry, BufferGeometry, Float32BufferAttribute } from 'three';

function GeoJsonGeometry(geoJson, radius) {
var getInterpolatedVals = function getInterpolatedVals(start, end, numPnts) {
var result = [];
for (var i = 1; i <= numPnts; i++) {
result.push(start + (end - start) * i / (numPnts + 1));
}
return result;
};
var interpolateLine = function interpolateLine() {
var lineCoords = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var maxDegDistance = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
var result = [];
var prevPnt = null;
lineCoords.forEach(function (pnt) {
if (prevPnt) {
var dist = Math.sqrt(Math.pow(pnt[0] - prevPnt[0], 2) + Math.pow(pnt[1] - prevPnt[1], 2));
if (dist > maxDegDistance) {
var numAdditionalPnts = Math.floor(dist / maxDegDistance);
var lngs = getInterpolatedVals(prevPnt[0], pnt[0], numAdditionalPnts);
var lats = getInterpolatedVals(prevPnt[1], pnt[1], numAdditionalPnts);
for (var i = 0, len = lngs.length; i < len; i++) {
result.push([lngs[i], lats[i]]);
}
}
}
result.push(prevPnt = pnt);
});
return result;
};
function GeoJsonGeometry(geoJson, radius, resolution) {
Geometry.call(this);

@@ -72,5 +107,6 @@ this.type = 'GeoJsonGeometry';

geoJson: geoJson,
radius: radius
radius: radius,
resolution: resolution
};
this.fromBufferGeometry(new GeoJsonBufferGeometry(geoJson, radius));
this.fromBufferGeometry(new GeoJsonBufferGeometry(geoJson, radius, resolution));
this.mergeVertices();

@@ -82,3 +118,3 @@ }

function GeoJsonBufferGeometry(geoJson, radius) {
function GeoJsonBufferGeometry(geoJson, radius, resolution) {
var _this = this;

@@ -90,6 +126,8 @@

geoJson: geoJson,
radius: radius
radius: radius,
resolution: resolution
}; // defaults
radius = radius || 1; // process various geometry types
radius = radius || 1;
resolution = resolution || 5; // process various geometry types

@@ -150,3 +188,3 @@ var groups = ({

function genLineString(coords, r) {
var coords3d = coords.map(function (_ref3) {
var coords3d = interpolateLine(coords, resolution).map(function (_ref3) {
var _ref4 = _slicedToArray(_ref3, 2),

@@ -193,3 +231,3 @@ lng = _ref4[0],

var coords3d = coords.map(function (coordsSegment) {
return coordsSegment.map(function (_ref7) {
return interpolateLine(coordsSegment, resolution).map(function (_ref7) {
var _ref8 = _slicedToArray(_ref7, 2),

@@ -196,0 +234,0 @@ lng = _ref8[0],

{
"name": "three-geojson-geometry",
"version": "0.2.0",
"version": "0.3.0",
"description": "ThreeJS geometry for stroking GeoJSON objects on a sphere",

@@ -5,0 +5,0 @@ "unpkg": "dist/three-geojson-geometry.min.js",

@@ -46,2 +46,3 @@ ThreeJS GeoJSON Geometry

* <b>radius</b>: Radius of the sphere surface to draw the poygon on. Default is `1`.
* <b>resolution</b>: Resolution of the sphere, in lat/lng degrees. If the distance between two adjacent line points is larger than this value, the line segment will be interpolated in order to approximate the curvature of the sphere surface. Lower values yield more perfectly curved lines, at the cost of performance. Default is `5`.

@@ -48,0 +49,0 @@ ### Properties

@@ -17,3 +17,5 @@ import {

function GeoJsonGeometry(geoJson, radius) {
import interpolateLine from './interpolateLine';
function GeoJsonGeometry(geoJson, radius, resolution) {
Geometry.call(this);

@@ -25,6 +27,7 @@

geoJson,
radius
radius,
resolution
};
this.fromBufferGeometry(new GeoJsonBufferGeometry(geoJson, radius));
this.fromBufferGeometry(new GeoJsonBufferGeometry(geoJson, radius, resolution));
this.mergeVertices();

@@ -36,3 +39,3 @@ }

function GeoJsonBufferGeometry(geoJson, radius) {
function GeoJsonBufferGeometry(geoJson, radius, resolution) {
BufferGeometry.call(this);

@@ -44,3 +47,4 @@

geoJson,
radius
radius,
resolution
};

@@ -50,2 +54,3 @@

radius = radius || 1;
resolution = resolution || 5;

@@ -96,3 +101,4 @@ // process various geometry types

function genLineString(coords, r) {
const coords3d = coords.map(([lng, lat]) => polar2Cartesian(lat, lng, r));
const coords3d = interpolateLine(coords, resolution)
.map(([lng, lat]) => polar2Cartesian(lat, lng, r));

@@ -123,3 +129,5 @@ const { vertices } = earcut.flatten([coords3d]);

function genPolygon(coords, r) {
const coords3d = coords.map(coordsSegment => coordsSegment.map(([lng, lat]) => polar2Cartesian(lat, lng, r)));
const coords3d = coords
.map(coordsSegment => interpolateLine(coordsSegment, resolution)
.map(([lng, lat]) => polar2Cartesian(lat, lng, r)));

@@ -126,0 +134,0 @@ // Each point generates 3 vertice items (x,y,z).

Sorry, the diff of this file is not supported yet

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