1 votos

Añadir varias direcciones - ArcGIS Javascript

Estoy intentando utilizar la API de ArcGIS Javascript para añadir a un mapa todas las órdenes de servicio que están abiertas. Puedo conseguir que esto funcione con una sola dirección, pero no está funcionando cuando trato de bucle a través de una lista que contiene direcciones. No estoy muy familiarizado con el uso de javascript, pero no veo nada malo en el código actual.

Ya he mirado "Geocodificación de múltiples direcciones utilizando la API de ArcGIS JS", pero no me ha funcionado.

ESRIMapView (cshtml)- Contiene el código para mapear todas las órdenes de servicio:

 window.onload = function locateAll() {
               map.graphics.clear();

               var addresses = Viewbag.Addresses;
               var addressCount = Viewbag.Addresses.length;

               for (i = 0; i < addressCount; i++)
               {
                   locator.outSpatialReference = map.spatialReference;
                   var options = {
                       address: addresses[i],
                       outFields: ["Loc_name"]
                   }
                   locator.addressToLocations(options);
               }
           }

HomeController.cs:

 public ActionResult ESRIMapView(string address)
        {
            ViewBag.Message = "Your contact page.";
            MFSRepository _repository = new MFSRepository();

            List<ServiceOrder> orders = new List<ServiceOrder>();
            orders = _repository.GetServiceOrderAddresses();

            List<string> addresses = new List<string>();

            foreach (ServiceOrder order in orders)
            {
                addresses.Add(order.StreetNumber + " " + order.StreetName + " " + order.City + " " + order.State + " " + order.Zip);
            }

            ViewBag.Addresses = addresses;
            ViewBag.Address = address;

            return View();
        }

Cuando paso por el código en el controlador, todo se está configurando correctamente. También sé que está recibiendo la lista de direcciones del controlador porque pude poner la primera de la lista en un cuadro de texto a través de ese ESRIMapView. Nada se está trazando en el mapa, y no estoy recibiendo ningún error. Mi conjetura es que mi sintaxis para el bucle es probablemente incorrecto.

2voto

A continuación, una demostración muy sencilla de este concepto: https://dotnetfiddle.net/KhMIxV

Lo que vas a querer hacer es que tu array en el controlador pueda ser traducido a un array en javascript. Este proceso se facilita a través de la serialización. La forma más común (y que debería estar disponible para su controlador inherentemente) es a través de JSON.Net, también conocido como NewtonSoft.Json.

Cambia la acción-resultado de tu controlador por esto

public ActionResult ESRIMapView(string address)
{
    ViewBag.Message = "Your contact page.";
    MFSRepository _repository = new MFSRepository();

    List<ServiceOrder> orders = new List<ServiceOrder>();
    orders = _repository.GetServiceOrderAddresses();

    List<string> addresses = new List<string>();

    foreach (ServiceOrder order in orders)
    {
        addresses.Add(order.StreetNumber + " " + order.StreetName + " " + order.City + " " + order.State + " " + order.Zip);
    }

    ViewBag.Addresses = JsonConvert.SerializeObject(addresses);
    ViewBag.Address = address;

    return View();
}

Y luego consumirlo en su vista así

var addresses = @Html.Raw(ViewBag.Addresses);
var addressCount = addresses.length;

window.onload = function locateAll() {
    map.graphics.clear();

    for (i = 0; i < addressCount; i++)
    {
        locator.outSpatialReference = map.spatialReference;
        var options = {
            address: addresses[i],
            outFields: ["Loc_name"]
        }
        locator.addressToLocations(options);
    }
};

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