<\/P>
Dit ontwikkelaarsvoorbeeld toont hoe te interageren met een meerlaag gebouw in drie dimensies met behulp van Esri<\/A>'s ArcGIS API for JavaScript<\/A> versie 4.3. Met een eenvoudige klik\/tik en sleepbewerking kan een gebouw intuïtief en soepel worden verplaatst op het aardoppervlak. Merk op dat elke verdieping een aparte graphic is, maar als één entiteit wordt behandeld bij manipulatie.<\/P><\/P>Klik hier <\/A>voor de live applicatie.<\/P>Klik hier <\/A>voor de broncode.<\/P><\/P>Het is belangrijk op te merken dat het voorbeeld enkele niet-gedocumenteerde API-aanroepen gebruikt om dit gedrag te bereiken. Daarom waarschuwen we tegen het gebruik van deze aanroepen in een productieomgeving, omdat ze niet worden ondersteund en zeer waarschijnlijk binnenkort zullen veranderen.<\/P><\/P>De code<\/A> lijkt misschien overdreven of onnodig ingewikkeld, hieronder volgt een samenvatting van wat de code doet:<\/P>Bouw van het gebouw<\/STRONG>Om redenen van draagbaarheid worden gebouwverdiepingen opgebouwd uit een set hardcoded waarden. Het is belangrijk op te merken dat elke verdieping een individuele graphic is met een gebouwidentificatie. Deze identificatie wordt gebruikt om alle aangrenzende verdiepingen te groeperen voor markering en ruimtelijke translatie.<\/LI>Slepen<\/STRONG>De code gebruikt het drag-event van SceneView om te reageren op de drie fasen van een pointer sleepbewerking, namelijk start<\/EM>, update<\/EM> en end<\/EM>. Tijdens de "start"-fase wordt een hittest<\/A> uitgevoerd om de gebouwverdieping (indien aanwezig) onder de pointer te identificeren. Als er een verdieping wordt gevonden, worden aangrenzende verdiepingen geïdentificeerd en gemarkeerd. In de "update"-fase worden twee niet-gedocumenteerde methoden SceneView._stage.pick<\/EM> en SceneView.<\/>_computeMapPointFromIntersectionResult<\/EM> gebruikt om de verplaatsing van de pointer in coördinaten van de echte wereld te volgen. Deze methoden geven direct de kaartlocatie terug die zich recht onder <\/>de pointer bevindt, waarbij features en graphics worden genegeerd.<\/><\/><\/><\/><\/><\/><\/><\/><\/><\/><\/><\/><\/><\/><\/><\/><\/><\/><\/><\/><\/><\/><\/>
Klik
Het is belangrijk op te merken dat het voorbeeld enkele niet-gedocumenteerde API-aanroepen gebruikt om dit gedrag te bereiken. Daarom waarschuwen we tegen het gebruik van deze aanroepen in een productieomgeving, omdat ze niet worden ondersteund en zeer waarschijnlijk binnenkort zullen veranderen.<\/P>
De
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???
Aangemelde leden kunnen berichten plaatsen, updates volgen en meer. Nieuw hier? Registreer een gratis account.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.