2013-03-01 17 views
7

olarak bekleniyor Ben koduDbGeography.PointFromText 24141: Bir dizi konumunda

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

Birim testi çalışır ince aşağıdaki içerir WCF REST hizmet var, ama herhangi sağlayan debuder istemci veya HTTP gelen bu kodu çağırdığınızda Örneğin
lat için

"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) 

enlem ve boylam: exept sıfır enlem ve boylam değerleri, bu durumla başarısız uzun 37,58336895: -122,40549454
lat: 37,38931302 uzun: -122,16207476

ben kod tarafında spartial verilerle çalışmak için SQL Server kurulum dizini ve SqlGeography.Point başvurulan Microsoft.SqlServer.Types kullandı. Şimdi EF 5 özelliklerini Microsoft.SqlServer.Types'a başvurmadan doğrudan kullanmak istiyorum. Bu referans ile ve bu referans olmadan başarısız olur.

Sorun nedir?

.NET 4.5 yüklü, SQL Server sürümü Microsoft SQL Server 2008 (SP3) - 10.0.5500.0 (Intel X86) Eylül 22 2011 00:28:06 Telif Hakkı (c) 1988-2008 Microsoft Corporation Standard Edition on Windows NT 6.1 (Yapı 7601: Hizmet Paketi 1)

+3

Müşterinizden sağlanan değerler doğru çift değerler değildir. Bunun yerel ayar ayarları olabileceğini unutmayın - ör. ondalık virgülle çift yazarsınız ve SqlTypes ondalık nokta bekler. – Pawel

+0

Teşekkürler Pawel, gerçekten yardımcı oldu. –

+0

Aynı sorun vardı ve ikinci makinede (sorun veren) yerel ayarları yapıldı. Başımıza teşekkürler Pawel! – Rich

cevap

11

Birleştirme işleminden önce değişmezKültürü kullanarak koordinatları dönüştürmelisiniz.

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);