7 votos

Dibujar un punto con la API Javascript de ArcGIS

Actualmente estoy intentando dibujar un punto con la API Javascript de ArcGIS.

Más o menos como este ejemplo, http://help.arcgis.com/en/webapi/javascript/arcgis/demos/toolbar/toolbar_draw.html , excepto que el punto no se dibujará con el ratón, sino desde un objeto javascript.

Si miramos el código, vemos que se pasa un objeto/array de geometría en la función.

function addToMap(geometry) {
    toolbar.deactivate();
    map.showZoomSlider();

    var symbol = new esri.symbol.SimpleMarkerSymbol(esri.symbol.SimpleMarkerSymbol.STYLE_SQUARE, 10, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([255,0,0]), 1), new dojo.Color([0,255,0,0.25]));

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

Si alguien pudiera escribir la estructura de ese objeto, y un método para dibujar el punto (como un botón, con un evento onclick, que contenga coordenadas xy fijas)

Dumping geometry se ve así http://pastebin.com/P9wfL36b (¡ay!)

Este código se utilizará en un experimento de seguimiento por GPS, donde sacaré la posición actual de una base de datos cada 20 segundos más o menos. (los detalles no serán cubiertos en este post)

Pregunta extra: ¿Cómo convierto las coordenadas long/lat a xy de la muestra?

Utilizo la zona UTM 29N, wkid: 32629

11voto

Daniel Broekman Puntos 1951

Añadir un punto a partir de un clic de botón puede ser tan sencillo como:

dojo.connect(dojo.byId('pointButton'), 'onclick', function() {
  map.graphics.add(new esri.Graphic(
    // Point coordinates are 0, 0
    new esri.geometry.Point(0, 0, map.spatialReference),
    new esri.symbol.SimpleMarkerSymbol()
  ));
});

Y el nodo pointButton es:

<button id="pointButton">Click to add a point.</button>

Añadir un punto cuando se hace clic en el mapa también es bastante sencillo:

dojo.connect(map, 'onClick', function(evt) {
  map.graphics.add(new esri.Graphic(
    evt.mapPoint,
    new esri.symbol.SimpleMarkerSymbol()
  ));
});

Ejemplo en vivo mostrando ambos aquí: http://jsfiddle.net/swingley/auyHf/

En cuanto a la conversión de lat, long a otro sistema de coordenadas: si estás convirtiendo a o desde lat, long a web mercator, hay métodos del lado del cliente disponibles para hacerlo: esri.geometry.geographicToWebMercator y esri.geometry.WebMercatorToGeographic . Si necesita convertir de lat, long a otra cosa que no sea web mercator, entonces el método de proyecto del servicio de geometría es el camino a seguir.

0 votos

Muchas gracias. Dibujar el punto funciona de maravilla. En la conversión, he estado probando el geometry service's project method . El mapa que estoy utilizando está basado en la zona UTM 29N, wkid 32629. Utilizando el servicio de geommetría sólo me da "X" = NaN, "Y = NaN" . ¿Alguna idea? He probado exactamente el mismo código en el mapa del mundo bit.ly/qxPfVm (wkid:102100), funcionó bien.

0 votos

Funciona con 32629 o 102100. He publicado un ejemplo a una pregunta similar hace un tiempo aquí: forums.arcgis.com/threads/

0 votos

Sí, veo que funciona con 32629 y 102100, pero ¿qué tal la conversión de 4326 a 32629? Sigo recibiendo NaN valores

2voto

Jordan Arron Puntos 20994

Cada uno de los tipos de geometría tiene un constructor que construye un nuevo objeto de geometría a partir de JSON -- por ejemplo: Punto . Hay un ejemplo de un objeto Point JSON en esa página.

Para su segunda pregunta, el enfoque recomendado es utilizar un Servicio de Geometría para reproyectar el punto desde el SRID 4326 (long/lat) al sistema de coordenadas nativo del mapa. Véase aquí para un ejemplo.

0 votos

Gracias, se ve bien. Lo intentaré, y volveré con más preguntas o con una marca de verificación :-)

0 votos

Si utiliza la API 1.4 o posterior, ¿por qué no utiliza el método esri.geometry.geographicToWebMercator(geometry) en lugar de llamar al servicio de geometría?

0 votos

@kenbuja - No sabía que tenían eso, ¡gracias! Estoy de acuerdo, eso definitivamente tendría más sentido si usted está convirtiendo entre geográfico y Web Mercator.

1voto

Sork Puntos 26

Parece que tu problema específico es que tienes una coordenada lat/long y necesitas colocarla en el mapa como geometría. Utiliza el esri.Graphic(geometry, symbol, attributes, infoTemplate) para hacer su gráfico y ponerlo en el mapa.
Si sigues el ejemplo de referencia de la API, la creación de un gráfico de puntos a partir de una lat/long es bastante sencilla.
http://help.arcgis.com/en/webapi/javascript/arcgis/help/jsapi/graphic.htm#GraphicConst1
Pero, si estás sacando el punto de una base de datos usando un servicio web, entonces podría ser más sencillo usar el ejemplo json justo debajo. Haga que el servicio web construya el punto json en lugar de construirlo del lado del cliente. Si necesitas modificar alguna parte del json después de que sea devuelto por el servicio, puedes hacerlo del lado del cliente en el json antes de pasarlo al constructor del gráfico.

var myPoint = {
    "geometry":{
        "x":-104.4140625,
        "y":69.2578125,
        "spatialReference":{"wkid":4326}
    },
    "attributes":{
        "XCoord":-104.4140625,
        "YCoord":69.2578125,
        "Plant":"Mesa Mint"
    },
    "symbol":{
        "color":[255,0,0,128],
        "size":12,
        "angle":0,
        "xoffset":0,
        "yoffset":0,
        "type":"esriSMS",
        "style":"esriSMSSquare",
        "outline":{
            "color":[0,0,0,255],
            "width":1,
            "type":"esriSLS",
            "style":"esriSLSSolid"
        }
    },
    "infoTemplate":{
        "title":"Vernal Pool Locations",
        "content":"Latitude: ${YCoord}<br/>Longitude: ${XCoord}<br/>Plant Name:${Plant}"
    }
};
var gra= new esri.Graphic(myPoint);

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