Azure移动服务脚本从lat-long保存地理位置



我正在尝试从纬度和经度保存地理数据类型。我的脚本是:

function insert(item, user, request) {
    var incidentesTable = tables.getTable('incidentes');
    var detallesTable = tables.getTable('detalle_incidente');
    var point = "geography::STPointFromText('POINT(" + item.latitud.substring
        + " " + item.longitud.substring +")', 4326)";
        console.log(point);
    var items = {
        descripcion: item.descripcion,
        image: item.image,
        fecha: item.fecha,
        latitud: item.latitud,
        longitud: item.longitud,
        violencia: item.violencia,
        geopoint: point
    }
    incidentesTable.insert(items, {
        success: function()
        {
            var detalle = {incidente_id: items.id}; 
            detallesTable.insert(detalle, {
                success: function(){
                    request.respond(statusCodes.OK, {id: items.id});
                }
            })
        }
    }); 
}

记录点变量,其值为:

geography::STPointFromText('POINT(-33.5359 -70.7802)', 4326)

看起来很好,但它不起作用,它引发了一个错误:

Error in script '/table/incidentes.insert.js'. Error: [Microsoft][SQL Server Native Client 10.0][SQL Server]A .NET Framework error occurred during execution of user-defined routine or aggregate "geography":

有什么想法吗?谢谢

您必须手动构造整个INSERT语句。我在这里找到了一个例子。来自那个帖子:

function insert(item, user, request) { 
    var queryString = "INSERT INTO Place (title, description, location) VALUES (?, ?, geography::STPointFromText('POINT(' + ? + ' '
+ ? + ')', 4326))";         
    mssql.query(queryString, [item.title, item.description, item.longitude.toString(), item.latitude.toString()], { 
                success: function() { 
                     request.respond(statusCodes.OK, {}); 
                } 
          });
}

编辑2:请注意,纬度和经度是向后的;SQL Server使用的"众所周知的文本"格式首先具有经度。

编辑:此外,您引用的错误消息从下一行开始显示完整的异常。如果您在构造SQL语句时出错,请尝试在SSMS或等效程序中执行SQL以获得完整的错误。这里有一个例子:

[SQL Server]A .NET Framework error occurred during execution of user-defined routine or aggregate "geography":  
System.FormatException: 24201: Latitude values must be between -90 and 90 degrees. System.FormatException:
 at Microsoft.SqlServer.Types.GeographyValidator.ValidatePoint(Double x, Double y, Nullable`1 z, Nullable`1 m)
 at Microsoft.SqlServer.Types.Validator.BeginFigure(Double x, Double y, Nullable`1 z, Nullable`1 m)
 at Microsoft.SqlServer.Types.ForwardingGeoDataSink.BeginFigure(Double x, Double y, Nullable`1 z, Nullable`1 m)
 at Microsoft.SqlServer.Types.CoordinateReversingGeoDataSink.BeginFigure(Double x, Double y, Nullable`1 z, Nullable`1 m)
 at Microsoft.SqlServer.Types.WellKnownTextReader.ParsePointText(Boolean parseParentheses)
 at Microsoft.SqlServer.Types.WellKnownTextReader.ParseTaggedText(OpenGisType type)
 at Microsoft.SqlServer.Types.WellKnownTextReader.Read(OpenGisType type, Int32 srid)
 at Microsoft.SqlServer.Types.SqlGeography.GeographyFromText(OpenGisType type, SqlChars taggedText, Int32 srid)
.

最新更新