6 votos

Crear polilíneas a partir de matrices de puntos

Permítanme describir la configuración de los datos. Una línea ha sido siempre como un conjunto de pares de coordenadas, uno para cada vértice. Esta matriz es variable en tamaño, en cualquier lugar de 2 a 200 pares de coordenadas en cada línea. Lo que estoy tratando de envolver mi mente alrededor es la mejor manera de crear estas líneas. Arcpy y ArcObjects ambas son opciones viables, pero ArcObjects es preferido debido a su velocidad (en general).

Tengo una lluvia de ideas un par de métodos, pero se quedan cortos, por alguna razón u otra:

1) yo podría utilizar la Polilínea de la clase con arcpy para crear las polilíneas y, a continuación, las Funciones de Copia, pero la geometría resultante no tendría la atribución necesaria para identificar puntos.

2) yo podría usar a XY A la Línea, pero esto sólo funciona con un par de punto, y el que necesita algo mucho más robusta.

El largo y corto es que necesito un método que puede crear una polilínea a partir de matrices y mantener un esquema de datos que he creado en una tabla. Una idea que tengo es crear dijo tabla y esquema, y entonces de alguna manera crear la polilínea y copiar su shape de la propiedad a la tabla de salida, la migración sobre el ID y cualquier otra atribución que se necesita. Cómo se puede ir sobre la creación de la polilínea de la forma de la propiedad sin tener que recurrir a un intermediario shapefile? O, si no hay un método mejor que viene a la mente, por favor, comparte conmigo.

La actualización de Este código se parece a la obra!

IFeatureClass fClass = gpUtil.OpenFeatureClassFromString(path);
IFeatureCursor cursor = fClass.Insert(true);
IFeatureBuffer buffer = fClass.CreateFeatureBuffer();

<snip...>

string[] nodearray = a.Split(';');
foreach (string i in nodearray)
{
    query.WhereClause = "\"PNT_ID\" = '" + i+"'";
    Console.WriteLine(query.WhereClause.ToString());
    ICursor search = table.Search(query, false);
    IRow row = search.NextRow();
    float x = float.Parse(row.get_Value(2).ToString());
    float y = float.Parse(row.get_Value(3).ToString());
    int id = int.Parse(row.get_Value(1).ToString());
    point.X = x;
    point.Y = y;
    point.ID = id;
    point.SpatialReference = sRef;
    pCollection.AddPoint(point, ref Missing, ref Missing);

}
IGeometry5 polygeo = (IGeometry5)pCollection;
buffer.set_Value(1, polygeo);
buffer.set_Value(2, wayid);
cursor.InsertFeature(buffer);

4voto

user2013 Puntos 2301

Parece que tengo. He creado un de la clase y utiliza para rellenar un instanciada como un . Entonces yo echo la colección a y que como la `` para la fila en mi clase de función de salida, copia de la identificación con un tampón.

Tengo mi cabeza en algunos círculos con dos entradas, pero parece que funciona bien.

0voto

Jon Galloway Puntos 28243

Yo estoy luchando con un esquema similar aquí.

Tengo que identificar líneas y sus vértices y mantener una Línea tiene el Vértice de la relación entre ellos. Creo que me estoy tratando con una mayor exigencia (estoy ni seguro), pero estamos implementando esta como las vistas y de la clase de entidad de extensiones (en gran parte para mantener nuestro "segmento" de las tablas)

esquema básico es

Tabla De La Línea De Nombre (PK)

Tabla De Puntos De Nombre (PK)

LineSegmentTable LineName (FK) ID El fin de FromPoint (FK) Punto (FK)

LineView Nombre La geometría

En su caso, un "vértice" de la tabla puede ser más adecuada. Que se ejecutan en Oracle, tambié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