Adressen aus einer Excelliste importieren

Hallo,

ist es möglich Adressen aus einer Excelliste in die OpenStreetMap zu importieren und die Karte dann als kmz oder kml datei zu speichern bzw runter zuladen?

Wenn ja, wie? :smiley:

Danke im Vorraus :slight_smile:

Hallo und Willkommen bei OSM und hier im Forum

Möchtest Du wirklich die Adressen in OSM importieren (und damit der ganzen Welt zur Verfügung stellen) oder möchtest Du die Daten für den privaten Gebrauch auf eine OSM-Karte projizieren?

Hallo,
ich würde sie gerne privat nutzen

  • Daten laden: Ja, aber woher stammen die Daten? Lizenz?

  • “Karte” als KML/KMZ: nein.

Allerdings kannst du dir OSM-Rohdaten laden und mit denen alles anstellen was du wilst.
Beschreib uns mal lieber, was du eigentlich vorhast. “Privat nutzen” reicht nicht als info.

Gruss
walter

Des Weiteren ist die Frage, ob du im Moment nur postalische Adressen hast, oder bereits geocodierte Adressen (wo dir z.B. Nominatim weiterhelfen könnte - aber hier unbedingt die UsagePolicy beachten!)

Dann kannst du solche Daten z.B. von Excel über CSV auch in uMap importieren und dort die Marker anzeigen lassen.

Und warum willst du dann danach die Daten als KML exportieren? Wenn du mal googelst, gibt es da genug Tools, die dir auch aus einer CSV Datei direkt eine KML Datei machen oder GPX oder GeoJson oder was auch immer du für Geodatenformat haben möchtest.

Es könnte sein, dass du mit dem kommerziellen Angebot von https://geocode.xyz/batch leben könntest, die lassen kleinere Datenmengen wohl kostenlos laufen. Allerdings kann ich da nix von der Datenquelle lesen, d.h. keine Ahnung ob die OSM-Daten verwenden.

Und wenn das ein kleiner Job ist und er unter die Nominatim Usage Policy fällt, dann (in Python):

# -*- coding: utf8 -*-
import urllib2
import xml.etree.ElementTree as ET
import time
import csv

# pk ist nur ein Primärschlüssel für die Zuordnung hinterher.
def geocode_addr_nominatim(addr_line,pk):
    fullURL = "http://nominatim.openstreetmap.org/search?q=%s,Germany&format=xml" % (urllib2.quote(addr_line))

    #print fullURL
    req = urllib2.Request(fullURL, headers={ 'User-Agent': 'XXX/python-smallGeocoder. contact YYY@zzz . de for questions.' })
    url_lines = urllib2.urlopen(req).readlines()

    treedom = ET.fromstring("".join(url_lines))

    p = treedom.find('./place[@class="place"]')
    if p is not None:
        # have a class=place result
        #print("---> class=place")
        lat = p.attrib['lat']
        lon = p.attrib['lon']
    else:
        # no class=place result, take any other
        p2 = treedom.find('./place')
        if p2 is not None:
            #print("---> any place")
            lat = p2.attrib['lat']
            lon = p2.attrib['lon']
        else:
            # no result whatsoever, set 0
            lat = 0
            lon = 0
        
    write_addr(pk, addr_line, lat, lon)

def write_addr(pk,addr,lat,lon):
    print "%s;%s;%s;%s" % (pk, addr.decode('utf-8'), lat, lon)
    
# das kann verschiedene Geocoder-Funktionen übergeben bekommen.
def batch_gk_file(addr_filename,gk_function):
    
    reader = csv.reader(open(addr_filename, 'r'), delimiter=",")
    reader.next()
    for row in reader:
        #print row
        #print row[4:]
        # anpassen, je nachdem wie das Inputfile aufgebaut ist. Dafür die prints...
        a = row[4] +","+ row[5] +" " + row[6]
        #print a
        gk_function(a,row[0])
        # nett sein zu Nominatim. Ist immerhin die öffentliche Instanz!
        time.sleep(4)


Daraus kriegst Du eine CSV-Datei, die Du dann mit umap anzeigen lassen kannst.