用于地理编码的 julia 包

julia package for geocoding

背景: 我有一个人类可读地址列表,我想使用一些 julia 包在这些位置之间创建一个(行驶)距离矩阵。 OpenStreetMapX.jl 可以创建距离矩阵,但需要节点或坐标作为输入而不是地址。

问题: 我没有找到将地址地理编码为坐标的 julia 包(如 python 的 geopy)。周围有什么东西吗(或者 OpenStreetMapX 是否有功能可以进行我错过的搜索)?

看看 GoogleMaps.jl - 我几周前成功地使用了它。

我现在已经编写了一个函数,它使用 nominatim 来确定地址列表的坐标。

using HTTP
using JSON

addressList = ["Mühlenstraße 21, 50321 Brühl","Joseph-Stelzmann Straße, 50931 Köln", "Bonner Straße 84, 50389 Wesseling" ]

#nominatim requires as user agent and will block you otherwise
HTTP.setuseragent!("Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Firefox/68.0")

function getCoordinates(addressList)
    """
    getCoordinates(addressList::Array{String,1})

    returns a Vector of coordinates in (lat,lon) format as well as a data Array that contains all the data returned by nominatim
    """
    coordinatesList = Array{Tuple{Float64,Float64},1}(undef, length(addressList)) # will contain (lat,lon) of addresses in addressList
    data = Array{Any,1}(undef,length(addressList)) # will contain all data nominatim gives for each request
    for (i,address) in enumerate(addressList)
        addressFormatted = join(split(address),"+")
        rawdata = HTTP.get(string("https://nominatim.openstreetmap.org/search?q=",addressFormatted,"&format=json&limit=1"))
        data[i]=JSON.parse(String(rawdata.body))[1]
        coordinatesList[i] = parse(Float64,data[i]["lat"]),parse(Float64,data[i]["lon"])
        sleep(1) #nominatim will block you if you have more than 1 request per second
    end
    return coordinatesList , data
end

coordinates = getCoordinates(addressList)[1]