1 votos

¿Cómo puedo obtener la forma en una coordenada específica utilizando NTS?

Estoy usando la librería .NET NTS y tengo el código junto para cargar un archivo KML. Esto me da una instancia de IGeometry .

Junto con estos datos que se cargan, también tengo coordenadas que me gustaría mirar hacia arriba en contra de ella para ver qué formas están en ese punto (por lo general sólo será uno). Después de obtener la(s) forma(s), el KML que tengo también incluye alguna información de características adicionales de la que me gustaría poder obtener los valores.

Mi comprensión de estas API es algo limitada y no he podido encontrar ningún ejemplo completo de lo que necesito hacer una vez que tengo los datos cargados.

var kml = await stream.ReadToEndAsync();
var reader = new GMLReader();

geometry = reader.Read(kml);

// ...now what?

1voto

En tu caso, puedes probar la "intersección" entre la forma y el punto de esta manera:

IGeometry shape = ...;
IPoint point = ...;
if (shape.Intersects(point))
{
    // Do something      
}

O tal vez usted podría utilizar 'dentro de' en lugar de 'intersecta' para probar si el punto es whithin la forma, pero no en el límite.

Lea sobre la Modelo topológico DE-9IM que utilizan la mayoría de las bibliotecas SIG, para conocer el predicado espacial (o matriz personalizada) que necesita en cada situación.

EDITAR:

Para el caso en que tenga cientos o miles de polígonos que probar, debe utilizar un índice espacial.

List<IGeometry> shapes = ...;
IPoint point = ...;

// Builds the index
STRtree<IGeometry> index = new STRtree<IGeometry>();
foreach (IGeometry shape in shapes)
    index.Insert(shape.EnvelopeInternal, shape);
index.Build();

// Makes the query. The 'nearShapes' are the shapes whose envelopes contains the point.
IList<IGeometry> nearShapes = index.Query(point.EnvelopeInternal);
// Now the app only have to test the intersection against a few shapes.
foreach (IGeometry shape in nearShapes)
{
    if (shape.Intersects(point))
    {
        // Do whatever
    }
}

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