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