5 votos

Toolbars.Draw: Limpiar el último punto cuando se hace clic en un nuevo punto.

Estoy creando un mapa que proporcionará coordenadas cuando se hace clic en un punto en el mapa. Quiero que se proporcione un gráfico en la ubicación clicada, así que voy a utilizar la funcionalidad de dibujo también. Hasta ahora, donde estoy atascado es ¿cómo borro el último punto cuando se hace clic en un nuevo punto?

He publicado mi código a continuación.

            <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//ES" "http://www.w3.org/TR/html4/strict.dtd">
            <html>
              <head>
                <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
                <meta http-equiv="X-UA-Compatible" content="IE=7" />
                <meta name="viewport" content="width=device-width,user-scalable=no"/>
                <!--La etiqueta meta viewport se utiliza para mejorar la presentación y el comportamiento de los ejemplos 
                  en dispositivos iOS-->
                <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no"/>
                <title>Barra de herramientas del mapa</title>
                <link rel="stylesheet" type="text/css" href="http://serverapi.arcgisonline.com/jsapi/arcgis/2.1/js/dojo/dijit/themes/claro/claro.css">
                <style type="text/css">
                  html, body {
                    height: 100%; width: 100%; margin: 0; padding: 0;
                  }
                </style>
                <script type="text/javascript">
                  djConfig = {
                    parseOnLoad: true
                  }
                </script>
                <script type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=2.1"></script>
                <script type="text/javascript">
                  dojo.require("esri.map");
                  dojo.require("esri.toolbars.draw");
                  dojo.require("dijit.dijit"); // optimize: load dijit layer
                  dojo.require("dijit.layout.BorderContainer");
                  dojo.require("dijit.layout.ContentPane");

                  var map, toolbar, symbol, geomTask;
                  function init() {
                    var startExtent = new esri.geometry.Extent({"xmin":-11721159.665358918,"ymin":-1138850.8106919006,"xmax":8277212.918942982,"ymax":9858297.322750043,"spatialReference":{"wkid":102100}});
                    map = new esri.Map("map",{extent:startExtent});
                    dojo.connect(map, "onLoad", createToolbar);
                    var basemap = new esri.layers.ArcGISTiledMapServiceLayer("http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer");
                    map.addLayer(basemap);
                  }

                  function createToolbar(map) {
                    toolbar = new esri.toolbars.Draw(map);
                    //set drawing mode to extent
                    toolbar.activate(esri.toolbars.Draw.POINT);
                    dojo.connect(toolbar, "onDrawEnd", addToMap);
                  }

                  function addToMap(geometry) {
                  //toolbar.deactivate();
                  map.showZoomSlider();
                   switch (geometry.type) {
                      case "point":
                        var symbol = new esri.symbol.SimpleMarkerSymbol(esri.symbol.SimpleMarkerSymbol.STYLE_X, 10, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([255,0,0]), 2), new dojo.Color([0,255,0,1]));

                    }

                    var graphic = new esri.Graphic(geometry, symbol);
                    map.graphics.add(graphic);
                  }

                  dojo.addOnLoad(init);
                </script>
              </head>
              <body class="claro">
            <div id="mainWindow" dojotype="dijit.layout.BorderContainer" design="headline" gutters="false" style="width:100%; height:100%;">

                <div id="map" dojoType="dijit.layout.ContentPane" style="border:solid 2px #587498;margin:5px;" region="center">
                </div>
            </div>
              </body>
            </html>

5voto

Daniel Broekman Puntos 1951

¡Hola Mike! Agrega esta línea a tu función addToMap:

map.graphics.clear();

Si eso es demasiado drástico, hay un par de otras opciones:

  • utiliza una nueva capa de gráficos específicamente para tu punto de clic y utiliza glayer.graphics.clear() cada vez que haya un nuevo clic
  • mantén una referencia a tu gráfico y simplemente actualiza la geometría cuando alguien haga clic en un nuevo punto

1voto

JohnMcG Puntos 5062

Realmente deberías adoptar el hábito del segundo punto de @Swingley de mantener una referencia a tu gráfico y limpiarlo de esa manera, de lo contrario, cuando empieces a tener más de un gráfico en tu página, volverás buscando respuestas sobre cómo eliminar solo el que deseas.

Te sugeriría hacer estos cambios en tu código:

var graphic = null;
 function addToMap(geometry) {
      if(grapic) {
         map.graphics.remove(graphic);
      }

      map.showZoomSlider();
      switch (geometry.type) {
          case "point":
            var symbol = new ...      
                graphic = new esri.Graphic(geometry, symbol);
                 map.graphics.add(graphic);
            }

declara graphic como global y asígnalo cuando lo crees. Verifica si es verdadero y elimínalo si lo es.

0voto

Ron Harlev Puntos 4923

También recibí una respuesta de los Foros de ESRI. Enlace abajo.

Publicación en el Foro de Esri

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X