私はこのコードを持っています。それは国のジオメトリとポイントのセットを取り、それらの国内のポイントのみを返します:
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 のポイントがあり、緯度と経度の値が 2 倍で、そこから SqlGeometry への変換が遅くなります (約 25 秒かかります。これをおそらく 1 秒か 2 秒にする必要があります)。
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 を取るためにのみ行われます...どうすればこれをスピードアップできますか?
SqlGeometry (c.Polygon)
速度を上げるために を減らすことができることは既に知っていますが、それを制御することはできません。私が求めているのは、緯度/経度から SqlGeometry ポイントへの変換を高速化する方法です。