背景:我有一个人类可读的地址列表,并希望使用一些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]