<\/P>
Tato ukázka pro vývojáře demonstruje, jak interagovat s vícepatrovou budovou ve třech dimenzích pomocí Esri<\/A> ArcGIS API for JavaScript<\/A> verze 4.3. Jednoduchým kliknutím\/tapnutím a tažením lze budovu intuitivně a plynule přesunout na povrchu Země. Všimněte si, že každé patro je samostatná grafika, ale při manipulaci jsou považována za jeden celek.<\/P><\/P>Klikněte zde<\/A> pro živou aplikaci.<\/P>Klikněte zde<\/A> pro zdrojový kód.<\/P><\/P>Je důležité poznamenat, že ukázka používá několik nedokumentovaných volání API k dosažení tohoto chování. Proto doporučujeme tato volání nepoužívat v produkčním prostředí, protože nejsou podporována a velmi pravděpodobně se v blízké budoucnosti změní.<\/P><\/P>Kód<\/A> může vypadat příliš nebo zbytečně složitě, níže je shrnutí toho, co kód dělá:<\/P>Stavba budovy<\/STRONG>Z důvodů přenositelnosti jsou patra budovy sestavena ze sady pevně zakódovaných hodnot. Je důležité poznamenat, že každé patro je individuální grafika s atributem identifikátoru budovy. Tento identifikátor se používá ke skupinování všech sousedních pater pro zvýraznění a prostorový přesun.<\/LI>Tažení<\/STRONG>Kód používá událost drag<\/A> objektu SceneView k reakci na tři fáze operace tažení ukazatele, konkrétně start<\/EM>, update<\/EM> a end<\/EM>. Během fáze "start" se provádí hittest<\/A>, aby se identifikovalo patro budovy (pokud nějaké) pod ukazatelem. Pokud je patro nalezeno, sousední patra jsou identifikována a zvýrazněna. Ve fázi "update" jsou použity dvě nedokumentované metody SceneView._stage.pick<\/EM> a SceneView.<\/>_computeMapPointFromIntersectionResult<\/EM>, které sledují posun ukazatele ve skutečných souřadnicích. Tyto metody vrací polohu mapy přímo pod<\/>ukazatelem, ignorujíce prvky a grafiku.<\/><\/><\/><\/><\/><\/><\/><\/><\/><\/><\/><\/><\/><\/><\/><\/><\/><\/><\/><\/><\/>
Klikněte
Je důležité poznamenat, že ukázka používá několik nedokumentovaných volání API k dosažení tohoto chování. Proto doporučujeme tato volání nepoužívat v produkčním prostředí, protože nejsou podporována a velmi pravděpodobně se v blízké budoucnosti změní.<\/P>
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???
Přihlášení členové mohou přispívat, sledovat aktualizace a další. Nový zde? Zaregistrujte si bezplatný účet.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.