silverlight c# sql 地理到 xaml

silverlight c# sql geography to xaml

我在从 Sql 服务器地理数据转换为 Silverlight 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++)

问题:geo.NumRings() 方法 returns 无效,但我的多边形对象中有 2 个环。

下面的打印屏幕应该更好地解释

link print screen source code and geo object data

正如我们在打印屏幕中看到的那样,多边形对象实际上是一个多边形对象。

我已经解决了添加新的 for 循环的问题,以收集从 sql 服务器返回的多边形对象中的所有多边形。

这是新代码:

        //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)
                { ...

谢谢

您的图片显示的是一个多边形,它是一个多边形数组。每个多边形都有一个环阵列。因此,当几何体是多形状时,您将需要遍历其每个子几何体并对其进行解析。您可以使用 STNumGeometries 和 STGeometryN 方法遍历子几何体。

也就是说,我不建议使用 Silverlight 进行任何开发。 Bing Maps Silverlight 控件将在 11 月弃用,如前所述 here

最新的 Bing Maps JavaScript 控件 (V8) 也更容易连接到您的 SqlGeography 对象,并且比 Silverlight 控件快得多。 V8 控件有一个内置的 Well Known Text 模块,这意味着您只需 geom.STAsText 和 return 在 JavaScript 中将数据发送到此模块,您就可以渲染形状在地图上真的很容易。 Bing Maps Silverlight 控件在变慢之前可以处理大约 1MB 或 2MB 的多边形数据,而 V8 控件已经用超过 40MB 的数据进行了测试,并且在加载 2MB 数据时的性能甚至优于 Silverlight 控件.