2016-06-02 3 views
1

Je rencontre des problèmes lors de la conversion des données Sql Server Geography vers Silverlight XAML.silverlight C# sql geography to 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++) 

Le problème: Méthode geo.NumRings() retourne null, mais je 2 anneaux à l'intérieur de mon objet polygonal.

l'écran d'impression ci-dessous devrait mieux expliquer

link print screen source code and geo object data

Répondre

0

Votre image montre une MultiPolygon qui est un tableau de Polygones. Chaque polygone a un réseau d'anneaux. En tant que tel, lorsque la géométrie est une multi-forme, vous devrez parcourir chacune de ses géométries enfants et l'analyser. Vous pouvez parcourir les géométries enfants en utilisant les méthodes STNumGeometries et STGeometryN.

Cela dit, je ne recommande pas de faire du développement avec Silverlight. Le contrôle Bing Maps Silverlight sera obsolète en novembre comme indiqué here.

Le dernier contrôle JavaScript de Bing Maps (V8) serait beaucoup plus facile à connecter à vos objets SqlGeography et il est également beaucoup plus rapide que le contrôle Silverlight. Le contrôle V8 dispose d'un module de texte bien connu, ce qui signifie que vous devez simplement faire le fichier geom.STAsText et renvoyer ces données à ce module en JavaScript et que vous serez en mesure de rendre la forme sur la carte très facilement. Le contrôle Bing Maps Silverlight peut gérer environ 1 Mo ou 2 Mo de données polygonales avant de devenir lent, alors que le contrôle V8 a été testé avec plus de 40 Mo de données et est encore meilleur que le contrôle Silverlight lorsqu'il est chargé avec 2 Mo de données.

0

que nous pouvons voir dans l'écran d'impression, l'objet polygone est en fait un objet polygone multiples.

J'ai résolu le problème en ajoutant une nouvelle boucle for, pour collecter tous les polygones à l'intérieur de l'objet multipolygone renvoyé par le serveur sql.

est ici le nouveau 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) 
       { ... 

Merci