Как получить точки геометрии с помощью Geo API (Sharpmap)

У меня есть шейп-файл EPSG: 4326 WGS 84, и я преобразовал его в пространственные данные Sql. Я могу визуализировать карту, используя его с помощью sharpmap 1.1 (ранее использовал Sharpmap 0.9).

То, что я пытаюсь достичь, - это когда я нажимаю на сгенерированный многоугольник, щелкнувший многоугольник должен быть заполнен цветом (для целей идентификации) .Таким образом, я могу получить точку, в которой я щелкаю, но как использовать эту точку и запрос для всей точки внутри этого многоугольника, чтобы я мог раскрасить всю точку, что может привести к окрашиванию всего многоугольника.

Проблема в том, что я не знаю, как это сделать в Sharpmap версии 1.1.

Раньше, когда я использовал Sharpmap 0.9, я использовал строку ниже, чтобы все точки раскрашивали весь многоугольник.

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

Мои данные взяты из Sql Spatial DB, следовательно, строка ["the_geom"].

Пока что я это сделал (что выделяет только точку, и нужно добавить точки в коллекцию 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;

Любая идея / помощь сделают мой день.


person Rupesh Mankavil    schedule 07.09.2016    source источник


Ответы (1)


Я понял это сам с помощью Фобермайера из Sharpmap, обсуждение находится здесь, я публикую его так что это может кому-то помочь.

Проблема была с преобразованием геометрии слоя

Кажется, преобразование было в неправильном формате

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

В приведенном выше

Строка ["the_geom"]

есть слой, который нужно выделить. Используя ProjNet, я преобразовал геометрию в веб-меркатор, и это сработало.

person Rupesh Mankavil    schedule 19.09.2016