C#-在虚拟图形(地球地图)上绘制一个虚拟矩形(4个坐标),并搜索矩形中是否存在其他坐标

C#-在虚拟图形(地球地图)上绘制一个虚拟矩形(4个坐标),并搜索矩形中是否存在其他坐标,c#,google-maps,plot,graph,C#,Google Maps,Plot,Graph,我使用谷歌地图API来获得这样一个 从中,我得到了我搜索的区域的矩形。我想从中搜索是否存在另一个点(纬度和经度)。 根据我的想象,我希望能够创建一个虚拟矩形,将其绘制在地球地图的虚拟图形上,并检查该点是否在矩形上。我也希望能够从地图上得到,这个点离另一个点或另一个点有多远 NB:这不需要渲染矩形或图形,C#扩展方法就可以了我仍然没有解决我的问题的方法,但现在,我可以继续使用下面的小方法 /// <summary> /// Is in the geo rectable

我使用谷歌地图API来获得这样一个

从中,我得到了我搜索的区域的矩形。我想从中搜索是否存在另一个点(纬度和经度)。 根据我的想象,我希望能够创建一个虚拟矩形,将其绘制在地球地图的虚拟图形上,并检查该点是否在矩形上。我也希望能够从地图上得到,这个点离另一个点或另一个点有多远


NB:这不需要渲染矩形或图形,C#扩展方法就可以了

我仍然没有解决我的问题的方法,但现在,我可以继续使用下面的小方法

/// <summary>
        /// Is in the geo rectable.
        /// http://www.movable-type.co.uk/scripts/latlong.html
        /// </summary>
        /// <returns></returns>
        public static bool InGeoRectable(string point, string[] rectangle, double distance = 0)
        {
            double rectangleDiagonal = 0;

            if (!rectangle.Any())
                return false;


            try
            {
                var enumerator = rectangle.GetEnumerator();
                enumerator.MoveNext();
                GeoCoordinate rectangleConner = (enumerator.Current as string).ToCoordinate();
                while (enumerator.MoveNext())
                {
                    double _distance = (enumerator.Current as string).ToCoordinate().GetDistanceTo(rectangleConner);
                    if (_distance > rectangleDiagonal)
                        rectangleDiagonal = _distance;
                }


                return !rectangle.Any(r => r.ToCoordinate().GetDistanceTo(point.ToCoordinate()) > (rectangleDiagonal + distance));

            }
            catch (Exception e)
            {

                throw;
            }
        }
“-1.2882998,36.8737025”

它的工作,这是我需要的,但我需要一个更快和更可行的解决方案

/// <summary>
        /// Is in the geo rectable.
        /// http://www.movable-type.co.uk/scripts/latlong.html
        /// </summary>
        /// <returns></returns>
        public static bool InGeoRectable(string point, string[] rectangle, double distance = 0)
        {
            double rectangleDiagonal = 0;

            if (!rectangle.Any())
                return false;


            try
            {
                var enumerator = rectangle.GetEnumerator();
                enumerator.MoveNext();
                GeoCoordinate rectangleConner = (enumerator.Current as string).ToCoordinate();
                while (enumerator.MoveNext())
                {
                    double _distance = (enumerator.Current as string).ToCoordinate().GetDistanceTo(rectangleConner);
                    if (_distance > rectangleDiagonal)
                        rectangleDiagonal = _distance;
                }


                return !rectangle.Any(r => r.ToCoordinate().GetDistanceTo(point.ToCoordinate()) > (rectangleDiagonal + distance));

            }
            catch (Exception e)
            {

                throw;
            }
        }
public static GeoCoordinate ToCoordinate(this string point)
        {
            string[] latLang = point.Split(',');
            double _latitude = -91;
            double _longitude = -181;

            if (Double.TryParse(latLang[0].Trim(), out _latitude) && Double.TryParse(latLang[1].Trim(), out _longitude))
            {
                if (!Double.NaN.Equals(_latitude) && !Double.NaN.Equals(_longitude))
                {
                    if ((_latitude >= -90 || _latitude <= 90) && (_longitude >= -180 || _longitude <= 180))
                    {
                        return new GeoCoordinate(_latitude, _longitude);
                    }
                }
            }
            return new GeoCoordinate(_latitude, _longitude);

        }
"-1.165677,37.105044099999986"
"-1.4522759,36.65112709999994"
"-1.165677,36.65112709999994"
"-1.4522759,37.105044099999986"