1 Star 0 Fork 41

HeyJobs / Bouyei.Geo

forked from bouyei / Bouyei.Geo 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
README.md 5.88 KB
一键复制 编辑 原始数据 按行查看 历史
bouyei 提交于 2021-08-12 09:27 . update README.md.

bouyei.Geo

介绍


是地理信息空间数据常用格式解析动态库,为方便灵活高效无依赖处理常用的数据文件格式提供支持,shpfile,esri mdb,spatialite,geopackage,ogc(geojson,wkt,wkb等)等的数据格式进行解析和生成。增加支持常用的geometry算法支持,如:高斯正反算,平面面积计算,椭球面积计算等。

Bouyei.Geo 基于.net framework 4.5.1+

Bouyei.GeoCore 基于.net core 2.0+

Bystd.Geo 基于.net standard 2.0+

Package


Package NuGet
Bouyei.Geo NuGet
Bouyei.GeoCore NuGet
Bystd.Geo NuGet

介绍

1、支持常用geometry数据格式解析转换。

2、支持基本geometry算法如相交和面积计算等。

3、精简尽量无依赖第三方库方便可修改可移植。

4、最大限度的简单引用和入手学习使用。

安装教程

  1. vs or vs code

使用说明

  1. nuget install

  2. 面积计算

        string wktstr = "POLYGON ((36379440.1493 2936717.206599999, 36379425.4384 2936710.4860999994, 36379423.0042             2936716.307, 36379437.133 2936723.318499999, 36379440.1493 2936717.206599999))";
    
        GeoPlane plane = new GeoPlane();
        var area = plane.Area(wktstr);
    
        GeoEllipsoid geo = new GeoEllipsoid();
        var ellipse = geo.Area(wktstr);
    
        var dist = geo.Distance(new Coordinate()
        {
            X = 36379440.1493,
            Y = 2936717.206599999
        },
         new Coordinate()
         {
             X = 36379425.4384,
             Y = 2936710.4860999994
         });
    
        var geopoint = new Coordinate()
        {
            X = 36367729.9624,
            Y = 2941185.8308
        };
    
        var bl = plane.XYtoLB(geopoint);
        var bxy = plane.LBtoXY(bl);
  3. esri mdb解析

        string connstr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\LINE.mdb;";
        using (IAdoProvider provider = AdoProvider.CreateProvider(connstr, FactoryType.OleDb))
        {
            var rt = provider.Query<Item>(new Parameter("select top 1 SHAPE as wkb from multipoint"));
            var items = rt.Result;
            List<Geometry> geos = new List<Geometry>();
            foreach (var item in items)
            {
                EsriMdbParser wkbParser = new  EsriMdbParser(item.wkb);
                var geo = wkbParser.FromReader();
    
                //生成wkt
               // string wkt= geo.ToWkt();
    
                geos.Add(geo);
            }
        }

4.geojson 解析

        string file = "C:\\3DCity.json";// AppContext.BaseDirectory + "testfiles\\feature.geojson";//"C:\\3DCity.json";
        string content = File.ReadAllText(file, Encoding.UTF8);
        GeoJsonParser json = new GeoJsonParser(content);

        var geo = json.ToFeatures<attr, JsonMultiPolygon>();

        List<double[]> coords = new List<double[]>();
        coords.Add(new double[] { 1, 2 });
        coords.Add(new double[] { 2, 3 });

        var collection = new FeatureCollection<attr, JsonLineString>()
        {
            name = "册亨县八渡镇",
            features = new Feature<attr, JsonLineString>[] {
             new Feature<attr, JsonLineString>(){
             properties=new attr(){  name="乃言村",code="522327"},
             geometry=new JsonLineString(){
             coordinates=coords
          }
         }
        }
        };
        var str = json.ToWrite<attr, JsonLineString>(collection);

5.spatialite 解析

        string connstr = $"Data Source={sqlite};Version=3;Read Only=True;Pooling=False;Max Pool Size=100;";
        using (var provider = AdoProvider.CreateProvider(connstr, FactoryType.SQLite))
        {
            var rt = provider.Query<SpatiaLiteGeo>(new Parameter("select * from mian"));
            if (rt.IsSuccess() == false)
                throw new Exception(rt.Info);

            SpatiaLiteParser parser = new SpatiaLiteParser();

            foreach (var item in rt.Result)
            {
                //解析spatialite 字节
                var geo = parser.FromReader(item.GEOMETRY);

                //还原为spatialite字节
                var geo_buffer= parser.ToWriter(geo);

                Console.WriteLine(geo.ToWkt());
            }
        }

6.geopackage 解析

        string connstr = $"Data Source={sqlite};Version=3;Read Only=True;Pooling=False;Max Pool Size=100;";
        using (var provider = AdoProvider.CreateProvider(connstr, FactoryType.SQLite))
        {
            var rt = provider.Query<GeoPackageGeo>(new Parameter("select * from xian"));
            if (rt.IsSuccess() == false)
                throw new Exception(rt.Info);

            GeoPackageParser parser = new  GeoPackageParser();

            foreach (var item in rt.Result)
            {
                //还原为geopackage字节
                var geo = parser.FromReader(item.geom);
                Console.WriteLine(geo.ToWkt());

                //还原为geopackage字节
                var geo_buffer = parser.ToWriter(geo);

                //测试writer方法结果
                var g=parser.FromReader(geo_buffer);

                Console.WriteLine(geo.ToWkt());
            }
        }
C#
1
https://gitee.com/heyjobs/Bouyei.Geo.git
git@gitee.com:heyjobs/Bouyei.Geo.git
heyjobs
Bouyei.Geo
Bouyei.Geo
master

搜索帮助