【发布时间】:2015-11-25 15:49:45
【问题描述】:
我正在尝试对从表中寻址的地址进行地理编码,并在此处找到了一个很好的示例: How to store geocoded address information into the database
或此代码
using System.Net;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Web;
using System.Data.SqlClient;
using Microsoft.SqlServer.Types;
using System.ServiceModel.Web;
namespace ProSQLSpatial
{
public partial class GoogleMaps
{
/// <summary>
///
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
public static GeoResponse GetGeoCodedResults(string address)
{
string url = string.Format(
"http://maps.google.com/maps/api/geocode/json?address={0}®ion=dk&sensor=false"
);
var request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(GeoResponse));
var res = (GeoResponse)serializer.ReadObject(request.GetResponse().GetResponseStream());
return res;
}
}
[DataContract]
public class GeoResponse
{
[DataMember(Name = "status")]
public char Status { get; set; }
[DataMember(Name = "results")]
public CResult[] Results { get; set; }
[DataContract]
public class CResult
{
[DataMember(Name = "geometry")]
public CGeometry Geometry { get; set; }
[DataContract]
public class CGeometry
{
[DataMember(Name = "location")]
public CLocation Location { get; set; }
[DataContract]
public class CLocation
{
[DataMember(Name = "lat")]
public double Lat { get; set; }
[DataMember(Name = "lng")]
public double Lng { get; set; }
}
}
}
public GeoResponse()
{ }
}
我在 SQL Server 中创建了程序集,并尝试通过以下方式创建基于程序集的函数:
CREATE FUNCTION dbo.Geocode
(@Address nvarchar(4000))
RETURNS nvarchar(4000)
AS EXTERNAL NAME [test2].[ProSQLSpatial.GoogleMaps].[GetGeoCodedResults];
GO
但我收到错误消息
消息 6551,级别 16,状态 2,过程地理编码,第 1 行
“Geocode”的 CREATE FUNCTION 失败,因为返回值的 T-SQL 和 CLR 类型不匹配。
我已经完成了搜索,但我无法弄清楚。我尝试过更改数据类型,但仍然收到相同的消息。任何帮助都会让我很开心。谢谢
【问题讨论】:
-
您的 crl 函数返回一个
GeoResponse类型的对象。是否可以只为lat和lng值返回/使用参数? -
不确定。我会做一些挖掘工作。谢谢
标签: c# sql sql-server geocode