2 votos

Cómo obtener puntos geométricos mediante la Geo API

Tengo un EPSG:4326 WGS 84 Shapefile y lo he convertido en Sql Spatial Data y soy capaz de renderizar el mapa usando eso con sharpmap 1.1(Anteriormente estaba usando Sharpmap 0.9). Lo que estoy tratando de lograr es cuando hago clic en un polígono generado, el polígono clicado debe ser llenado con un color (Para fines de identificación) Así que soy capaz de obtener el punto donde hago clic, pero la forma de utilizar ese punto y la consulta de todos los puntos dentro de ese polígono para que pueda colorear todo el punto que podría resultar en la coloración de todo el polígono.

El problema es que no sé cómo hacerlo en la versión 1.1 de sharpmap.

Anteriormente, cuando usaba Sharpmap 0.9, utilizaba la línea de abajo para que todos los puntos colorearan la totalidad del polígono.

pointArray.Collection.Add(SharpMap.Geometries.LinearRing.GeomFromWKB((byte[])Row["the_geom"]));

Mis datos provienen de la base de datos Sql Spatial, de ahí la fila["the_geom"].

Hasta ahora he hecho esto (que destaca sólo el punto y la necesidad de añadir los puntos en la colección Geo API)

Collection<GeoAPI.Geometries.IGeometry> geomColl = new Collection<GeoAPI.Geometries.IGeometry>();
        GeoAPI.GeometryServiceProvider.Instance = new NetTopologySuite.NtsGeometryServices();
        GeoAPI.Geometries.IGeometryFactory gf = GeoAPI.GeometryServiceProvider.Instance.CreateGeometryFactory();

        SharpMap.Layers.VectorLayer mySuggestedLayer = new SharpMap.Layers.VectorLayer("Higlight");
        fillcolor = shapeFillColor;

        var factory = GeoAPI.GeometryServiceProvider.Instance.CreateGeometryFactory(_SRID);
        var pointArraySubject = factory.CreateGeometryCollection(null);
        var mySubjectLayer = new SharpMap.Layers.VectorLayer("SubjectIcon");

        DataRow Row = accounts.NewRow();
        for (int i = 0; i < accounts.Rows.Count; i++)
        {
            Row = accounts.Rows[i];
            GeoAPI.Geometries.Coordinate PinPnt = new GeoAPI.Geometries.Coordinate();

            double x = Double.Parse(Row["Xcoord_geo"].ToString()); 
            double y = Double.Parse(Row["Ycoord_geo"].ToString()); 

            PinPnt.X = x;
            PinPnt.Y = y;

           //pointArray.Collection.Add(SharpMap.Geometries.LinearRing.GeomFromWKB((byte[])Row["the_geom"]));
            geomColl.Add(gf.CreatePoint(PinPnt));

  mySuggestedLayer.DataSource = new SharpMap.Data.Providers.GeometryFeatureProvider(geomColl);

        mySuggestedLayer.Style.Fill = new System.Drawing.SolidBrush(fillcolor);       
        mySuggestedLayer.Style.EnableOutline = true;
        mySuggestedLayer.SRID = _SRID;

        _map.Layers.Add(mySuggestedLayer);

        return _map;

Cualquier idea/ayuda me alegrará el día.

2voto

Gaurav Sharma Puntos 1096

Lo descubrí yo mismo con un poco de ayuda de FObermaier de la discusión de Sharpmap es aquí Lo estoy publicando para que pueda ayudar a alguien.

El problema estaba en la transformación de la geometría de la capa Parece que la transformación estaba en un formato incorrecto

GeoAPI.Geometries.Coordinate PinPnt = new GeoAPI.Geometries.Coordinate();
 NetTopologySuite.IO.WKBReader reader = new NetTopologySuite.IO.WKBReader();
 var wkb = (byte[])Row["the_geom"];
 Geometry geom = (Geometry)reader.Read(wkb);
 var p = new GeometryFeatureProvider(geom);
 myLayer.DataSource = p;
 myLayer.Style.Fill = new System.Drawing.SolidBrush(fillcolor);
ProjNet.CoordinateSystems.Transformations.CoordinateTransformationFactory ctFact = new ProjNet.CoordinateSystems.Transformations.CoordinateTransformationFactory();
myLayer.CoordinateTransformation = ctFact.CreateFromCoordinateSystems(ProjNet.CoordinateSystems.GeographicCoordinateSystem.WGS84, ProjNet.CoordinateSystems.ProjectedCoordinateSystem.WebMercator);
myLayer.ReverseCoordinateTransformation = ctFact.CreateFromCoordinateSystems(ProjNet.CoordinateSystems.ProjectedCoordinateSystem.WebMercator, ProjNet.CoordinateSystems.GeographicCoordinateSystem.WGS84);
_map.Layers.Add(myLayer);

En lo anterior

Fila["el_geom"]

tiene una capa que necesita ser resaltada. Usando ProjNet he transformado la geometría a web mercator y ha funcionado.

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