我有这个代码,它需要国家的几何形状和一组点,然后它只返回这些国家内的点:
public static IEnumerable<Point> RemovePointsOutsideBorders(IEnumerable<Point> points, IEnumerable<Country> countries)
{
var cc = new List<Point>();
var SPAT_REF_ID = 4326;
foreach (var p in points)
{
var validText = new SqlChars(new SqlString(string.Format("POINT({0} {1})", p.Longitude, p.Latitude)));
var geoPoint = SqlGeometry.STPointFromText(validText, SPAT_REF_ID);
foreach (var c in countries)
{
if(c.Polygon.STIntersects(geoPoint))
{
cc.Add(p);
break;
}
}
}
return cc;
}
目前它相当慢,大约有 4000 个点,具有双纬度/经度值,从它到 SqlGeometry 的转换很慢(大约需要 25 秒——我需要这可能降低到一两秒):
var s = new SqlChars(new SqlString(string.Format("POINT({0} {1})", p.Longitude, p.Latitude)));
var pGeo = SqlGeometry.STPointFromText(s, SPAT_REF_ID);
这样做只是因为 SqlGeometry.Point 采用 x,y 而不是 lat,long ...关于如何加快速度的任何提示?
我已经知道SqlGeometry (c.Polygon)
可以减少以加快速度,但是我无法控制。我所追求的是一种加快从纬度/经度到 SqlGeometry 点的转换的方法。