<\/P>
Dieses Entwicklerbeispiel zeigt, wie man mit einem mehrstöckigen Gebäude in drei Dimensionen unter Verwendung der Esri<\/A> ArcGIS API for JavaScript<\/A> Version 4.3 interagiert. Mit einer einfachen Klick-\/Tippen- und Ziehoperation kann ein Gebäude intuitiv und flüssig auf der Erdoberfläche neu positioniert werden. Beachten Sie, dass jede Etage eine separate Grafik ist, aber beim Manipulieren als eine Einheit behandelt wird.<\/P><\/P>Klicken Sie hier<\/A> für die Live-Anwendung.<\/P>Klicken Sie hier<\/A> für den Quellcode.<\/P><\/P>Es ist wichtig zu beachten, dass das Beispiel einige undokumentierte API-Aufrufe verwendet, um dieses Verhalten zu erreichen. Daher raten wir davon ab, diese Aufrufe in einer Produktionsumgebung zu verwenden, da sie nicht unterstützt werden und sehr wahrscheinlich in naher Zukunft geändert werden.<\/P><\/P>Der Code<\/A> mag übermäßig oder unnötig kompliziert erscheinen, im Folgenden eine Zusammenfassung dessen, was der Code macht:<\/P>Gebäudekonstruktion<\/STRONG>Aus Gründen der Portabilität werden Gebäudegeschosse aus einem Satz fest codierter Werte konstruiert. Es ist wichtig zu beachten, dass jede Etage eine einzelne Grafik mit einer Gebäude-ID ist. Diese ID wird verwendet, um alle angrenzenden Etagen für Hervorhebung und räumliche Verschiebung zu gruppieren.<\/LI>Ziehen<\/STRONG>Der Code verwendet das drag<\/A>-Ereignis der SceneView, um auf die drei Phasen einer Zeiger-Ziehoperation zu reagieren, nämlich start<\/EM>, update<\/EM> und end<\/EM>. Während der "start"-Phase wird ein hittest<\/A> durchgeführt, um die Gebäudegeschoss (falls vorhanden) unter dem Zeiger zu identifizieren. Wenn eine Etage gefunden wird, werden angrenzende Etagen identifiziert und hervorgehoben. In der "update"-Phase werden zwei undokumentierte Methoden SceneView._stage.pick<\/EM> und SceneView.<\/>_computeMapPointFromIntersectionResult<\/EM> verwendet, um die Zeigerbewegung in realen Koordinaten zu verfolgen. Diese Methoden geben den Kartenstandort direkt unterhalb<\/> des Zeigers zurück und ignorieren Features und Grafiken.<\/><\/><\/><\/><\/>Deaktivieren/Aktivieren der Zeigerinteraktion<\/>Wenn ein Gebäude an einen neuen Ort gezogen wird, ist es notwendig, die Karteninteraktion zu deaktivieren, damit sich die Karte nicht verschiebt. Um dies zu erreichen, haben wir eine weitere undokumentierte Methode, SceneView.inputManager<\/>, verwendet, um Handler hinzuzufügen und dann wiederherzustellen.<\/>Bewegen<\/>Derzeit ist es nicht möglich, die Geometrie einer bestehenden Grafik zu aktualisieren. Um eine Grafik beweglich darzustellen, muss sie gelöscht und dann erneut hinzugefügt werden. Dies mag etwas umständlich erscheinen, aber der Leistungseinbruch ist vernachlässigbar.<\/>Drosselung<\/>Es ist wahrscheinlich, dass die Rate des drag-Ereignisses die Bildwiederholrate überschreitet. Wenn die Anzeige mit 60 Bildern pro Sekunde (oder besser) läuft, werden übermäßige drag-Ereignisse ignoriert.<\/><\/><\/>Noch einmal möchte ich betonen, dass dies ein Entwicklerbeispiel speziell für Version 4.3 der Esri JavaScript API ist. Es ist sehr wahrscheinlich, dass einige Teile des Codes in dieser Anwendung in zukünftigen Versionen entweder veraltet oder überflüssig (oder beides) sein werden.<\/><\/>Besonderer Dank gilt Johannes Schmid<\/> für seine technische Expertise!<\/>
Klicken Sie
Es ist wichtig zu beachten, dass das Beispiel einige undokumentierte API-Aufrufe verwendet, um dieses Verhalten zu erreichen. Daher raten wir davon ab, diese Aufrufe in einer Produktionsumgebung zu verwenden, da sie nicht unterstützt werden und sehr wahrscheinlich in naher Zukunft geändert werden.<\/P>
Der
Vir Naidoo, I admire your curiosity and enthusiasm but I think that taking advantage of Esri's online training material might be a more effective way of gaining the necessary knowledge. On Esri's training page there are more than 30 JavaScript related courses most of which are either free or complimentary with a current maintenance subscription. For more information please contact your local Esri distributor.
and Richie Carmichael ,
Here is an another question, I have used your code,but the result is not right. the graphic.attributes.only have an OBJECTID attribute, did not include name or other.
So , how do you think to solve this??
thanks advance.
Hi Richie Carmichael ,
First, I am very grateful for your help , and this time i want to know is the graphic.attributes.name, where did it from ?
is it from the attributes table i have add it in my attributes table??
Vir Naidoo, to display the name of a clicked building you could do something like this:
_view.on("click", function (e) {
// Stop propagation.
e.stopPropagation();
// Perform hittest to get clicked building (if any).
_view.hitTest(e.screenPoint).then(function (p) {
if (!p || !p.results || p.results.length === 0) { return; }
var graphic = p.results[0].graphic;
if (!graphic) { return; }
// Popup name of clicked building.
alert(graphic.attributes.name);
});
I want to know if three is any way to achieve using click event in sceneView to find which building i have clicked? If so, how to achieve it,please show me the detail,thanks advance.
Vir Naidoo, click here to learn how to define a scene layer definition expression.
Hi Richie Carmichael ,
What you said is important to me , but how can i hide the building with definition query?
Do you have any demo that i can learn to??
thank you advance.
Hi Naidoo, no it is not possible to edit or move single features in a SceneLayer. But having said that I have seen one of my colleagues demonstrate a simulated editing workflow. When a user clicks on a building (from the SceneLayer) create a new graphic using the building's cloned geometry. Hide the clicked building using a definition query on the SceneLayer. Use the logic described in this post to translate the cloned building. Hope this helps!
I' d like to know could i use my buildings in sceneLayer to achieve this function???
Angemeldete Mitglieder können Beiträge verfassen, Updates folgen und mehr. Neu hier? Registrieren Sie ein kostenloses Konto.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.