Last active
December 28, 2018 11:23
-
-
Save evaristoc/ea78ec910cefe9339e2589607ab4e3da to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<head> | |
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"> | |
<title>Hello, world!</title> | |
<!-- include three.js library --> | |
<script src='js/three.js'></script> | |
<!-- include jsartookit --> | |
<script src="jsartoolkit5/artoolkit.min.js"></script> | |
<script src="jsartoolkit5/artoolkit.api.js"></script> | |
<!-- include threex.artoolkit --> | |
<script src="threex/threex-artoolkitsource.js"></script> | |
<script src="threex/threex-artoolkitcontext.js"></script> | |
<script src="threex/threex-arbasecontrols.js"></script> | |
<script src="threex/threex-armarkercontrols.js"></script> | |
</head> | |
<body style='margin : 0px; overflow: hidden; font-family: Monospace;'> | |
<!-- | |
Example created by Lee Stemkoski: https://github.com/stemkoski | |
Based on the AR.js library and examples created by Jerome Etienne: https://github.com/jeromeetienne/AR.js/ | |
--> | |
<script> | |
/// add data | |
var DAT = DAT || {}; | |
DAT.Globe = function() { | |
var scene, camera, renderer, clock, deltaTime, totalTime; | |
var arToolkitSource, arToolkitContext; | |
var markerRoot1, listofpoints; | |
var light; | |
var mesh1, point; | |
var colorFn = function(x) { | |
//let c = new THREE.Color; | |
//console.log(x.toFixed(1)); | |
//return new THREE.Color( "hsl("+String(60 - (x*.5)*100)+"% , 100%, 100%)" ); | |
//return new THREE.Color(x.toFixed(1) , 1, 1 ); | |
return new THREE.Color(x.toFixed(1) , .3, 1 ); | |
}; | |
function initialize(){ | |
scene = new THREE.Scene(); | |
let ambientLight = new THREE.AmbientLight( 0xcccccc, 0.5 ); | |
scene.add( ambientLight ); | |
camera = new THREE.Camera(); | |
scene.add(camera); | |
renderer = new THREE.WebGLRenderer({ | |
antialias : true, | |
alpha: true | |
}); | |
renderer.autoClear = false; | |
renderer.setClearColor(new THREE.Color('lightgrey'), 0) | |
renderer.setSize( 640, 580 ); | |
renderer.domElement.style.position = 'absolute' | |
renderer.domElement.style.top = '0px' | |
renderer.domElement.style.left = '0px' | |
document.body.appendChild( renderer.domElement ); | |
clock = new THREE.Clock(); | |
deltaTime = 0; | |
totalTime = 0; | |
//////////////////////////////////////////////////////////// | |
// setup arToolkitSource | |
//////////////////////////////////////////////////////////// | |
arToolkitSource = new THREEx.ArToolkitSource({ | |
sourceType : 'webcam', | |
}); | |
function onResize() | |
{ | |
arToolkitSource.onResize() | |
arToolkitSource.copySizeTo(renderer.domElement) | |
if ( arToolkitContext.arController !== null ) | |
{ | |
arToolkitSource.copySizeTo(arToolkitContext.arController.canvas) | |
} | |
} | |
arToolkitSource.init(function onReady(){ | |
onResize() | |
}); | |
// handle resize event | |
window.addEventListener('resize', function(){ | |
onResize() | |
}); | |
//////////////////////////////////////////////////////////// | |
// setup arToolkitContext | |
//////////////////////////////////////////////////////////// | |
// create atToolkitContext | |
arToolkitContext = new THREEx.ArToolkitContext({ | |
cameraParametersUrl: 'data/camera_para.dat', | |
detectionMode: 'mono' | |
}); | |
// copy projection matrix to camera when initialization complete | |
arToolkitContext.init( function onCompleted(){ | |
camera.projectionMatrix.copy( arToolkitContext.getProjectionMatrix() ); | |
}); | |
//////////////////////////////////////////////////////////// | |
// setup markerRoots | |
//////////////////////////////////////////////////////////// | |
// build markerControls | |
markerRoot1 = new THREE.Group(); | |
//scene.add(markerRoot1); | |
let markerControls1 = new THREEx.ArMarkerControls(arToolkitContext, markerRoot1, { | |
type: 'pattern', patternUrl: "data/hiro.patt", | |
}) | |
let geometry1 = new THREE.SphereGeometry(1, 32,32); | |
console.log(geometry1) | |
let loader = new THREE.TextureLoader(); | |
let texture = loader.load( | |
'images/earth-sphere.jpg', | |
render ); | |
let material1 = new THREE.MeshLambertMaterial( { | |
map: texture, | |
opacity: 0.75 } ); | |
mesh1 = new THREE.Mesh( geometry1, material1 ); | |
mesh1.position.y = 1; | |
//https://github.com/mayaman/mayaman.github.io/blob/master/ufo/globe.js | |
pointgeometry = new THREE.BoxGeometry(0.025, 0.025, 1); | |
pointgeometry.applyMatrix(new THREE.Matrix4().makeTranslation(0,0,-0.1)); | |
//following book, I am adding a material to point (I haven't: it was added at part of the object createPoints().points) | |
var pointmaterial = new THREE.MeshNormalMaterial({transparent: true, opacity: 0.5}); | |
point = new THREE.Mesh(pointgeometry, pointmaterial); | |
point.castShadow = true; | |
//markerRoot1.add( point ); | |
//let pointLight = new THREE.PointLight( 0xffffff, 1, 100 ); | |
//pointLight.position.set(0.5,3,2); | |
//// create a mesh to help visualize the position of the light | |
//pointLight.add( | |
// new THREE.Mesh( | |
// new THREE.SphereBufferGeometry( 0.05, 16,8 ), | |
// new THREE.MeshBasicMaterial({ color: 0xffffff, opacity: 0.20 }) | |
// ) | |
//); | |
//markerRoot1.add( pointLight ); | |
light = new THREE.DirectionalLight( 0xffffff ,2); | |
light.position.set( 20, 20, 20 ); | |
scene.add(light); | |
} | |
/* | |
- addData is called when data is coming | |
- addPoint is part of addData where first base geometry of point is appended | |
--- addPoint transforms coordinates into radians and define matrix of points to be merged to a subgeometry | |
--- it also append to existing mesh, so I have to pass markerroot1 and add it mesh to it | |
--- it also creates the merged geometry and mesh to be passed to createPoints to be finally added to the scene | |
- createPoints lies each point (as a an attribute of `this`) on top of the sphere and add them to the scene | |
*/ | |
///////////////////////////////// | |
addData = function(data, opts, mesh) { | |
var lat, lng, size, color, i, step, colorFnWrapper; | |
opts.animated = opts.animated || false; | |
this.is_animated = opts.animated; | |
opts.format = opts.format || 'magnitude'; // other option is 'legend' | |
if (opts.format === 'magnitude') { | |
step = 3; | |
colorFnWrapper = function(data, i) { return colorFn(data[i+2]); } | |
} else if (opts.format === 'legend') { | |
step = 4; | |
colorFnWrapper = function(data, i) { return colorFn(data[i+3]); } | |
} else { | |
throw('error: format not supported: '+opts.format); | |
} | |
if (opts.animated) { | |
if (this._baseGeometry === undefined) { | |
this._baseGeometry = new THREE.Geometry(); | |
for (i = 0; i < data.length; i += step) { | |
lat = data[i]; | |
lng = data[i + 1]; | |
size = data[i + 2]; | |
color = colorFnWrapper(data,i); //pallete | |
//color = new THREE.Color( 0x001900 ); | |
//size = size*200; | |
//size = 1; | |
addPoint(lat, lng, size, color, this._baseGeometry); | |
} | |
} | |
if(this._morphTargetId === undefined) { | |
this._morphTargetId = 0; | |
} else { | |
this._morphTargetId += 1; | |
} | |
opts.name = opts.name || 'morphTarget'+this._morphTargetId; | |
} | |
//var sg = new THREE.Group(); | |
var subgeo = new THREE.Geometry(); | |
for (i = 0; i < data.length; i += step) { | |
lat = data[i]; | |
lng = data[i + 1]; | |
//color = colorFnWrapper(data,i); | |
//https://stackoverflow.com/questions/11252592/how-to-change-face-color-in-three-js | |
color = colorFnWrapper(data,i); //pallete | |
//color = new THREE.Color( 0x001900 ); | |
size = data[i + 2]; | |
//size = size*200; | |
//size = 1; | |
addPoint(lat, lng, size, color, subgeo); | |
} | |
if (opts.animated) { | |
this._baseGeometry.morphTargets.push({'name': opts.name, vertices: subgeo.vertices}); | |
} else { | |
this._baseGeometry = subgeo; //this is passed to createPoints | |
} | |
}; | |
//////////////////////////////// | |
/////////////////////////////// | |
function addPoint(lat, lng, size, color, subgeo) { | |
var phi = (90.0 - lat) * Math.PI / 180.0; | |
//var theta = (180.0 - lng) * Math.PI / 180.0; | |
var theta = 1.05*Math.PI + (180.0 - lng) * Math.PI / 180.0; //good point!!! but it appears that points are being rendered later after the sphere, so by the time the sphere renders the points go behind so NOTHING to do with this | |
//var theta = (90 - lat) * Math.PI / 180; | |
//var phi = (180 - lng) * Math.PI / 180; | |
point.position.x = Math.sin(phi) * Math.cos(theta); | |
point.position.y = Math.cos(phi) + 1; //good!!! this is because points are in relation to sphere, whose COORDINATES are read as ONE (NOTHING to do with screen!!! RELATIVE relation) | |
point.position.z = Math.sin(phi) * Math.sin(theta); | |
//point.lookAt(mesh.position); | |
point.lookAt(mesh1.position); | |
point.scale.z = Math.max( 2*size, 0.2 ); // avoid non-invertible matrix | |
point.updateMatrix(); | |
var i; | |
for (i = 0; i < point.geometry.faces.length; i++) { | |
//console.log(point); | |
point.geometry.faces[i].color = color; | |
} | |
//console.log(subgeo); | |
//subgeo.add(point); | |
//https://codepen.io/karolpodlesny/pen/BNJmKQ | |
if(point.matrixAutoUpdate){ | |
point.updateMatrix(); | |
} | |
subgeo.merge(point.geometry, point.matrix); | |
//subgeo.merge(subgeo, point); //very likely a grouping utility... | |
} | |
/////////////////////////////// | |
/////////////////////////////// | |
function createPoints() { | |
if (this._baseGeometry !== undefined) { | |
if (this.is_animated === false) { | |
this.points = new THREE.Mesh(this._baseGeometry, new THREE.MeshBasicMaterial({ | |
//olor: 0x00ff00, | |
//color: 'red', | |
vertexColors: THREE.FaceColors, | |
morphTargets: false | |
})); | |
} else { | |
if (this._baseGeometry.morphTargets.length < 8) { | |
//console.log(this._baseGeometry.morphTargets); | |
var padding = 8-this._baseGeometry.morphTargets.length; | |
for(var i=0; i<=padding; i++) { | |
this._baseGeometry.morphTargets.push({'name': 'morphPadding'+i, vertices: this._baseGeometry.vertices}); | |
} | |
} | |
this.points = new THREE.Mesh(this._baseGeometry, new THREE.MeshBasicMaterial({ | |
//color: 0x00ff00, | |
vertexColors: THREE.FaceColors, | |
morphTargets: true | |
})); | |
} | |
//console.log(this.points); | |
//scene.add(this.points); //originally addObject | |
markerRoot1.add(this.points); | |
listofpoints = this.points; | |
} | |
markerRoot1.add( mesh1 ); | |
scene.add(markerRoot1); | |
scene.updateMatrixWorld(true); | |
var position1 = new THREE.Vector3(); | |
var position2 = new THREE.Vector3(); | |
var position3 = new THREE.Vector3(); | |
position1.setFromMatrixPosition( mesh1.matrixWorld ); | |
position2.setFromMatrixPosition( listofpoints.matrixWorld ); | |
position3.setFromMatrixPosition( markerRoot1.matrixWorld ); | |
//alert(position1.x + ',' + position1.y + ',' + position1.z + '\n\n' + position2.x + ',' + position2.y + ',' + position2.z + '\n\n' + position3.x + ',' + position3.y + ',' + position3.z); | |
} | |
function update() | |
{ | |
if ( markerRoot1.visible ) | |
mesh1.rotation.y += 0.001; | |
listofpoints.rotation.y += 0.001; | |
//console.log(mesh1); | |
// update artoolkit on every frame | |
if ( arToolkitSource.ready !== false ) | |
arToolkitContext.update( arToolkitSource.domElement ); | |
} | |
function animate() | |
{ | |
requestAnimationFrame(animate); | |
//deltaTime = clock.getDelta(); | |
//totalTime += deltaTime; | |
render(); | |
} | |
function render() | |
{ | |
renderer.clear(); | |
renderer.render( scene, camera ); | |
update(); | |
} | |
//function render() { | |
// zoom(curZoomSpeed); | |
// | |
// rotation.x += (target.x - rotation.x) * 0.1; | |
// rotation.y += (target.y - rotation.y) * 0.1; | |
// distance += (distanceTarget - distance) * 0.3; | |
// | |
// camera.position.x = distance * Math.sin(rotation.x) * Math.cos(rotation.y); | |
// camera.position.y = distance * Math.sin(rotation.y); | |
// camera.position.z = distance * Math.cos(rotation.x) * Math.cos(rotation.y); | |
// | |
// vector.copy(camera.position); | |
// | |
// renderer.clear(); | |
// renderer.render(scene, camera); | |
// renderer.render(sceneAtmosphere, camera); | |
//} | |
initialize(); | |
this.render = render; | |
this.animate = animate; | |
//this.__defineSetter__('time', function(t) { | |
// var validMorphs = []; | |
// var morphDict = this.points.morphTargetDictionary; | |
// for(var k in morphDict) { | |
// if(k.indexOf('morphPadding') < 0) { | |
// validMorphs.push(morphDict[k]); | |
// } | |
// } | |
// validMorphs.sort(); | |
// var l = validMorphs.length-1; | |
// var scaledt = t*l+1; | |
// var index = Math.floor(scaledt); | |
// for (i=0;i<validMorphs.length;i++) { | |
// this.points.morphTargetInfluences[validMorphs[i]] = 0; | |
// } | |
// var lastIndex = index - 1; | |
// var leftover = scaledt - index; | |
// if (lastIndex >= 0) { | |
// this.points.morphTargetInfluences[lastIndex] = 1 - leftover; | |
// } | |
// this.points.morphTargetInfluences[index] = leftover; | |
// this._time = t; | |
//}); | |
this.addData = addData; | |
this.createPoints = createPoints; | |
this.renderer = renderer; | |
this.scene = scene; | |
return this; | |
}; | |
//https://itnext.io/promise-loading-with-three-js-78a6297652a5 | |
//https://www.aeon-creation.com/blog/blender-threejs-arjs/ | |
//https://stackoverflow.com/questions/11363170/units-of-three-js-calculating-rotation-orbit-speeds | |
//https://threejs.org/docs/#manual/en/introduction/How-to-update-things | |
var globe = new DAT.Globe(); | |
var xhr; | |
xhr = new XMLHttpRequest(); | |
xhr.open('GET', 'data/user_locations.json', true); | |
xhr.onreadystatechange = function(e) { | |
if (xhr.readyState === 4) { | |
if (xhr.status === 200) { | |
var data = JSON.parse(xhr.responseText); | |
//console.log(data); | |
window.data = data; | |
for (i=0;i<data.length;i++) { | |
globe.addData(data[i][1], {format: 'magnitude', name: data[i][0], animated: true}); | |
} | |
globe.createPoints(); | |
globe.animate(); | |
} | |
} | |
}; | |
xhr.send(null); | |
</script> | |
</body> | |
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[["data", [34.52813,69.17233,0.0416,41.3275,19.81889,0.012,36.7525,3.04197,0.1956,35.69111,-0.64167,0.1196,-34.61315,-58.37723,0.0932,-32.94682,-60.63932,0.0048,40.18111,44.51361,0.05,-34.92866,138.59863,0.024,48.75955,-122.48822,0.0308,-27.46794,153.02809,0.0496,-35.28346,149.12807,0.0136,-28.00029,153.43088,0.008,28.08363,-80.60811,0.0928,56.39522,-3.43139,0.0292,46.1351,-60.1831,0.1032,38.90122,-77.26526,0.0348,40.37767,49.89201,0.0072,22.3384,91.83168,0.0072,23.7104,90.40744,0.0788,53.9,27.56667,0.0476,50.85045,4.34878,0.048,51.05,3.71667,0.0068,39.97776,-105.13193,0.0176,37.10415,-113.58412,0.0052,14.31944,-87.67917,0.0092,14.9127,120.56659,0.0052,44.75874,19.21437,0.0084,43.84864,18.35644,0.0264,-22.73917,-47.33139,0.004,-23.55083,-51.46083,0.004,-10.91111,-37.07167,0.0172,-19.92083,-43.93778,0.024,-27.59444,-48.60694,0.0224,-29.16806,-51.17944,0.004,-25.42778,-49.27306,0.0252,-3.71722,-38.54306,0.0236,-25.39048,-51.46541,0.016,-26.30444,-48.84556,0.004,-5.795,-35.20944,0.0084,-30.03306,-51.23,0.0276,-8.05389,-34.88111,0.0192,-22.90278,-43.2075,0.0976,-12.97111,-38.51083,0.0348,-23.96083,-46.33361,0.042,-23.50167,-47.45806,0.0108,-20.31944,-40.33778,0.0144,42.69751,23.32415,0.0204,11.56245,104.91601,0.0164,4.04827,9.70428,0.0072,51.05011,-114.08529,0.042,53.55014,-113.46871,0.0364,49.20678,-122.91092,0.0072,49.10635,-122.82509,0.0076,45.63873,-122.66149,0.0884,49.8844,-97.14704,0.0176,46.11594,-64.80186,0.004,53.71667,-1.85,0.0132,44.40011,-79.66634,0.0064,-37.87822,175.4402,0.0064,55.76667,-4.03333,0.0048,41.92704,-73.99736,0.0064,42.98339,-81.23304,0.3032,43.5789,-79.6583,0.024,43.76681,-79.4163,0.0152,41.34559,-88.84258,0.0408,43.70011,-79.4163,0.096,25.42533,-100.15205,0.0368,39.9075,116.39723,0.0752,28.19874,112.97087,0.006,30.66667,104.06667,0.0048,23.11667,113.25,0.018,30.58333,114.26667,0.0072,10.96854,-74.78132,0.01,7.12539,-73.1198,0.0072,3.43722,-76.5225,0.0076,13.35,123.55,0.0148,-26.62207,-54.10842,0.0052,45.81444,15.97798,0.038,23.13302,-82.38304,0.0064,34.68406,33.03794,0.0072,35.17531,33.3642,0.0068,49.19522,16.60796,0.0136,49.83465,18.28204,0.004,50.08804,14.42076,0.026,55.67594,12.56553,0.0112,55.39594,10.38831,0.0044,22.58667,-80.24361,0.042,-0.22985,-78.52495,0.0072,31.31129,-92.44514,0.0044,30.06263,31.24967,0.1896,42.5467,-83.21132,0.0288,39.98526,-104.82053,0.01,36.59649,-82.18847,0.0128,41.7001,-71.68284,0.0104,37.54557,-97.26893,0.0084,50.83088,-0.1672,0.0044,41.15367,-81.35789,0.0056,53.79648,-1.54785,0.02,-33.9,150.93333,0.0088,38.597,-90.50929,0.048,52.04172,-0.75583,0.0128,42.02834,-97.417,0.0188,38.36067,-75.59937,0.0068,53.38297,-1.4659,0.0144,50.90395,-1.40428,0.0116,53.39254,-2.58024,0.0052,39.9626,-76.72774,0.5812,59.43696,24.75353,0.0204,9.02497,38.74689,0.0152,60.16952,24.93545,0.022,61.49911,23.78712,0.008,60.45148,22.26869,0.0044,43.61092,3.87723,0.0052,47.21725,-1.55336,0.004,33.66094,-95.55551,0.1008,41.69411,44.83368,0.008,52.52437,13.41053,0.0852,52.26594,10.52673,0.0052,50.8357,12.92922,0.0056,53.57532,10.01534,0.02,51.33962,12.37129,0.0056,48.13743,11.57549,0.0364,48.78232,9.17702,0.0152,5.55602,-0.1969,0.0352,34.80287,-86.97167,0.1384,14.64072,-90.51327,0.0172,14.0818,-87.20681,0.0052,22.28552,114.15769,0.0556,47.49801,19.03991,0.0632,23.02579,72.58727,0.0764,19.87757,75.34226,0.0044,23.25469,77.40289,0.012,30.73629,76.7884,0.0112,13.08784,80.27847,0.1484,11.00555,76.96612,0.016,28.65381,77.22897,0.3808,13.6978,123.4892,0.0052,28.4601,77.02635,0.0444,26.1844,91.7458,0.006,26.22983,78.17337,0.004,25.39242,68.37366,0.1796,22.71792,75.8333,0.0208,26.91962,75.78781,0.0596,22.56263,88.36304,0.0808,11.24802,75.7804,0.014,12.91723,74.85603,0.0084,19.07283,72.88261,0.176,12.29791,76.63925,0.0128,28.58,77.33,0.0324,32.06167,118.77778,0.004,50.7236,-3.52751,0.004,18.51957,73.85535,0.1192,23.34777,85.33856,0.0076,25.56892,91.88313,0.0124,31.10442,77.16662,0.0092,32.49268,74.53134,0.0164,25.31668,83.01041,0.01,5.88737,10.01176,0.052,-6.90389,107.61861,0.0372,-6.21462,106.84513,0.1004,-7.81667,112.01667,0.0072,3.58333,98.66667,0.0056,-7.4478,112.7183,0.0044,-7.78278,110.36083,0.006,51.89797,-8.47061,0.0048,32.54044,-82.90375,0.0892,32.81841,34.9885,0.0148,31.76904,35.21633,0.0124,32.08088,34.78057,0.07,37.49223,15.07041,0.004,40.85631,14.24641,0.008,33.15917,129.72278,0.008,35.6895,139.69171,0.0504,31.95522,35.94503,0.1352,51.1801,71.44598,0.008,-0.10221,34.76171,0.0124,-1.28333,36.81667,0.0676,42.67272,21.16688,0.0048,42.87,74.59,0.0164,56.946,24.10589,0.0136,33.88894,35.49442,0.0136,54.68916,25.2798,0.03,41.99646,21.43141,0.0512,41.4375,22.64333,0.024,5.9749,116.0724,0.0056,3.1412,101.68653,0.0884,4.1748,73.50888,0.034,31.73333,-106.48333,0.036,40.62862,-3.16185,0.0564,29.1026,-110.97732,0.0104,19.42847,-99.12766,0.0808,25.67507,-100.31847,0.03,19.04334,-98.20193,0.0116,32.5027,-117.00371,0.016,47.90771,106.88324,0.0136,33.58831,-7.61138,0.0336,31.63416,-7.99994,0.02,-25.96553,32.58322,0.0144,21.97473,96.08359,0.0076,16.80528,96.15611,0.0116,27.70169,85.3206,0.0444,42.93869,-74.18819,0.0756,42.78702,-73.97096,0.0224,52.07667,4.29861,0.012,-36.86667,174.76667,0.0356,50.73583,-1.78129,0.0124,-37.81819,145.00176,0.0296,11.36389,76.78525,0.0112,12.13282,-86.2504,0.0112,9.05785,7.49508,0.026,4.9517,8.322,0.0052,10.52641,7.43879,0.0076,37.10202,-8.67422,0.1472,4.77742,7.0134,0.0156,63.43049,10.39506,0.0072,33.72148,73.04329,0.0328,24.9056,67.0822,0.0656,31.54972,74.34361,0.06,34.008,71.57849,0.0176,30.15946,-85.65983,0.0124,-6.72208,146.98469,0.0048,40.74255,-84.10523,0.0416,8.48222,124.64722,0.0048,7.07306,125.61278,0.0296,14.6042,120.9822,0.2024,14.6488,121.0509,0.0132,9.789,125.495,0.01,53.1235,18.00762,0.0048,54.35205,18.64637,0.0156,54.4418,18.56003,0.0156,52.22977,21.01178,0.0856,41.55032,-8.42005,0.0376,38.71667,-9.13333,0.0628,41.14961,-8.61099,0.03,9.95974,-84.08165,0.0468,25.27932,51.52245,0.0124,44.43225,26.10626,0.1352,47.06667,21.93333,0.0052,45.8,24.15,0.0044,52.29778,104.29639,0.004,55.33333,86.08333,0.0044,45.04484,38.97603,0.0084,46.73239,-117.00017,0.1188,58.01046,56.25017,0.0048,27.77086,-82.67927,0.0232,43.10562,131.87353,0.0048,56.8519,60.6122,0.0128,21.54238,39.19797,0.0068,24.68773,46.72185,0.0136,55.95206,-3.19648,0.032,55.86515,-4.25763,0.0088,44.80401,20.46513,0.0964,45.25167,19.83694,0.0148,-4.61667,55.45,0.0076,1.28967,103.85007,0.1552,48.14816,17.10674,0.0244,46.05108,14.50513,0.0132,-33.92584,18.42322,0.0452,-29.8579,31.0292,0.0124,-26.20227,28.04363,0.0572,35.10278,129.04028,0.0848,35.87028,128.59111,0.0108,35.15472,126.91556,0.0096,35.82194,127.14889,0.004,37.566,126.9784,0.0932,10.13333,-64.7,0.044,36.53998,-4.62473,0.0048,4.73245,-74.26419,0.0752,20.57196,-101.19154,0.004,7.90639,125.09417,0.018,20.68812,-88.19936,0.0048,7.48971,-74.86919,0.004,7.7102,81.6924,0.0064,-25.29167,-49.22417,0.0172,59.33258,18.0649,0.0396,55.60587,13.00073,0.0096,41.88753,-88.30535,0.012,34.72682,36.72339,0.0052,25.04776,121.53185,0.1512,13.75398,100.50144,0.0436,18.79038,98.98468,0.0104,36.81897,10.16579,0.022,39.91987,32.85427,0.0244,0.31628,32.58219,0.0072,48.29149,25.94034,0.01,48.45,34.98333,0.0232,49.98081,36.25272,0.0204,50.45466,30.5238,0.152,31.84568,-102.36764,0.0152,24.46667,54.36667,0.0104,25.0657,55.17128,0.0364,45.33341,-79.21632,0.0072,41.73058,-88.3459,0.006,35.19807,-111.65127,0.006,33.44838,-112.07404,0.114,34.54002,-112.4685,0.006,33.50921,-111.89903,0.114,33.41477,-111.90931,0.114,32.22174,-110.92648,0.0188,33.44873,-84.45493,0.0156,34.74648,-92.28959,0.0184,37.76521,-122.24164,0.154,35.37329,-119.01871,0.008,37.87159,-122.27275,0.154,38.54491,-121.74052,0.008,38.67796,-121.17606,0.0052,41.35033,-83.12186,0.0296,5.15264,-75.03624,0.034,34.13612,-117.86534,0.0104,34.05223,-118.24368,0.348,37.6391,-120.99688,0.014,37.38605,-122.08385,0.0144,34.22834,-118.53675,0.0048,37.80437,-122.2708,0.154,39.10733,-76.57108,0.026,39.77978,-84.1241,0.0308,-19.86528,-47.44,0.0852,34.10834,-117.28977,0.02,-13.66667,-76.15,0.0048,9.89898,-84.00287,0.1328,37.773972,-122.431297,0.4332,35.28275,-120.65962,0.0312,16.0009,120.4023,0.0216,34.39166,-118.54259,0.0052,-3.44882,-79.95952,0.0044,33.49364,-117.14836,0.0072,40.01499,-105.27055,0.0324,38.83388,-104.82136,0.0216,39.73915,-104.9847,0.118,40.58526,-105.08442,0.0188,41.76371,-72.68509,0.0236,41.30815,-72.92816,0.0168,50.8742,0.00772,0.0068,42.54648,-71.17367,0.0048,26.33981,-81.7787,0.0068,26.12231,-80.14338,0.0316,33.62594,-97.13335,0.0232,39.73394,-90.22901,0.0248,28.03947,-81.9498,0.006,25.77427,-80.19366,0.0956,29.95465,-90.07507,0.0364,28.53834,-81.37924,0.0744,30.42131,-87.21691,0.008,30.43826,-84.28073,0.0048,27.33643,-82.53065,0.0076,26.71534,-80.05337,0.0348,33.749,-84.38798,0.2468,32.08354,-81.09983,0.0068,43.6135,-116.20345,0.0172,43.46658,-112.03414,0.0072,46.71621,-122.9543,0.01,41.85003,-87.65005,0.2848,40.69365,-89.58899,0.008,40.70365,-89.40731,0.008,34.07029,-117.39588,0.0148,37.97476,-87.55585,0.004,39.76838,-86.15804,0.0444,41.68338,-86.25001,0.01,42.03471,-93.61994,0.0104,42.00833,-91.64407,0.0104,47.40177,-122.32429,0.0268,39.83865,-86.02526,0.0096,37.69224,-97.33754,0.012,40.27948,-86.51084,0.004,42.19454,-71.83563,0.0076,39.29038,-76.61219,0.004,39.41427,-77.41054,0.0116,43.22862,-88.11037,0.0056,39.64176,-77.71999,0.004,38.99067,-77.02609,0.0192,52.97633,-0.02664,0.2144,33.98154,-81.23621,0.012,42.32509,-72.6412,0.008,42.27756,-83.74088,0.0444,42.33143,-83.04575,0.054,43.01253,-83.68746,0.056,42.96336,-85.66809,0.0132,42.29171,-85.58723,0.012,41.56476,-87.53893,0.0056,42.13982,-71.51617,0.004,44.97997,-93.26384,0.1024,28.2489,-81.28118,0.01,44.94441,-93.09327,0.0148,42.24587,-84.40135,0.0056,36.50921,-86.885,0.0072,45.67965,-111.03856,0.004,46.87215,-113.994,0.0088,-34.86649,-61.5302,0.0088,41.25861,-95.93779,0.0364,36.17497,-115.13722,0.0464,39.52963,-119.8138,0.0112,44.53651,-122.90703,0.0064,40.72816,-74.07764,0.0168,40.48622,-74.45182,0.0196,39.68372,-75.74966,0.0068,39.95373,-74.19792,0.0108,35.08449,-106.65114,0.0156,37.88687,-122.29775,0.0284,45.17191,-93.87469,0.0224,42.44063,-76.49661,0.006,40.71427,-74.00597,0.5852,51.38764,0.50546,0.0248,41.08939,-112.06467,0.006,35.60095,-82.55402,0.0144,35.22709,-80.84313,0.0624,35.7721,-78.63861,0.0856,35.97987,-78.50972,0.0092,36.07264,-79.79198,0.0092,46.80833,-100.78374,0.004,39.162,-84.45689,0.0604,35.15952,-84.87661,0.0476,41.42973,-97.36838,0.0524,39.75895,-84.19161,0.0168,35.46756,-97.51643,0.0368,36.15398,-95.99277,0.0252,44.05207,-123.08675,0.0108,40.8176,-73.00011,0.0076,27.87725,-97.32388,0.1596,40.2737,-76.88442,0.0136,39.95233,-75.16379,0.1428,40.44062,-79.99589,0.074,41.82399,-71.41283,0.0256,39.49615,-88.17615,0.0048,35.61507,-87.03528,0.008,34.94957,-81.93205,0.0104,5.01111,-9.03889,0.0192,35.04563,-85.30968,0.0164,38.29674,-85.75996,0.0064,35.96064,-83.92074,0.018,35.14953,-90.04898,0.0052,36.16589,-86.78444,0.0596,43.66663,-92.97464,0.1928,32.78306,-96.80667,0.1576,31.75872,-106.48693,0.0084,32.72541,-97.32085,0.0312,29.76328,-95.36327,0.1488,31.11712,-97.7278,0.0064,15.3062,120.856,0.042,40.39162,-111.85077,0.0116,40.23384,-111.65853,0.0268,40.76078,-111.89105,0.0852,48.19871,-122.12514,0.0056]]] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment