2017-04-05 17 views
0

使用谷歌地圖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#擴展方法會做得很好

回答

0

我還沒有解決我的問題,但現在,我可以繼續用下面的小解決方案。

/// <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和更可行的解決方案