我正在使用NetTopologySuite作为SqlGeometries的.net核心替代品。它似乎不支持点或坐标中的M值,尽管它有M个属性。例如这段简单的代码:
using NetTopologySuite.Geometries;
using System.Diagnostics;
namespace PlaygroundCore
{
class Program
{
static void Main(string[] args)
{
var p3 = new Point(1, 2, 3);
p3.Y = 8;
p3.M = 1;
var m = p3.M;
Debug.WriteLine(p3);
Debug.WriteLine(p3.M);
Debug.WriteLine(m);
}
}
}输出
POINT (1 8 3)
NaN
NaNM值似乎完全被拒绝了。这是实现中的一个bug吗?有没有办法用M值创建点/坐标/线串?
发布于 2018-12-14 00:28:45
默认坐标序列是CoordinateArraySequence,它当前不支持M值,但看起来DotSpatialAffineCoordinateSequence确实支持M值。要使M值正常工作,我必须执行以下操作
using NetTopologySuite.Geometries;
using NetTopologySuite.Geometries.Implementation;
using System.Diagnostics;
namespace NetTopologyTest
{
class Program
{
static void Main(string[] args)
{
//This sequence has to be initialized with ordinates XYZM. If you construct it
//with just XYZ values, then you can't add M values to it later.
var coordinateSequence = new DotSpatialAffineCoordinateSequence(new[] { 1.0, 2.0 }, new[] { 3.0 }, new[] { 4.0 });
var sequenceFactory = new DotSpatialAffineCoordinateSequenceFactory(GeoAPI.Geometries.Ordinates.XYZM);
var geometryFactory = new GeometryFactory(sequenceFactory);
var p3 = new Point(coordinateSequence, geometryFactory);
p3.Y = 8;
p3.M = 1;
var m = p3.M;
Debug.WriteLine(p3);
Debug.WriteLine(p3.M);
Debug.WriteLine(m);
}
}
}https://stackoverflow.com/questions/53764688
复制相似问题