Code: Select all
var ge,
loaded = false;
google.setOnLoadCallback(google.earth.createInstance('map3d', function (instance) {
ge = instance;
var uscontainer = {n:50,s:20,e:-60,w:-126};
var folders = [];
// Create all folders for consumption by placemarks
for (var ns = uscontainer.n; ns <= uscontainer.n && ns >= uscontainer.s; ns -= 2) {
folders[ns] = [];
for (var we = uscontainer.e; we <= uscontainer.e && we >= uscontainer.w; we -= 2) {
var latLonAltBox = ge.createLatLonAltBox(weightedRandom.guid());
latLonAltBox.setAltBox(ns, ns - 2, we - 2, we, 0, 0, 0, ge.ALTITUDE_RELATIVE_TO_GROUND);
// close
var lodClose = ge.createLod(weightedRandom.guid());
lodClose.set(131072, -1, 0, 0);
var regionsClose = ge.createRegion(weightedRandom.guid());
regionsClose.set(latLonAltBox, lodClose);
var regionFoldersClose = ge.createFolder(weightedRandom.guid());
regionFoldersClose.setRegion(regionsClose);
ge.getFeatures().appendChild(regionFoldersClose);
// medium
var lodMed = ge.createLod(weightedRandom.guid());
lodMed.set(32768, -1, 0, 0);
var regionsMed = ge.createRegion(weightedRandom.guid());
regionsMed.set(latLonAltBox, lodMed);
var regionFoldersMed = ge.createFolder(weightedRandom.guid());
regionFoldersMed.setRegion(regionsMed);
ge.getFeatures().appendChild(regionFoldersMed);
// far
var regionFoldersFar = ge.createFolder(weightedRandom.guid());
ge.getFeatures().appendChild(regionFoldersFar);
folders[ns][we] = {
close: regionFoldersClose,
far: regionFoldersFar,
med: regionFoldersMed
};
}
}
var icon = ge.createIcon(weightedRandom.guid());
var offIcon = ge.createIcon(weightedRandom.guid());
var style = ge.createStyle(weightedRandom.guid());
var offStyle = ge.createStyle(weightedRandom.guid());
icon.setHref(window.location.href + '/assets/images/lightbulb.png');
offIcon.setHref(window.location.href + '/assets/images/lightbulb_off.png');
icon.setViewRefreshMode(ge.VIEW_REFRESH_ON_REGION);
offIcon.setViewRefreshMode(ge.VIEW_REFRESH_ON_REGION);
icon.setW(16);
icon.setH(16);
offIcon.setW(16);
offIcon.setH(16);
style.getIconStyle().setIcon(icon);
offStyle.getIconStyle().setIcon(offIcon);
style.getIconStyle().setScale(1);
offStyle.getIconStyle().setScale(1);
weightedRandom.set(['close', 'med', 'far'], [0.7, 0.2, 0.1]);
var roundUp = function (n, to) {
return Math.ceil(n / to) * to;
};
scope.control.createPlacemark = function (lat, lng, sale, to) {
to = to || 0;
var placemark = ge.createPlacemark(weightedRandom.guid());
var point = ge.createPoint(weightedRandom.guid());
point.setLatitude(+lat);
point.setLongitude(+lng);
placemark.setGeometry(point);
placemark.setStyleSelector(style);
// lat = NS, lng = EW
var ceiled = roundUp(lat, 2);
var floored = roundUp(lng, 2);
if (folders[ceiled]) {
if (folders[ceiled][floored]) {
var distance = weightedRandom.get();
folders[ceiled][floored][distance].getFeatures().appendChild(placemark);
} else {
console.log('not found!');
}
} else {
console.log('not found!');
}
$timeout(function () {
placemark.setStyleSelector(offStyle);
}, to);
return placemark;
};
ge.getLayerRoot().enableLayerById(ge.LAYER_BORDERS, true);
ge.getWindow().setVisibility(true);
scope.control.setLookAt(null, null, 7000000); // 7,000,000
scope.initialized = true;
}, function (err) {
console.error(err); // something went wrong!
}));