【问题标题】:C# - Plot a Virtual Rectangle(4 Co-ordinates),on a Virtual Graph (map of the earth), and Search if another co-ordinate exists in the RectangleC# - 在虚拟图(地球地图)上绘制一个虚拟矩形(4 个坐标),并搜索矩形中是否存在另一个坐标
【发布时间】:2017-04-05 14:09:00
【问题描述】:

我正在使用谷歌地图 API 来获得这样的 rectangle

autocomplete.addListener('place_changed', function () {
                    var place = autocomplete.getPlace();

                if (place && place.geometry) {
                    var ne = place.geometry.viewport.getNorthEast();
                    var sw = place.geometry.viewport.getSouthWest();

                    var _ne = { lat: ne.lat(), lng: ne.lng() };
                    var _nw = { lat: ne.lat(), lng: sw.lng() };
                    var _sw = { lat: sw.lat(), lng: sw.lng() };
                    var _se = { lat: sw.lat(), lng: ne.lng() };
            });

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

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

【问题讨论】:

    标签: c# google-maps plot graph


    【解决方案1】:

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

    /// <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;
                }
            }
    

    并使用System.Device.Location.GeoCoordinate

    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"
    

    "-1.2882998,36.8737025"

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

    【讨论】:

      猜你喜欢
      • 2014-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-03
      相关资源
      最近更新 更多