我将坐标作为两个双倍值,纬度和经度。我需要以某种方式将它们转换为SQL-Server Geography数据类型。
我在C#中有一个实际的例子,但我不知道如何在Delphi中做到这一点。
目的是检索在我的示例中访问SqlGeographyBinary
时获得的相同数据,以将其保存在文本文件中。
public Double Latitude { get; set; }
public Double Longitude { get; set; }
private String sqlGeographyBinary = null;
public String SqlGeographyBinary
{
get
{
if (String.IsNullOrWhiteSpace(sqlGeographyBinary))
{
using (var stream = new MemoryStream())
{
using (var writer = new BinaryWriter(stream))
{
var sqlPoint = SqlGeography.Point(Latitude, Longitude, SRID);
sqlPoint.Write(writer);
stream.Position = 0;
var buffer = new Byte[stream.Length];
stream.Read(buffer, 0, (int)stream.Length);
sqlGeographyBinary = BitConverter.ToString(buffer).Replace("-", "");
writer.Close();
}
}
}
return sqlGeographyBinary;
}
}
答案 0 :(得分:1)
SqlGeography
类型是Delphi本身不支持的.NET类型,因此没有直接的方法可以执行您想要的操作而无需将C#函数导出到DLL或让MSSQL服务器执行此操作为你生成类型。
对于后者,作为一种解决方案,这是完全未经测试的,因为我没有数据库可以尝试这一点,但是从the documentation来看,听起来SQL Server可以为您构建和解释类型。即:
insert into MyTable (geographyCol) values (someParam)
您可以将参数定义为TDBXDataTypes.AnsiStringType
,如:
someParam --> 'SqlGeography.Point(Latitude, Longitude, SRID)'
同样,阅读该领域:
Select geographyCol.ToString() from MyTable
将返回SqlGeograhpy
实例的Open Geospatial Consortium (OGC) Well-Known Text (WKT)表示。我猜,你也可以以类似的方式归还任何其他财产。