【问题标题】:How to get Geometry points using Geo API (Sharpmap)如何使用 Geo API (Sharpmap) 获取几何点
【发布时间】:2016-09-07 12:36:20
【问题描述】:

我有一个 EPSG:4326 WGS 84 Shapefile,我已经将它转换为 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,因此是 Row["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;

任何想法/帮助都会让我开心。

【问题讨论】:

    标签: c# asp.net gis sharpmap geoapi


    【解决方案1】:

    在 Sharpmap 讨论的 FObermaier 的帮助下,我自己弄清楚了,here ,我发布它是为了对某人有所帮助。

    问题在于图层的几何变换

    看来转换格式错误

     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,我已经将几何图形转换为 web 墨卡托,并且它起作用了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-08
      • 1970-01-01
      • 2020-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多