【问题标题】:.NET Core Entity Framework Saving Spatial Geography Data Type SQL Server.NET Core Entity Framework 保存空间地理数据类型 SQL Server
【发布时间】:2019-05-10 07:29:18
【问题描述】:

我使用 Entity Core 2.2 开发了一个 ASP.NET Core 应用程序。此应用程序保存位置边界。

我正在使用 google.maps.drawing.DrawingManager 允许用户创建一个多边形,以便使用地理数据类型将边界保存到 SQL 服务器数据库。我将来需要检查特定的地理点是在这个多边形内部还是外部。

以下是调用 .NET Web API 的代码

function onPolygonComplete(e) {
    if (!cancelDrawingShape) {
        var Path= e.getPath();


        var thisData = {
            sPolygon: JSON.stringify(path.getArray())            };

        $.ajax({
            url: rootPath + 'Location/AddPolygon',
            data: thisData,
            type: 'POST',
            success: function (res) {
                e.setMap(null);
                removeAllFeatures();
                clientGeoFences = res.ClientGeoFences;
                refreshData(false);
            },
            failure: function (res) {

            }
        });

调用的 API

public async Task<IActionResult> AddPolygon([FromForm] string sPolygon)
{
}

由于 Entity Core I 不支持 Geography 数据类型,因此按照建议安装了 NetTopologySuite (NTS)

https://docs.microsoft.com/en-us/ef/core/modeling/spatial

在搭建我的模型类之后

具有以下地理数据类型的属性

public IGeometry StoreFence { get; set; }

我正在努力寻找如何使用 NetTopologySuite 类设置 StoreFence 属性以将多边形保存到数据库的示例。

使用 Entity Core/NetTopologySuite 将 google.maps.drawing.DrawingManager 多边形保存到数据库中的 SQL Server 地理类型列的任何示例都会很棒。

【问题讨论】:

    标签: .net asp.net-core .net-core


    【解决方案1】:

    在安装NetTopologySuite 并使用Geography 列搭建数据库后,我得到了解决方案。


    我的模型有:

    public IGeometry BoundsFence { get; set; }
    

    作为Geography 类型列的属性。


    下面的代码会将此属性设置为 WKT (Well-Known Text) 多边形:

    IPolygon storeFence = (IPolygon)new WKTReader().Read(wktPolygon);
    
    //Check if the orientation is not counter clock wise and reverse.
    if (!storeFence.Shell.IsCCW)
        storeFence = (IPolygon)storeFence.Reverse();
    
    storeFence.SRID = 4326;
    store.StoreFence = storeFence;
    
    await _dbContext.SaveChangesAsync();
    

    【讨论】:

    • 我正在处理类似的事情。但是,当我添加库和“使用”时,它仍然告诉我 IGeometry 不是有效的接口。我错过了什么吗?
    • @Sean:不。忘记接口,只使用 Polygon 和 Geometry 类型。
    • @ZPat 感谢您为您的解决方案提供所有代码。我正在将 EF6 项目转换为 EF Core,并且一直在尝试找出如何确定 poly 是否为 CCW,而您的示例刚刚为我解决了这个问题,非常感谢!
    猜你喜欢
    • 2017-10-19
    • 2017-12-06
    • 2020-09-10
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多