代码拉取完成,页面将自动刷新
同步操作将从 bouyei/Bouyei.Geo 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
是地理信息空间数据常用格式解析动态库,为方便灵活高效无依赖处理常用的数据文件格式提供支持,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 | NuGet |
---|---|
Bouyei.Geo | |
Bouyei.GeoCore | |
Bystd.Geo |
1、支持常用geometry数据格式解析转换。
2、支持基本geometry算法如相交和面积计算等。
3、精简尽量无依赖第三方库方便可修改可移植。
4、最大限度的简单引用和入手学习使用。
nuget install
面积计算
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);
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());
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。