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 个环。
下面的打印屏幕应该更好地解释
正如我们在打印屏幕中看到的那样,多边形对象实际上是一个多边形对象。
我已经解决了添加新的 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 控件.
我在从 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 个环。
下面的打印屏幕应该更好地解释
正如我们在打印屏幕中看到的那样,多边形对象实际上是一个多边形对象。
我已经解决了添加新的 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 控件.