julia软件包进行地理编码

问题描述 投票:-1回答:2

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

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

julia geocoding
2个回答
1
投票

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


0
投票

我现在编写了一个使用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]
© www.soinside.com 2019 - 2024. All rights reserved.