<\/P>
Este ejemplo para desarrolladores demuestra cómo interactuar con un edificio de varios niveles en tres dimensiones usando Esri<\/A> y la ArcGIS API for JavaScript<\/A> versión 4.3. Con una simple operación de clic\/toque y arrastre, un edificio puede reposicionarse de manera intuitiva y suave sobre la superficie de la Tierra. Tenga en cuenta que cada piso es un gráfico separado pero se tratan como una sola entidad cuando se manipulan.<\/P><\/P>Haga clic aquí <\/A>para la aplicación en vivo.<\/P>Haga clic aquí <\/A>para el código fuente.<\/P><\/P>Es importante señalar que el ejemplo utiliza algunas llamadas a la API no documentadas para lograr este comportamiento. Por lo tanto, advertimos contra el uso de estas llamadas en un entorno de producción ya que no están soportadas y muy probablemente cambiarán en un futuro cercano.<\/P><\/P>El código<\/A> puede parecer excesivamente o innecesariamente complicado, a continuación se muestra un resumen de lo que hace el código:<\/P>Construcción del Edificio<\/STRONG>Por razones de portabilidad, los pisos del edificio se construyen a partir de un conjunto de valores codificados. Es importante señalar que cada piso es un gráfico individual atribuido con un identificador del edificio. Este identificador se usa para agrupar todos los pisos adyacentes para resaltar y traducir espacialmente.<\/LI>Arrastrar<\/STRONG>El código usa el evento drag <\/A>de SceneView para responder a las tres fases de una operación de arrastre del puntero, a saber, start<\/EM>, update<\/EM> y end<\/EM>. Durante la fase "start", se realiza una hittest <\/A>para identificar el piso del edificio (si hay alguno) bajo el puntero. Si se encuentra un piso, se identifican y resaltan los pisos adyacentes. En la fase "update", dos métodos no documentados SceneView._stage.pick<\/EM> y SceneView.<\/_computeMapPointFromIntersectionResult<\/EM> se usan para rastrear el desplazamiento del puntero en coordenadas del mundo real. Estos métodos devuelven la ubicación del mapa directamente bajo <\/_span>el puntero, ignorando características y gráficos.<\/_span><\/_span><\/_span><\/_LI>Deshabilitar/Habilitar Interacción del Puntero<\/_STRONG>Cuando un edificio es arrastrado a una nueva ubicación, es necesario deshabilitar la interacción con el mapa para que este no se desplace. Para lograr esto usamos otro método no documentado, SceneView.inputManager<\/_EM>, para agregar y luego restaurar manejadores.<\/_LI>Mover<\/_STRONG>Actualmente, no es posible actualizar la geometría de un gráfico existente. Para mostrar un gráfico moviéndose debe eliminarse y luego volver a agregarse. Esto puede parecer algo engorroso pero el impacto en el rendimiento es insignificante.<\/_LI>Limitación (Throttling)<\/_STRONG>Es probable que la tasa a la que se dispara el evento drag exceda la tasa de cuadros por segundo de la pantalla. Si la pantalla funciona a 60 cuadros por segundo (o mejor) entonces los eventos drag excesivos son ignorados.<\/_LI><\/_UL><\/_P>Nuevamente me gustaría enfatizar que este es un ejemplo para desarrolladores específicamente para la versión 4.3 de la Esri JavaScript API. Es muy probable que parte del código usado en esta aplicación sea obsoleto o redundante (o ambos) en futuras versiones.<\/_P><\/_P>Agradecimientos especiales a Johannes Schmid<\/_A>0 por su experiencia técnica!<\/_P><\/_BODY><\/_HTML>
Haga clic
Es importante señalar que el ejemplo utiliza algunas llamadas a la API no documentadas para lograr este comportamiento. Por lo tanto, advertimos contra el uso de estas llamadas en un entorno de producción ya que no están soportadas y muy probablemente cambiarán en un futuro cercano.<\/P>
El
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???
Los miembros registrados pueden publicar, seguir actualizaciones y más. ¿Nuevo aquí? Regístrate para una cuenta gratuita.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.