C# - 绘制虚拟矩形(4坐标),虚拟图形(地图),并搜索矩形中是否存在其他坐标
问题描述:
使用谷歌地图API获取rectangle像这样 C# - 绘制虚拟矩形(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和更可行的解决方案