查找多边形内的所有建筑物 lat/long 坐标
Find all building lat/long coords within a polygon
我有一个 lat/long 对的多边形。我想以某种方式建立一个地址列表,经过研究我知道这将非常困难。我知道没有办法从任何服务自动执行此操作。
据我所知,我可以尝试建立一个包含地址和 lat/long 坐标的数据库,并将它们与多边形内所有可能的点进行匹配。如果我能轻松找到这样的免费数据,那就太好了。我能找到的最接近的东西是 http://openaddresses.io,它仍然很不完整,我需要整个美国。
是否有至少可以找到多边形中所有建筑物的服务(软件、在线、API)?然后我至少可以对该点进行反向地理编码并在有效的情况下获取地址。
任何人都可以提出任何建议来帮助我实现找到多边形中所有地址的最终目标吗?唯一的要求是它必须是免费的。
如果你有资源,你可以自己编程。只需使用一个公式来计算给定点是否在多边形内,并使其适应您的坐标。
我遇到了类似的问题。我的应用程序需要检查包含 latLgn 的社区。 Wikimapia API 向我返回了半径内的所有社区,但没有一个在其边界内有坐标。
我不得不自己调整函数,因为 API 没有这样做(尽管它为我提供了提取信息所需的所有数据)。
这是我做的函数。 (在 C# 中)
public bool NoPoligono(PointCollection poligono)
{
bool result = false;
Point local = new Point(double.Parse(this.Lng, CultureInfo.InvariantCulture), double.Parse(this.Lat, CultureInfo.InvariantCulture));
int j = poligono.Count - 1;
for (int i = 0; i < poligono.Count(); i++)
{
if (Math.Abs(poligono[i].Y) < Math.Abs(local.Y) && Math.Abs(poligono[j].Y) >= Math.Abs(local.Y) || Math.Abs(poligono[j].Y) < Math.Abs(local.Y) && Math.Abs(poligono[i].Y) >= Math.Abs(local.Y))
{
if (Math.Abs(poligono[i].X) + (Math.Abs(local.Y) - Math.Abs(poligono[i].Y)) / (Math.Abs(poligono[j].Y) - Math.Abs(poligono[i].Y)) * (Math.Abs(poligono[j].X) - Math.Abs(poligono[i].X)) < Math.Abs(local.X))
result = !result;
}
j = i;
}
return result;
}
它属于一个名为 Ponto 的 class,它代表我的应用程序逻辑中的一个坐标。它用于验证它是否在作为参数传递的多边形 (PointCollection) 内部。
我有一个 lat/long 对的多边形。我想以某种方式建立一个地址列表,经过研究我知道这将非常困难。我知道没有办法从任何服务自动执行此操作。
据我所知,我可以尝试建立一个包含地址和 lat/long 坐标的数据库,并将它们与多边形内所有可能的点进行匹配。如果我能轻松找到这样的免费数据,那就太好了。我能找到的最接近的东西是 http://openaddresses.io,它仍然很不完整,我需要整个美国。
是否有至少可以找到多边形中所有建筑物的服务(软件、在线、API)?然后我至少可以对该点进行反向地理编码并在有效的情况下获取地址。
任何人都可以提出任何建议来帮助我实现找到多边形中所有地址的最终目标吗?唯一的要求是它必须是免费的。
如果你有资源,你可以自己编程。只需使用一个公式来计算给定点是否在多边形内,并使其适应您的坐标。
我遇到了类似的问题。我的应用程序需要检查包含 latLgn 的社区。 Wikimapia API 向我返回了半径内的所有社区,但没有一个在其边界内有坐标。
我不得不自己调整函数,因为 API 没有这样做(尽管它为我提供了提取信息所需的所有数据)。
这是我做的函数。 (在 C# 中)
public bool NoPoligono(PointCollection poligono)
{
bool result = false;
Point local = new Point(double.Parse(this.Lng, CultureInfo.InvariantCulture), double.Parse(this.Lat, CultureInfo.InvariantCulture));
int j = poligono.Count - 1;
for (int i = 0; i < poligono.Count(); i++)
{
if (Math.Abs(poligono[i].Y) < Math.Abs(local.Y) && Math.Abs(poligono[j].Y) >= Math.Abs(local.Y) || Math.Abs(poligono[j].Y) < Math.Abs(local.Y) && Math.Abs(poligono[i].Y) >= Math.Abs(local.Y))
{
if (Math.Abs(poligono[i].X) + (Math.Abs(local.Y) - Math.Abs(poligono[i].Y)) / (Math.Abs(poligono[j].Y) - Math.Abs(poligono[i].Y)) * (Math.Abs(poligono[j].X) - Math.Abs(poligono[i].X)) < Math.Abs(local.X))
result = !result;
}
j = i;
}
return result;
}
它属于一个名为 Ponto 的 class,它代表我的应用程序逻辑中的一个坐标。它用于验证它是否在作为参数传递的多边形 (PointCollection) 内部。