用于地理编码的 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]
背景: 我有一个人类可读地址列表,我想使用一些 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]