找到多边形内的所有建筑纬度/长坐标

时间:2015-03-01 05:25:08

标签: maps coordinates reverse-geocoding

我有一个lat / long对的多边形。我想以某种方式建立一个地址列表,经过研究,我知道这将是非常困难的。我知道没有办法从任何服务中自动执行此操作。

根据我的理解,我可以尝试构建一个包含地址和纬度/经度坐标的数据库,并将它们与多边形内的所有可能点进行匹配。如果我能轻松找到这样的免费数据,那将是很好的。我能找到的最接近的是http://openaddresses.io,它仍然非常不完整,我需要整个美国。

是否有服务(软件,在线,API)至少可以找到多边形中的所有建筑物?如果它有效,我至少可以反转地理编码点并获取地址。

有人可以建议任何有助于实现我找到多边形中所有地址的最终目标吗?唯一的要求是它需要是免费的。

1 个答案:

答案 0 :(得分:0)

如果您有这些资源,可以自行编程。只需使用一个公式来计算给定点是否在多边形内并使其适应您的坐标。

我有类似的问题。我的应用程序需要检查包含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的类,它代表了我的应用程序逻辑中的坐标。它用于验证它是否在作为参数传递的多边形(PointCollection)内部。