2013-03-01 39 views
7

tôi có dịch vụ WCF REST có chứa đoạn mã sauDbGeography.PointFromText 24.141: Một số dự kiến ​​sẽ ở vị trí

var geo = DbGeography.PointFromText(string.Format("POINT({0} {1})", longitude, latitude), DbGeography.DefaultCoordinateSystemId); 

Đơn vị kiểm tra hoạt động tốt, nhưng khi tôi gọi mã này từ khách hàng hoặc HTTP debuder cung cấp bất kỳ giá trị của vĩ độ và kinh độ exept số không, nó không thành công với ngoại lệ:

"24141: A number is expected at position X of the input. The input has ,XXXXXX." 
    at Microsoft.SqlServer.Types.WellKnownTextReader.RecognizeDouble() 
    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.ParseText(OpenGisType type, SqlChars taggedText, Int32 srid) 
    at Microsoft.SqlServer.Types.SqlGeography.GeographyFromText(OpenGisType type, SqlChars taggedText, Int32 srid) 
    at Microsoft.SqlServer.Types.SqlGeography.STPointFromText(SqlChars pointTaggedText, Int32 srid) 

vĩ độ và kinh tuyến ví dụ
lat: 37,58336895 dài: -122,40549454 01.238. lat: 37.38931302 dài: -122.16207476

Tôi đã sử dụng Microsoft.SqlServer.Types được tham chiếu từ thư mục cài đặt SQLServer và SqlGeography.Point để làm việc với dữ liệu spartial ở phía mã. Bây giờ tôi muốn sử dụng các tính năng EF 5 trực tiếp mà không cần tham chiếu đến Microsoft.SqlServer.Types. Nó không có và không có tham chiếu này.

Bất kỳ ý tưởng nào là sai?

.NET 4.5 được cài đặt, phiên bản SQL Server là Microsoft SQL Server 2008 (SP3) - 10.0.5500.0 (Intel X86) ngày 22 tháng 9 năm 2011 00:28:06 Bản quyền (c) 1988-2008 Microsoft Corporation Standard Edition trên Windows NT 6.1 (Build 7601: Service Pack 1)

+3

Các giá trị được cung cấp từ khách hàng của bạn không phải là giá trị kép chính xác. Lưu ý rằng đây có thể là cài đặt ngôn ngữ quan trọng - ví dụ: bạn viết đôi với dấu phẩy thập phân và SqlTypes mong đợi dấu thập phân. – Pawel

+0

Cảm ơn Pawel, nó thực sự đã giúp. –

+0

Đã xảy ra sự cố tương tự và đó là cài đặt ngôn ngữ trên máy thứ hai (máy đang gặp sự cố). Cảm ơn những người đứng đầu lên Pawel! – Rich

Trả lời

11

Bạn phải chuyển đổi tọa độ bằng cách sử dụng phương trình bất biến trước khi ghép.

String lon = longitude.ToString(CultureInfo.InvariantCulture); 
    String lat = latitude.ToString(CultureInfo.InvariantCulture); 
    var geo = DbGeography.PointFromText(string.Format("POINT({0} {1})", lon, lat), DbGeography.DefaultCoordinateSystemId); 
Các vấn đề liên quan