6 votos

Zoom a la selección

Estoy tratando de crear una aplicación, en la que quiero hacer zoom a las características seleccionadas. Básicamente, quiero hacer zoom a la medida de un punto o polígono seleccionado.

0 votos

Estoy tratando de hacer esto en javascript.

6voto

Rob Puntos 1993

Intenta que esto te funcione

function ZoomToSelection() {
      graphics = new esri.Graphic();
      var taxLotExtent;
  graphics = featureLayer.getSelectedFeatures();
      taxLotExtent = graphics[0].geometry.getExtent();
  map.setExtent(taxLotExtent);
  }

0 votos

El anterior es para una sola característica para el uso de múltiples características esri.geometry.Extent(pasar la extensión individual de la geometría iterando) . Obtendrá el resultado de la extensión de las fetuas seleccionadas.

0 votos

No se puede iterar, ya que entonces se hará un zoom a cada característica individual sucesivamente. Tiene que fusionar todas las extensiones y luego hacer zoom a la extensión resultante.

2voto

theman_on_osx Puntos 192

Sospecho que el java no está lejos de esto (esto es C#) pero los principios son los mismos. Consultar las extensiones de la selección, unirlas, multiplicar el resultado por un factor y mostrarlo.

// passing in ActiveView 
// passing in targetLayer
// ZOOM_FACTOR = 1.5 
// ensure we have selected features
IFeatureSelection featureSelection = targetLayer as IFeatureSelection;
if (featureSelection == null) return;

ISelectionSet selectionSet = featureSelection.SelectionSet;

using (ComReleaser comReleaser = new ComReleaser())
{
    // search for each selection
    ICursor cursor;
    selectionSet.Search(null, true, out cursor);
    comReleaser.ManageLifetime(cursor);

    // build an envelope containing a union of the selections
    IFeatureCursor featureCursor = cursor as IFeatureCursor;
    IFeature feature;
    IEnvelope envelope = new EnvelopeClass();
    while ((feature = featureCursor.NextFeature()) != null)
    {
        IGeometry geometry = feature.Shape;
        IEnvelope featureExtent = geometry.Envelope;
        envelope.Union(featureExtent);
    }

    if (!envelope.IsEmpty)
    {
        // set the extent
        envelope.Expand(ZOOM_FACTOR, ZOOM_FACTOR, true);
        view.Extent = envelope;
        view.Refresh();
    }
}

1voto

jevakallio Puntos 15003

¿Por qué no utilizar graphicUtils.graphicsExtent

Basta con pasar la matriz de gráficos y obtendrá la extensión.

1voto

nathan Puntos 260

Debería ser capaz de hacer esto llamando a getSelectedFeatures() en su capa de características (gran suposición de que se trata de una capa de gráficos o de características, ¿estoy en lo cierto?) y luego iterar a través de la matriz devuelta de objetos gráficos. Si las características son polígonos, entonces la propiedad de geometría tendrá un método getExtent(). Sólo hay que tener en cuenta los valores extremos de lat/lng y establecer la extensión del mapa a estos una vez que haya comprobado todas las características seleccionadas. Estoy un poco confundido por su mención de "punto y polígono" porque pensé que las clases de características tenían que ser de un tipo o de otro. ¿Está intentando ampliar un grupo de características seleccionadas de dos conjuntos diferentes? Esto sería un poco más complicado, pero debería ser posible con un método similar.

0voto

iSee Puntos 101

Para hacer zoom en una característica particular, se necesita una geometría de la característica.

var geometry = selectedFeature.geometry;
zoomToFeature: function (geometry) {
  this.map.setExtent(geometry.getExtent());
};

Documentación de Esri sobre la extensión

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