Skip to content

point scene layer sample #323

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

Merged
merged 4 commits into from
Mar 15, 2019
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
/*
* Copyright 2019 Esri.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/

package com.esri.samples.scene.add_a_point_scene_layer;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

import com.esri.arcgisruntime.geometry.Point;
import com.esri.arcgisruntime.layers.ArcGISSceneLayer;
import com.esri.arcgisruntime.layers.IntegratedMeshLayer;
import com.esri.arcgisruntime.mapping.ArcGISScene;
import com.esri.arcgisruntime.mapping.ArcGISTiledElevationSource;
import com.esri.arcgisruntime.mapping.Basemap;
import com.esri.arcgisruntime.mapping.Surface;
import com.esri.arcgisruntime.mapping.Viewpoint;
import com.esri.arcgisruntime.mapping.view.Camera;
import com.esri.arcgisruntime.mapping.view.SceneView;

public class AddAPointSceneLayerSample extends Application {

private SceneView sceneView;

@Override
public void start(Stage stage) {

try {

// set the title and size of the stage and show it
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

for consistency with other samples, move the two lines of code with StackPane and Scene initiation above the stage methods, so that all 5 stage methods are grouped together.

stage.setTitle("Add A Point Scene Layer Sample");
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"A" can be lower case

stage.setWidth(800);
stage.setHeight(700);

// create a JavaFX scene with a stackpane and set it to the stage
StackPane stackPane = new StackPane();
Scene fxScene = new Scene(stackPane);
stage.setScene(fxScene);
stage.show();

// create a scene view and add it to the stack pane
sceneView = new SceneView();
stackPane.getChildren().add(sceneView);

// create a scene with a basemap and add it to the scene view
ArcGISScene scene = new ArcGISScene();
scene.setBasemap(Basemap.createImagery());
sceneView.setArcGISScene(scene);

// set the base surface with world elevation
Surface surface = new Surface();
surface.getElevationSources().add(new ArcGISTiledElevationSource("http://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer"));
scene.setBaseSurface(surface);

// add a point scene layer with points at world airport locations
ArcGISSceneLayer pointSceneLayer = new ArcGISSceneLayer("https://tiles.arcgis.com/tiles/V6ZHFr6zdgNZuVG0/arcgis/rest/services/Airports_PointSceneLayer/SceneServer/layers/0");
scene.getOperationalLayers().add(pointSceneLayer);

} catch (Exception e) {
// on any error, display the stack trace.
e.printStackTrace();
}
}

/**
* Stops and releases all resources used in application.
*/
@Override
public void stop() {

if (sceneView != null) {
sceneView.dispose();
}
}

/**
* Opens and runs application.
*
* @param args arguments passed to this application
*/
public static void main(String[] args) {

Application.launch(args);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<h1>Add a point scene layer</h1>

<p>View a point scene layer from a scene service.</p>

<p><img src="AddAPointSceneLayer.png"/></p>

<h2>Use case</h2>

<p>Point scene layers can efficiently display large amounts of point features. While point cloud layers can only display simple symbols, point scene layers can display any type of billboard symbol or even 3D models, as long as the location of the symbol can be described by a point. Points are cached and automatically thinned when zoomed out to improve performance.</p>
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To really emphasise this point...could each point be represented by our 3D plane model instead of a simple white circle? It would mean having to change the base data in Pro/AGOL though. Just a thought.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is a good idea but not sure we have control over the service. We can look at it again after the release.


<h2>How to use the sample</h2>

<p>Pan around the scene and zoom in. Notice how many thousands of additional features appear at each successive zoom scale.</p>
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it also shows features 'behind' the active face of the globe (e.g. looking on Africa airports from Australia are visible behind): is this intentional?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That definitely sounds like a bug.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I reproduced it with 2328 (super trippy!) and then saw it looks fixed with the latest build 2358. Could you confirm it looks okay to you with that build?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh whoops, I must have been checking it with the out of date build. With 2358 it looks good now!


<h2>How it works</h2>

<ol>
<li>Create a scene.</li>

<li>Create an <code>ArcGISSceneLayer</code> with the URL to a point scene layer service.</li>

<li>Add the layer to the scene's operational layers collection.</li>
</ol>

<h2>Relevant API</h2>

<ul>
<li>ArcGISSceneLayer</li>
</ul>

<h2>About the data</h2>

<p>This dataset contains more than 40,000 points representing world airports. Points are retrieved on demand by the scene layer as the user navigates the scene.</p>

<h2>Additional information</h2>

<p>Point scene layers can also be retrieved from scene layer packages (.slpk) and mobile scene packages (.mspk).</p>

<h2>Tags</h2>

<p>3D, point scene layer, layers</p>