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

问题描述:

使用谷歌地图API获取rectangle像这样 pC# - 绘制虚拟矩形(4坐标),虚拟图形(地图),并搜索矩形中是否存在其他坐标

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#扩展方法会做得很好

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

/// <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"

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