首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何利用Geo (Sharpmap)获取几何点

如何利用Geo (Sharpmap)获取几何点
EN

Stack Overflow用户
提问于 2016-09-07 12:36:20
回答 1查看 2.2K关注 0票数 0

我有一个EPSG:4326 WGS 84 Shapefile,我已经将它转换成Sql数据,我能够使用锐图1.1(以前使用sharpmap 0.9)呈现地图。

我想要实现的是,当我点击一个生成的多边形时,点击的多边形必须填充一个颜色(为了识别目的),这样我就能够得到我点击的点,但是如何使用这个点并查询该多边形内的所有点,这样我就可以对所有可能导致着色所有多边形的点进行着色。

问题是,我不知道如何在锐利地图1.1版中做到这一点。

以前,当我使用Sharpmap 0.9时,我使用了下面的一行来得到所有的点来显示整个多边形的颜色。

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

我的数据来自Sql,因此出现了行“the_geom”。

到目前为止,我已经这样做了。(这只突出了重点,需要将点添加到Geo集合中)

代码语言:javascript
复制
  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;

任何想法/帮助都会使我感到高兴。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-19 10:07:01

在FObermaier of Sharpmap的讨论是这里的帮助下,我自己弄明白了这一点,我把它发了出来,这样可能会对某人有所帮助。

问题在于图层的几何变换。

看来转换的格式不对

代码语言:javascript
复制
 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,它起了作用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39370155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档