Exemple #1
0
		layers.eachLayer(function (layer) {
			var geom = layer.feature.geometry.coordinates;
			var basicRing = geom[0];
			var holeRings = geom.slice(1);
			var i, j;

			var scale = 1;
			var hscale = 6;

			var pos = new THREE.Vector3();
			pos.z = 0;
			var pxy = llSwap(sm.forward(llSwap(basicRing[0])));
			pos.x = pxy[0];
			pos.y = pxy[1];
			console.log('p>', pos);

			var shape = new THREE.Shape();
			for (i = 0; i < basicRing.length; i++) {
				var p = llSwap(sm.forward(llSwap(basicRing[i])));
				shape.moveTo(p[0] * scale - pos.x, p[1] * scale - pos.y);
			}

			for (j = 0; j < holeRings.length; j++) {
				var hole = new THREE.Path();
				for (i = 0; i < holeRings[j].length; i++) {
					var p = llSwap(sm.forward(llSwap(holeRings[j][i])));
					hole.moveTo(p[0] * scale - pos.x, p[1] * scale - pos.y);
				}

				shape.holes.push(hole);
			}

			console.log(layer.feature);

			var height = layer.feature.properties['B_LEVELS'] * hscale;
			console.log('bl> ', layer.feature.properties['B_LEVELS']);
			var houseGeometry = shape.extrude({
				amount: height,
				bevelEnabled: false,
				material: 0,
				extrudeMaterial: 0
			});

			var material = new THREE.MeshNormalMaterial();
			var houseMesh = window.hm = new THREE.Mesh(houseGeometry, material);
			houseMesh.position.x = pos.x;
			houseMesh.position.y = pos.y;
			houseMesh.position.z = pos.z;

			scene.add(houseMesh);
			console.log(houseMesh);

			camera.position.x = 5993256.531453259;
			camera.position.y = 6245827.850407017;
			camera.position.z = 6;
			camera.lookAt(houseMesh.position);
			camera.rotateZ(Math.PI/2)
		});
function zoomTo() {
  var center = document.getElementById('center').value.split(','),
    zoom =  parseInt(document.getElementById('zoom').value),
    mercCenter, mapExtent, res, tiles;
  // calculate map parameters in mercator projection
  mercCenter = merc.forward([parseFloat(center[0]),parseFloat(center[1])]);
  res = mercatorMaxRes/Math.pow(2,zoom);
  mapExtent = {
    left: mercCenter[0] - size.width/2 * res,
    right: mercCenter[0] + size.width/2 * res,
    bottom: mercCenter[1] - size.height/2 * res,
    top: mercCenter[1] + size.height/2 * res
  };
  // get map tiles list for our map extent
  tiles = webMercatorTiles(mapExtent, zoom);
  // append map tile images to the map div
  mapDiv.innerHTML = "";
  tiles.forEach(function(t) {
    var img = document.createElement('img');
    img.src = baseURL + '/'+ t.Z + '/' + t.X + '/' + t.Y + '.png';
    img.setAttribute('style', 'left:'+ t.left + 'px;top:'+t.top+'px;');
    img.setAttribute('class','tile');
    mapDiv.appendChild(img);
  });
}
Exemple #3
0
/**
 * coarse - sorts results based on coarse tile grid values
 *
 * @param  {Array} results grid results to sort
 * @param  {Array} grids   Array of Arrays of grid esults for each layer
 * @param  {Array} zooms   Array of zooms for each layer
 * @param  {Object} options geocoder options
 * @return {Array}         sorted grid results
 */
function coarse(results, grids, zooms, options) {
    //Setup grid lookup - each layer is an object in the array with id->grid
    var gridlookup = [];
    var proxSM = sm.forward(options.proximity); //proximity in merc
    var layer_it = grids.length;
    while (layer_it--) { //Allow grid lookup by gridlookup[idx][id]
        gridlookup[layer_it] = {};
        var grid_it = grids[layer_it].length;
        while (grid_it--) {
            var tmpGrid = ops.grid(grids[layer_it][grid_it]);
            gridlookup[layer_it][tmpGrid.id] = tmpGrid;
        }
    }

    var relevlookup = {};
    var relev_it = results.length;
    while (relev_it--) { //precalculate center & dist to proc for sorting
        relevlookup[results[relev_it]] = { relev: new Relev(results[relev_it]) };
        var currentRelev = relevlookup[results[relev_it]].relev;
        var currentCenter = toCenter(
            sm.bbox(
                gridlookup[currentRelev.idx][currentRelev.id].x,
                gridlookup[currentRelev.idx][currentRelev.id].y,
                zooms[currentRelev.idx]
            )
        );

        // a^2 + b^2 as dist
        relevlookup[results[relev_it]].dist = (currentCenter[0] - proxSM[0])*(currentCenter[0] - proxSM[0]) + (currentCenter[1] - proxSM[1])*(currentCenter[1] - proxSM[1]);
    }
    results.sort(function(a, b) {
        a = relevlookup[a];
        b = relevlookup[b];
        if (a.relev.relev !== b.relev.relev) return 0; //Only sort with same relev
        return a.dist - b.dist;
    });

    return results;
}
Exemple #4
0
/**
 * toCenter - takes lat/lng bbox and returns centre in mercator
 *
 * @param  {Array} bbox in format [w, s, e, n]
 * @return {Array} [x,y] of mercator center
 */
function toCenter(bbox) {
    return sm.forward([(bbox[0] + bbox[2]) / 2, (bbox[1] + bbox[3]) / 2]);
}