2016-06-02 34 views
1

Ich habe einige Probleme bei der Konvertierung von Sql Server Geographie Daten in Silverlight XAML.Silverlight C# sql Geographie zu Xaml

/* Database query spatial data structure for the SQL Server spatial data types object */ 

var geo = SqlGeography.STGeomFromText (new SqlChars(new SqlString(polygon.ToString())), 4326); 

/* Spatial data structure for the Bing Maps graphical objects (polygons) XAML text, to resolve Xaml directly returned to the client in the Silverlight application object. */ 

for (int j = 0; j < geo.NumRings(); j++) 

Das Problem: geo.NumRings() Methode gibt null, aber ich habe 2 Ringe in meinem Polygon-Objekt.

unter dem Druckbild besser

link print screen source code and geo object data

Antwort

0

Ihr Bild einen Multi zeigt, die eine Reihe von Polygonen ist. Jedes Polygon hat eine Anordnung von Ringen. Wenn die Geometrie eine Multi-Form ist, müssen Sie daher alle untergeordneten Geometrien durchlaufen und analysieren. Sie können die untergeordneten Geometrien mithilfe der STNumGeometries- und STGeometryN-Methoden durchlaufen.

Das heißt, ich empfehle keine Entwicklung mit Silverlight. Das Bing Maps Silverlight-Steuerelement wird im November wie angegeben veraltet sein here.

Das neueste Bing Maps-JavaScript-Steuerelement (V8) wäre auch viel einfacher zu verbinden mit Ihren SqlGeography-Objekten und ist auch viel schneller als das Silverlight-Steuerelement. Das V8-Steuerelement verfügt über ein integriertes Well-Known-Text-Modul, was bedeutet, dass Sie einfach geom.STAsText ausführen müssen und diese Daten in JavaScript an dieses Modul zurückgeben müssen und die Form auf der Karte wirklich problemlos darstellen können. Das Bing Maps Silverlight-Steuerelement kann etwa 1 MB oder 2 MB Polygondaten verarbeiten, bevor es langsam wird, wobei das V8-Steuerelement mit mehr als 40 MB Daten getestet wurde und sogar besser als das Silverlight-Steuerelement ausgeführt wurde, wenn es mit 2 MB Daten geladen wurde.

0

erklären sollte, wie wir im Druckbild sehen können, ist das Polygon-Objekt tatsächlich ein Multi Polygon-Objekt.

Ich habe das Problem gelöst, indem ich eine neue for-Schleife hinzufüge, um alle Polygone innerhalb des vom sql-Server zurückgegebenen Multipolygon-Objekts zu sammeln.

hier ist der neue Code:

 //NEW: loop trough the geometries (polygons inside multipolygon) 
     for (int g = 1; g <= geo.STNumGeometries(); g++) 
     { 
      var geopolygon = geo.STGeometryN(g); 

      // Spatial data structure for the Bing Maps graphical objects (polygons) XAML text, to resolve Xaml directly returned to the client in the Silverlight application object. 
      for (int j = 1; j <= geopolygon.NumRings(); j++) 
      { 
       if (geopolygon.RingN(j).STNumPoints() > 1) 
       { ... 

Dank