DbGeometry.FromGml()的参数

时间:2014-09-03 05:05:58

标签: .net spatial

我正在尝试使用System.Data.Entity程序集中的System.Data.Spatial.DbGeometry.FromGml(),但我无法使用简单的测试用例。

[Test]
public void DbGeometry_FromGml()
{
    StringBuilder xml = new StringBuilder();

    xml.Append(@"<gml:PolygonPatch>");

    xml.Append(@"<gml:exterior>");
    xml.Append(@"<gml:Ring>");
    xml.Append(@"<gml:curveMember>");
    xml.Append(@"<gml:segments>");
    xml.Append(@"<gml:GeodesicString>");
    xml.Append(@"<gml:posList> -25.07842078 124.85121167 -24.07829967 114.86532597 </gml:posList>");
    xml.Append(@"</gml:GeodesicString>");
    xml.Append(@"</gml:segments>");
    xml.Append(@"</gml:curveMember>");
    xml.Append(@"</gml:Ring>");
    xml.Append(@"</gml:exterior>");
    xml.Append(@"</gml:PolygonPatch>");

    DbGeometry g = DbGeometry.FromGml(xml.ToString());
}

这给了我一个例外,'gml'是未声明的前缀。我向PolygonPatch添加了一些XML命名空间:xmlns:gml=\"http://www.opengis.net/gml/3.2\"然后我得到一个不同的错误(如果我删除gml:前缀而不是定义它,则会出现相同的错误):

Test.UnitTests.DbGeometry_FromGml:
System.Reflection.TargetInvocationException : Exception has been thrown by the target of an invocation.
  ----> System.FormatException : 24129: The given XML instance is not valid because the top-level tag is PolygonPatch. The top-level element of the input Geographic Markup Language (GML) must contain a Point, LineString, Polygon, MultiPoint, MultiGeometry, MultiCurve, MultiSurface, Arc, ArcString, CompositeCurve, PolygonPatch or FullGlobe (geography Data Type only) object.

因为它说顶级元素必须contain一个PolygonPatch我尝试将它包装在父节点中(并将名称空间移动到父节点),但它没有任何区别。

所以我很困惑:这种方法的GML需要看起来像什么?

更新 尝试了一个更简单的对象(Point)并遇到了类似的问题。我从文本中创建了一个DbGeometry,然后将其转换为GML,它与我的输入不同,所以我认为它可能与GML版本有关。

DbGeometry point = DbGeometry.FromText("POINT (0 0)");
string gml = point.AsGml();
System.Console.WriteLine(gml);

输出

<?xml version="1.0" encoding="utf-8"?><Point xmlns="http://www.opengis.net/gml"><pos>0 0</pos></Point>

因此,Point包含<pos>而不是<coordinates>

0 个答案:

没有答案