有人能告诉我如何从类型为'POINT‘的DbGeography对象集合中创建类型为'Polygon’的DbGeography对象吗
到目前为止,我已经得到了创建多边形的方法,但是我遗漏了最初的步骤。
1. DbGeography multipoint = DbGeography.MultiPointFromText("MULTIPOINT(53.095124 -0.864716, 53.021255 -1.337128, 52.808019 -1.345367, 52.86153 -1.018524)", 4326)
2. DbGeometry temp_multipoint = DbGeometry.MultiPointFromBinary(multipoint.AsBinary(), 4326)
3. DbGeography polygon = DbGeography.PolygonFromBinary(temp_multipoint.ConvexHull.AsBinary(), 4326); (RESULT)问题是从DbGeography(点)列表创建初始多点地理对象
发布于 2013-09-24 07:39:38
我最终找到了如何从多个点创建多边形,而不必从WKT创建它。下面的解释稍微简化了一点,但尽管如此
var PolygonFromMultiplePoints = new DbGeography();
using (var db = new LocationContext())
{
//Select Locations known to be within a certain area which should define the polygon.
foreach (var item in db.Locations)
{
PolygonFromMultiplePoints.Union(item.GeoLocation);
}
}
var temp_multipointgeometry = DbGeometry.MultiPointFromBinary(PolygonFromMultiplePoints.AsBinary(), DbGeometry.DefaultCoordinateSystemId);
PolygonFromMultiplePoints = DbGeography.PolygonFromBinary(temp_multipointgeometry.ConvexHull.AsBinary(), DbGeography.DefaultCoordinateSystemId);代码示例假设您已经有一个以点的形式存储在数据库中的dbgeography集合。我的数据库信息来自于从GeoNames导入位置。
发布于 2013-03-25 22:46:07
使用WKT将每个点创建为DbGeography对象:
DbGeography point1 = DbGeography.FromText("POINT(53.095124 -0.864716)", 4326);
DbGeography point2 = DbGeography.FromText("POINT(53.021255 -1.337128)", 4326);
DbGeography point3 = DbGeography.FromText("POINT(52.808019 -1.345367)", 4326);
...
DbGeography polygon = DbGeography.PolygonFromText("POLYGON((53.095124 -0.864716, 53.021255 -1.337128, 52.808019 -1.345367, 53.095124 -0.864716))", 4326);需要注意的两件事:
希望这对我有帮助--我也努力学习多边形的东西!
有关WKT格式的额外提示,请参阅本文:http://en.wikipedia.org/wiki/Well-known_text
发布于 2013-09-22 12:48:01
你真的应该在C#中做这件事,以迭代的方式添加点,原因有两个:
您正在处理空间数据,但是复杂形状的构造从来不是T-SQL的目标。在最坏的情况下,将其放在CLR函数中。
https://stackoverflow.com/questions/15159265
复制相似问题