-
Notifications
You must be signed in to change notification settings - Fork 3.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Proj4JS and Custom Projections in Columbus View #6986
Merged
Merged
Changes from all commits
Commits
Show all changes
17 commits
Select commit
Hold shift + click to select a range
358308b
preliminary support for Proj4JS and Custom Projections in Columbus View
likangning93 805d181
base64 encode URI in Custom Projection Sandcastle
likangning93 66c0646
add support for heights in custom projections
likangning93 0d2d47a
PR comments
likangning93 56dd456
require custom project and unproject to use Cesium types
likangning93 377cb18
replace eval in CustomProjection with loadjsonp and importScripts
likangning93 bf1f530
decouple proj4js
likangning93 092c411
re-add proj4
likangning93 f0c8305
fix middle-click rotation and 2D infinite scroll in non-rectangular p…
likangning93 741773b
merge master into additionalProjections
likangning93 52a3c4f
add limiter rectangle in Proj4Projection as well to avoid infinite pr…
likangning93 ada6205
avoid cutoff for ground primitives with materials in alternate projec…
likangning93 01c3ac1
for non-normal-cylindrical projections, default to rotatable 2D map a…
likangning93 7505a9e
merge in master
likangning93 52cdb96
update Rectangle projection extent approximation
likangning93 cc4690e
merge master into additionalProjections
likangning93 8a69d0a
maintain camera up axis when zooming in polar projections in 2D
likangning93 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
function createProjectionFunctions(callback) { | ||
function project(cartographic, result) { | ||
result.x = cartographic.longitude * 6378137.0; | ||
result.y = cartographic.latitude * 2.0 * 6378137.0; | ||
result.z = cartographic.height + Math.abs(cartographic.longitude * cartographic.longitude * 1000000.0); | ||
} | ||
function unproject(cartesian, result) { | ||
result.longitude = cartesian.x / 6378137.0; | ||
result.latitude = cartesian.y / (2.0 * 6378137.0); | ||
result.height = cartesian.z - Math.abs(result.longitude * result.longitude * 1000000.0); | ||
} | ||
callback(project, unproject); | ||
} |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
<!DOCTYPE html> | ||
<html lang="en"> | ||
<head> | ||
<meta charset="utf-8"> | ||
<meta http-equiv="X-UA-Compatible" content="IE=edge"> | ||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"> | ||
<meta name="description" content="Demonstration of Custom projections."> | ||
<meta name="cesium-sandcastle-labels" content="Showcases"> | ||
<title>Cesium Demo</title> | ||
<script type="text/javascript" src="../Sandcastle-header.js"></script> | ||
<script type="text/javascript" src="../../../ThirdParty/requirejs-2.1.20/require.js"></script> | ||
<script type="text/javascript"> | ||
if(typeof require === "function") { | ||
require.config({ | ||
baseUrl : '../../../Source', | ||
waitSeconds : 120 | ||
}); | ||
} | ||
</script> | ||
</head> | ||
<body class="sandcastle-loading" data-sandcastle-bucket="bucket-requirejs.html"> | ||
<style> | ||
@import url(../templates/bucket.css); | ||
</style> | ||
<div id="cesiumContainer" class="fullSize"></div> | ||
<div id="loadingOverlay"><h1>Loading...</h1></div> | ||
<div id="toolbar"></div> | ||
<script id="cesium_sandcastle_script"> | ||
function startup(Cesium) { | ||
'use strict'; | ||
//Sandcastle_Begin | ||
|
||
var projectionText = | ||
'function createProjectionFunctions(callback) {\n' + | ||
' function project(cartographic, result) {\n' + | ||
' result.x = cartographic.longitude * 6378137.0;\n' + | ||
' result.y = cartographic.latitude * 2.0 * 6378137.0;\n' + | ||
' result.z = cartographic.height + Math.abs(cartographic.longitude * cartographic.longitude * 1000000.0);\n' + | ||
' }\n' + | ||
' function unproject(cartesian, result) {\n' + | ||
' result.longitude = cartesian.x / 6378137.0;\n' + | ||
' result.latitude = cartesian.y / (2.0 * 6378137.0);\n' + | ||
' result.height = cartesian.z - Math.abs(result.longitude * result.longitude * 1000000.0);\n' + | ||
' }\n' + | ||
' callback(project, unproject);\n' + | ||
' }\n'; | ||
var projectionTextUrl = 'data:text/plain;base64,' + window.btoa(projectionText); | ||
|
||
if (Cesium.FeatureDetection.isInternetExplorer()) { | ||
projectionTextUrl = '../../SampleData/SampleProjection.txt'; | ||
} | ||
|
||
var customProjection = new Cesium.CustomProjection(projectionTextUrl, 'sample projection'); | ||
customProjection.readyPromise | ||
.then(function(projection) { | ||
|
||
var viewer = new Cesium.Viewer('cesiumContainer', { | ||
sceneMode : Cesium.SceneMode.COLUMBUS_VIEW, | ||
mapProjection : projection | ||
}); | ||
|
||
var pointEntities = []; | ||
function addPoint(longitude, latitude) { | ||
pointEntities.push(viewer.entities.add({ | ||
position : Cesium.Cartesian3.fromDegrees(longitude, latitude), | ||
point : { | ||
pixelSize : 5, | ||
color : Cesium.Color.PURPLE, | ||
disableDepthTestDistance : Number.POSITIVE_INFINITY | ||
}, | ||
id : 'longitude: ' + longitude + ' latitude: ' + latitude | ||
})); | ||
} | ||
|
||
for (var longitude = -175; longitude < 180; longitude += 10) { | ||
for (var latitude = -85; latitude < 90; latitude += 10) { | ||
addPoint(longitude, latitude); | ||
} | ||
} | ||
|
||
Sandcastle.addToolbarButton('Show/Hide Points', function() { | ||
for (var i = 0; i < pointEntities.length; i++) { | ||
pointEntities[i].show = !pointEntities[i].show; | ||
} | ||
}); | ||
|
||
}).otherwise(function(e) { | ||
console.log(e); | ||
}); | ||
|
||
//Sandcastle_End | ||
Sandcastle.finishedLoading(); | ||
} | ||
if (typeof Cesium !== "undefined") { | ||
startup(Cesium); | ||
} else if (typeof require === "function") { | ||
require(["Cesium"], startup); | ||
} | ||
</script> | ||
</body> | ||
</html> |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
<!DOCTYPE html> | ||
<html lang="en"> | ||
<head> | ||
<meta charset="utf-8"> | ||
<meta http-equiv="X-UA-Compatible" content="IE=edge"> | ||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"> | ||
<meta name="description" content="Demonstration of Proj4JS projections."> | ||
<meta name="cesium-sandcastle-labels" content="Showcases"> | ||
<title>Cesium Demo</title> | ||
<script type="text/javascript" src="../Sandcastle-header.js"></script> | ||
<script type="text/javascript" src="../../../ThirdParty/requirejs-2.1.20/require.js"></script> | ||
<script type="text/javascript"> | ||
if(typeof require === "function") { | ||
require.config({ | ||
baseUrl : '../../../Source', | ||
waitSeconds : 120 | ||
}); | ||
} | ||
</script> | ||
</head> | ||
<body class="sandcastle-loading" data-sandcastle-bucket="bucket-requirejs.html"> | ||
<style> | ||
@import url(../templates/bucket.css); | ||
</style> | ||
<div id="cesiumContainer" class="fullSize"></div> | ||
<div id="loadingOverlay"><h1>Loading...</h1></div> | ||
<div id="toolbar"></div> | ||
<script id="cesium_sandcastle_script"> | ||
function startup(Cesium) { | ||
'use strict'; | ||
//Sandcastle_Begin | ||
var viewer = new Cesium.Viewer('cesiumContainer', { | ||
sceneMode : Cesium.SceneMode.COLUMBUS_VIEW, | ||
mapProjection : new Cesium.Proj4Projection('+proj=moll +lon_0=0 +x_0=0 +y_0=0 +a=6371000 +b=6371000 +units=m +no_defs') | ||
}); | ||
|
||
var pointEntities = []; | ||
function addPoint(longitude, latitude) { | ||
pointEntities.push(viewer.entities.add({ | ||
position : Cesium.Cartesian3.fromDegrees(longitude, latitude), | ||
point : { | ||
pixelSize : 5, | ||
color : Cesium.Color.PURPLE, | ||
disableDepthTestDistance : Number.POSITIVE_INFINITY | ||
}, | ||
id : 'longitude: ' + longitude + ' latitude: ' + latitude | ||
})); | ||
} | ||
|
||
for (var longitude = -175; longitude < 180; longitude += 10) { | ||
for (var latitude = -85; latitude < 90; latitude += 10) { | ||
addPoint(longitude, latitude); | ||
} | ||
} | ||
|
||
Sandcastle.addToolbarButton('Show/Hide Points', function() { | ||
for (var i = 0; i < pointEntities.length; i++) { | ||
pointEntities[i].show = !pointEntities[i].show; | ||
} | ||
}); | ||
|
||
//Sandcastle_End | ||
Sandcastle.finishedLoading(); | ||
} | ||
if (typeof Cesium !== "undefined") { | ||
startup(Cesium); | ||
} else if (typeof require === "function") { | ||
require(["Cesium"], startup); | ||
} | ||
</script> | ||
</body> | ||
</html> |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
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
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
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this logic should be inside scene. Have the scene wait for the projection to be ready before it starts to render. This would also work when using proj4js and have Proj4Projection load the module.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks like there are several
project
calls before the first Scene update, including but maybe not limited to:Camera
constructorScreenSpaceCameraController
constructorsceneMode
when initializating the viewerI'm not sure if all of that can be modified, or if there's anything else users would like to do that would break if the projection isn't ready.