Как получить увеличенное местоположение по щелчку мыши в ArcGIS? - PullRequest
1 голос
/ 26 января 2011

Я использую карту ArcGIS для отображения местоположения и позволяю пользователю масштабировать и перетаскивать к месту назначения.Когда они нажимают кнопку Сохранить, я хочу сохранить координаты, и в моем постбеке я хочу показать им то же самое увеличенное место.Я могу сохранить значения экстентов и не знаю, как вернуть их по щелчку мыши.SetExtent не работает для меня.Пожалуйста, смотрите следующее.

 <script type="text/javascript">
  dojo.require("esri.map");
  dojo.require("esri.tasks.locator");

  var map, locator;

  function init() {

      var initExtent = new esri.geometry.Extent({ xmin: -20098296, ymin: -2804413, xmax: 5920428, ymax: 15813776, spatialReference: { wkid: 54032} });
      map = new esri.Map("map", { extent: initExtent });

    var tiledMapServiceLayer = new esri.layers.ArcGISTiledMapServiceLayer("http://maps.dcgis.dc.gov/DCGIS/rest/services/DCGIS_DATA/DC_Basemap_WebMercator/MapServer");
    map.addLayer(tiledMapServiceLayer);

    locator = new esri.tasks.Locator("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Locators/ESRI_Geocode_USA/GeocodeServer");
    dojo.connect(locator, "onAddressToLocationsComplete", showResults);

    dojo.connect(map, "onExtentChange", showExtent);
    dojo.connect(map, "onMouseMove", showCoordinates);
    dojo.connect(map, "onMouseDrag", showCoordinates);


//    setExtent(map, document.getElementById('extent').value);

}
function showCoordinates(evt) {
    //get mapPoint from event
    var mp = evt.mapPoint;
    //display mouse coordinatesLabel1
    dojo.byId("Label1").innerHTML = mp.x + ", " + mp.y;

}


function refreshMap() {       

    setExtent(map, document.getElementById('extent').value);
}

function setExtent(map,ext) {
    //        var startExtent = new esri.geometry.Extent(ext,
    //          new esri.SpatialReference({ wkid: 54032 }));
   debugger
    var coordinate = ext.split(" ");
    var xmin=coordinate[1];        
    var ymin=coordinate[3];
    var xmax=coordinate[5];
    var ymax = coordinate[7];
    var newExtent = new esri.geometry.Extent();
    newExtent.xmin = xmin;
    newExtent.ymin = ymin;
    newExtent.xmax = xmax;
    newExtent.ymax = ymax;
    newExtent.spatialReference = new esri.SpatialReference({ wkid: 31466 });
    map.setExtent(newExtent);
    dojo.connect(locator, "onAddressToLocationsComplete", showResults);
}
function showExtent(ext) {

      var s = "";
      s = "XMin: " + ext.xmin + 
   " YMin: " + ext.ymin +
   " XMax: " + ext.xmax + 
   " YMax: " + ext.ymax;
      var spatialref = ext.spatialReference.wkid;
   dojo.byId("onExtentChangeInfo").innerHTML = s;
   document.getElementById('extent').value = s;          
  }

  function locate() {
    map.graphics.clear();
    var add = dojo.byId("address").value.split(",");
    var address = {
      Address : add[0],
      City: add[1],
      State: add[2],
      Zip: add[3]
    };
    locator.addressToLocations(address,["Loc_name"]);
  }

  function showResults(candidates) {
    var candidate;
    var symbol = new esri.symbol.SimpleMarkerSymbol();
    var infoTemplate = new esri.InfoTemplate("Location", "Address: ${address}<br />Score: ${score}<br />Source locator: ${locatorName}");

    symbol.setStyle(esri.symbol.SimpleMarkerSymbol.STYLE_CIRCLE);
    symbol.setColor(new dojo.Color([255,0,0,0.75]));

    var points =  new esri.geometry.Multipoint(map.spatialReference);

    for (var i=0, il=candidates.length; i<il; i++) {
      candidate = candidates[i];
      if (candidate.score > 70) {
        var attributes = { address: candidate.address, score:candidate.score, locatorName:candidate.attributes.Loc_name };
        var geom = esri.geometry.geographicToWebMercator(candidate.location);
        var graphic = new esri.Graphic(geom, symbol, attributes, infoTemplate);
        map.graphics.add(graphic);
        map.graphics.add(new esri.Graphic(geom, new esri.symbol.TextSymbol(attributes.address).setOffset(0, 8)));
        points.addPoint(geom);
      }
  }
   // map.centerAndZoom(points, 6);

    map.setExtent(points.getExtent().expand(1));
  }

  dojo.addOnLoad(init);
</script>

1 Ответ

0 голосов
/ 28 июля 2011

В моем приложении я также вычисляю и устанавливаю Экстент на карте.И это работает, но в моем случае я работаю не с Arcgis Map, а с ArcMap, закодированным на C #, и из-за этого в моем примере кода методы / классы выглядят немного иначе (например, я использую ESRI.ArcGIS.Carto.IActiveView из IMxDocument вместо класса esri.map для получения / отправки экстентов), но выглядит как похожая процедура, так что, возможно, это будет работать и для вас.такое обновление вида / карты?Соответствующая часть кода выглядит следующим образом в моем коде:

// zoom
activeView.Extent = envelope.Envelope;  // activeView.Extent is of class IEnvelope 
activeView.Refresh();

, поэтому, может быть, вы можете использовать map.refresh () или что-то подобное?

...