2 votos

IFeatureIndex2.Index Problemas de rendimiento ArcObjects

Tengo un gran número de características de polígono en una clase de entidad de geodatabase personal. Me gustaría encontrar el polígono más cercano para varios puntos dentro de un área de interés (el área roja en la figura). introduce aquí la descripción de la imagen

Encontré que IIndexQuery2.NearestFeature es una buena opción ya que 'Encuentra la entidad más cercana en el índice a la forma de entrada' según la documentación.

Actualmente, no veo ninguna forma de utilizar el índice espacial existente en la geodatabase a través de arcobjects. La única opción que encontré es crear un índice temporal usando el método IFeatureIndex2.Index.

Mis problemas están con el método IFeatureIndex2.Index. Solo necesito indexar un grupo particular de características. Hay una opción IFeatureIndex2.FeatureCursor que supuestamente reduce el número de características indexadas. Así que pasé un featureCursor del área especificada a IFeatureIndex2. Pero misteriosamente, esta opción solo aumenta el tiempo necesario para la creación del índice.

También el parámetro Envelope en el método Index (mostrado abajo) no parece tener un efecto en el rendimiento.

public void Index (ITrackCancel pTrackCancel, IEnvelope pQueryingGeometryFullExtent));

No importa si se pasa null o un envelope válido del Área a este método como parámetro. Toma el mismo tiempo para completar.

Lo probé en una clase de entidad de polígono con alrededor de 100,000 características. El Método de Índice tomó 4 segundos. El Método de Índice con FeatureCursor tomó 12 segundos.

¿Puede alguien sugerir si estoy usando los métodos de la manera correcta? Es posible que tenga que ejecutar esto en un SDE con millones de características. Así que estoy buscando indexar solo el área particular para que las consultas de entidad más cercana se ejecuten más rápido.

3voto

saint_groceon Puntos 2696

¿Tiene una distancia límite para la búsqueda de la característica más cercana? Si es así, podría considerar usar ISpatialCacheManager3 en su lugar. He escuchado que algunas personas han tenido problemas con IFeatureIndex2. Una vez que haya llamado a FillCache, debería poder devolver rápidamente las características con IFeatureClass.Search utilizando un pequeño sobre de búsqueda cuyo ancho y alto es el tamaño de su distancia límite y luego recorrer cada característica para encontrar cuál es la más cercana.

2voto

helpplease Puntos 4

He leído en algún lugar que si se establecen los subcampos en el Queryfilter para el cursor de entidad, y solo contienen el campo OID y el campo de forma, debería mejorar la generación del índice.

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