Beispiel #1
0
        /// <summary>
        /// 通过射线来判定第一个相交的要素
        /// </summary>
        /// <param name="ray"></param>
        /// <returns></returns>
        public bool GetSelectedFeatureByRayCasting(Ray ray)
        {
            //计算Ray于地球的交点
            bool isIntersect = _scene.Ellipsoid.Intersections(ray, out Geodetic2D result);

            //ImGui.Text(string.Format("Latitude:{0},logitude:{1}",result.Latitude,result.Longitude));
            SelectedFeatures.Clear();
            var geoFactory = new NetTopologySuite.Geometries.GeometryFactory();

            if (isIntersect)
            {
                //是否考虑根据当前精度生成一个合适的Enve
                //这里一律采用0.001经纬度的精度
                var env        = new GeoAPI.Geometries.Envelope(new Coordinate(result.Longitude * 180 / Math.PI - 0.001, result.Latitude * 180 / Math.PI - 0.001), new Coordinate(result.Longitude * 180 / Math.PI + 0.001, result.Latitude * 180 / Math.PI + 0.001));
                var selectedff = _quadTree.Query(env);
                foreach (var item in selectedff)
                {
                    if (item.Geometry.Intersects(geoFactory.ToGeometry(env)))
                    {
                        SelectedFeatures.Add(item);
                    }
                }
                return(true);
            }
            return(false);
        }