【发布时间】:2018-08-08 20:58:18
【问题描述】:
我在一个表中有许多空间实体,有一个名为 Boundaries 的 geometry 字段。我想生成一个具有简化形状/几何形状的 GeoJson 文件。
这是我的第一次尝试:
var entities = await db.Entities.ToListAsync();
dynamic geoJson = new ExpandoObject();
geoJson.type = "FeatureCollection";
var features = new List<dynamic>();
foreach (var entity in entities)
{
// simplify (uses SqlGeometry.Reduce)
var simplified = Utilities.Geo.Simplify(entity.Boundaries, tolerance);
// convert to GeoJSON4EntityFramework.Feature with the appropriate Id
var feature = Utilities.Geo.GetFeature(simplified, entity.Id);
features.Add(feature);
}
geoJson.features = features;
return geoJson;
结果的问题在于,由于几何是单独简化的,边界并不常见,如下所示:
第二个尝试是先合并实体,然后简化,然后输出为 GeoJson:
var entities = await db.Entities.ToListAsync();
// bit of a hack to union all the boundaries
DbGeometry allBoundaries = null;
for (var i = 0; i < entities.Count; i++)
{
if (i == 0) allBoundaries = entities[i].Boundaries;
else allBoundaries = allBoundaries.Union(entities[i].Boundaries);
}
// simplify (uses SqlGeometry.Reduce)
var simplified = Utilities.Geo.Simplify(allBoundaries, tolerance);
dynamic geoJson = new ExpandoObject();
geoJson.type = "FeatureCollection";
var features = new List<dynamic>();
// convert to GeoJSON4EntityFramework.Feature with the (in)appropriate Id
var feature = Utilities.Geo.GetFeature(simplified, "ALL");
features.Add(feature);
geoJson.features = features;
return geoJson;
但是,.Union 将实体组合成一个实体,尽管 said here 不会发生这种情况。 (我也没有机会在每个功能上放置一个 Id,所以现在只使用“ALL”)。结果是完全合并的形状:
所以问题是:我如何跨行组合边界,然后简化,然后生成一个特征集合,每个特征都有 正确的 ID,可以在 MapShaper 中完成(如下所示)?
【问题讨论】:
标签: c# .net sql-server geospatial