コード例 #1
0
ファイル: GeoDBOptimize.cs プロジェクト: RayRobben/GeoSharp
        private static bool FilterRecord(string[] Fields, string FeatureClassFilter, string CountryFilter, List<List<PointD>> AreaFilter)
        {
            if(FeatureClassFilter.IndexOf(Fields[6],StringComparison.Ordinal) == -1)
                return false;

            if (CountryFilter.IndexOf(Fields[8], StringComparison.Ordinal) == -1)
                return false;

            PointD LatLng = new PointD(double.Parse(Fields[4]), double.Parse(Fields[5]));
            foreach(var poly in AreaFilter)
            {
                if (!PointInPolyManifold(LatLng, poly))
                    return false;
            }

            return true;
        }
コード例 #2
0
ファイル: GeoDBOptimize.cs プロジェクト: RayRobben/GeoSharp
        //copied from: http://stackoverflow.com/questions/10673740/how-to-check-if-a-point-x-y-is-inside-a-polygon-in-the-cartesian-coordinate-sy
        private static bool PointInPolyManifold(PointD Point, List<PointD> Poly)
        {
            double angle = 0;
            int size = Poly.Count;
            for (int i = 0; i < size; i++)
            {
                angle += Angle2D(Poly[i] - Point, Poly[(i + 1) % size] - Point);
            }

            return Math.Abs(angle) < Math.PI ? false : true;
        }
コード例 #3
0
ファイル: GeoDBOptimize.cs プロジェクト: RayRobben/GeoSharp
        private static double Angle2D(PointD Point1, PointD Point2)
        {
            double theta1 = Math.Atan2(Point1.Y, Point1.X);
            double theta2 = Math.Atan2(Point2.Y, Point2.X);
            double delta = theta2 - theta1;

            if (delta > Math.PI)
                delta -= Math.PI + Math.PI;
            else if (delta < -Math.PI)
                delta += Math.PI + Math.PI;

            return delta;
        }