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).
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.