Eigenen Server für Offlineverfügbarkeit aufsetzten

Endlich, es ist grade eben fertig geworden. Und es klappt SUPER! Tiles werden grade erstellt.

osmosis und osmconvet werden ich mir dann noch anschauen, weil so hat es jetzt schon ewig gebraucht.

Als nächstes wird es darauf laufen, die generierten Tiles in einem Programm anzeigen zu lassen. Und dann so wie mit dem OSMViewer oder OpenLayers anzuzeigen.

Die Ordnerstruktur der Tiles, ist ja Tiles/z-Koordinate/x-Koordinate/y-Koordinate.png

Wobei die Koordinaten von LonLat zu Pixel umgerechnet wurden, wenn ich das richtig gesehen habe. Steht irgendswo, wie genau die Koordinaten umgerechnet werden? (Formel?)

Das einzige was ich gefunden habe ist folgendes in der generate_tiles.py :


def fromLLtoPixel(self,ll,zoom):
         d = self.zc[zoom]
         e = round(d[0] + ll[0] * self.Bc[zoom])
         f = minmax(sin(DEG_TO_RAD * ll[1]),-0.9999,0.9999)
         g = round(d[1] + 0.5*log((1+f)/(1-f))*-self.Cc[zoom])
         return (e,g)
     
    def fromPixelToLL(self,px,zoom):
         e = self.zc[zoom]
         f = (px[0] - e[0])/self.Bc[zoom]
         g = (px[1] - e[1])/-self.Cc[zoom]
         h = RAD_TO_DEG * ( 2 * atan(exp(g)) - 0.5 * pi)
         return (f,h)

Das sollte die Umrechnung sein.

Gruß
mvollmer

Im Wiki gibt es eine Seite über die Umrechnerei von Lon/Lat in Kachelnummer.

Grüße, Max

Das sieht sehr gut aus. Vielen Dank.

Gruß
mvolllmer

… und wenns nicht passt, hast du höchstwahrscheinlich auch die Logarithmen verwechselt :wink:

Gruß,
ajoessen

Ich will auch Mapnik2 zum Laufen bekommen. Bei mir erscheint auch der Fehler mit der datasource-settings.xml.inc. Ich habe diese sowieso verändert, da ich erst mal ohne Datenbank rendern will. So sieht es in meiner inc/datasource-settings.xml.inc aus:

<Parameter name="type">osm</Parameter>
<Parameter name="file">/home/wicking/osm/data/berlin.osm</Parameter>

Trotzdem der Fehler Entity ‘datasource-settings’ not defined (encountered in file ‘osm.xml’ at line 4060)

Davor hatte ich noch einen anderen Fehler:


inc/entities.xml.inc:9: parser warning : PEReference: %layers; not found
%layers;

Habe dann einfach den Inhalt aus inc/layers.xml.inc in die Datei inc/entities.xml.inc eingefügt und die Zeile %layers; gelöscht. Aber verstanden habe ich auch das nicht, denn in der inc/entities.xml.inc stand folgendes, als der Fehler noch kam:


<!ENTITY % layers SYSTEM "layers.xml.inc">
%layers;

Seltsam. Ich dachte all diese Dateien wären eh schon an Mapnik2 angepasst, weil osm.org doch auch schon Mapnik2 verwendet, oder?

Was könnte es sein?

Wie fängt denn deine osm.xml an?


<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE Map [
<!ENTITY % entities SYSTEM "inc/entities.xml.inc">
%entities;
]>


Da müsste schon der relative Pfad richtig drin stehen.

BTW: Im svn ist doch alles schon auf Mapnik2 umgestellt. Falls du unbedingt den deutschen Stil haben willst, nimm ersatzweise meinen:
http://wiki.openstreetmap.org/wiki/User:Ajoessen/myMapnik

EDIT: Ich weiß ja nicht, was du mit dem Datenbanklosen Rendering sehen willst. Sämtliche Flächen wirst du ohne Datenbank vermutlich nicht bekommen. Und in den layer-Aufrufen darf dann auch nicht mehr stehen:


    <Datasource>
      <Parameter name="table">
     ....

Wie genau der Direktabruf von OSM-Daten lauten muß, weiß ich aber auch nicht.

Gruß,
ajoessen

Genau so. Ich habe ja auch alles aus dem SVN.

Danke, aber ich wollte einfach nur den aktuellen Stil von osm.org haben.

Habe das Verzeichnis mapnik jetzt nochmal gelöscht und es neu aus dem svn geholt.
• Dann die Datei get-coastlines.sh ausgeführt, um diese paar Zusatzdateien (z.B processed_p.tar.bz2) zu besorgen.
• Und nun passe ich nochmal meine inc/datasource-settings.xml.inc an (wie oben gerade gezeigt).
• Dann kopiere ich die settings.xml.inc.template nach settings.xml.inc und ändere dort

<!-- ENTITY osm2pgsql_projection "&srs%(epsg)s;" -->
<!ENTITY osm2pgsql_projection "+proj=latlong +datum=WGS84">

(damit ich direkt aus der osm-Datei berlin.osm lesen kann).
• kopiere fontset-settings.xml.inc.template nach fontset-settings.xml.inc
• und starte ./generate_image.py, was wieder zu obigem Fehler mit der fehlenden %layers; führt. Den Inhalt dieser inc/layers.xml.inc füge ich wieder direkt in inc/entities.xml.inc ein.
• Noch ein Versuch mit ./generate_image.py und der Fehler von oben kommt wieder:

Traceback (most recent call last):
  File "./generate_image.py", line 42, in <module>
    mapnik.load_map(m,mapfile)
RuntimeError: XML document not well formed: 
Entity 'datasource-settings' not defined (encountered in file 'osm.xml' at line 4060)

Ist doch seltsam, dass es diese Fehler gibt, wo ich doch alles direkt aus dem SVN und kaum eigene Änderungen vorgenommen habe.

Der Fehler wird sein:


<Layer name="theme_park" status="on" srs="&osm2pgsql_projection;">
    <StyleName>theme_park</StyleName>
    <Datasource>
      <Parameter name="table">
      (select way,name,tourism from &prefix;_polygon where tourism='theme_park') as theme_park
      </Parameter>
      &datasource-settings;
    </Datasource>
</Layer>

Macht nur Sinn, wenn in datasource-settings eine Datenbank definiert ist, die eine Tabelle planet_polygon enthält, mit den entsprechenden Spalten way, name, tourism

Und die hast du in deiner osm-Datei eben nicht.

Machs doch einfach mal von Anfang an so, wie es vorgesehen ist.

Gruß,
ajoessen

Danke für diese Erklärung. Ich dachte es wäre einfacher das Ganze ohne Datenbankserver, Datenbank und Import von OSM-Daten in die Datenbank zu verwenden. Mal sehen, ob ich es mit dieser neuen Info hinbekomme.

Wenn du dich stur an meine Anleitung hältst, sollte es klappen:
http://wiki.openstreetmap.org/wiki/User:Ajoessen/Postgis
http://wiki.openstreetmap.org/wiki/User:Ajoessen/Mapnik

Wenn das dann läuft, kannst du dich an die Kür machen :wink:

Gruß,
ajoessen

Gut, ich habe es jetzt mit Datenbank versucht. War ja ganz einfach diese zum Laufen zu bekommen. Mit QuantumGIS, das ich gerade zum ersten mal benutze, kann ich auch auf die Datenbank zugreifen und mir schön den Inhalt anzeigen lassen: Berlin. Toll.

Aber die Fehler mit generate_image.py sind die gleichen geblieben. Gestern habe ich übrigens schonmal was mit Mapnik gerendert (irgendeine Demo), also Mapnik 2.0 ist nicht kaputt. Kann den Fehler einfach nicht nachvollziehen. Wenn ich mit qGIS auf die Datenbank zugreifen kann, dann müsste mapnik das doch auch können? Erst mal drüber schlafen …

Na das ist doch schon mal was.

Hast du generate_xml.py mit den entsprechenden Parametern laufen lassen? Damit werden die inc.template-Dateien zu “richtigen” inc-Dateien angepasst.

Die Deaktivierung der Passwort-Authentifizierung in der pg_hba.conf wäre auch noch eine mögliche Fehlerquelle.

Gruß,
ajoessen

Ich habe einen Datenbankbenutzer ohne Passwort. Das war also nicht das Problem.

Nein, hatte es von Hand gemacht. Jetzt habe ich es mal mit diesem generate_xml.py versucht und siehe da (nachdem ich in diesem Skript noch einen Fehler, nämlich import mapnik zu import mapnik2 as mapnik, korrigiert hatte) lief es einwandfrei. Vielen Dank!

Und gerade habe ich sogar mein erstes SVG erstellt. Sieht wunderbar aus. Jetzt muss ich nur noch herausfinden wie ich die Zoomstufe einstelle, aber das scheint kein Problem. Die Python(mapnik)hilfe ist ja recht ausführlich.

Hallo,
ich versuche auch, schon seit längerem, ein Bild oder Kacheln zu rendern. Leider klappt es noch nicht. Habe mich an die tolle Anleitung von Ajoessen gehalten. (Der Ausschnitt ist ca. 5x5km, aus JOSM heruntergeladen und auch schon in der Datenbank drin.)
Die Shape-Dateien der Grenzen habe ich ebenfalls geladen.

Ich bin davon ausgegangen, dass die beiligenden Python-Scripts mit dem neuen Mapnik2 schon funktionieren… Würde mich sehr freuen, wenn mir jemand ein wenig helfen könnte:
Betriebssystem ist Windows XP, die beiligende osm.xml ist auch nur 4063 Zeilen lang.
Muss man die *.xml.inc.template Dateien im inc-Verzeichnis per Hand in *.xml.inc umbenennen?

generate_xml.py

C:\osm>generate_xml.py
Traceback (most recent call last):
  File "C:\osm\generate_xml.py", line 173, in <module>
    validate(blended,parser)
  File "C:\osm\generate_xml.py", line 95, in validate
    if not params['estimate_extent'] == 'false':
KeyError: 'estimate_extent'

generate_tiles.py

C:\osm>generate_tiles.py
C:\mapnik-2.0.1rc0\python\2.7\site-packages\mapnik2\__init__.py:27: DeprecationW
arning:  mapnik2 module has been deprecated,
        please use 'import mapnik'
  warnings.warn(msg, DeprecationWarning)
Traceback (most recent call last):
  File "C:\osm\generate_tiles.py", line 193, in <module>
    home = os.environ['HOME']
  File "C:\Python27\lib\os.py", line 423, in __getitem__
    return self.data[key.upper()]
KeyError: 'HOME'

generate_image.py

C:\osm>generate_image.py
C:\mapnik-2.0.1rc0\python\2.7\site-packages\mapnik2\__init__.py:27: DeprecationW
arning:  mapnik2 module has been deprecated,
        please use 'import mapnik'
  warnings.warn(msg, DeprecationWarning)
Postgis Plugin: SRID warning, using srid=-1 for '
      (select way,aeroway,amenity,landuse,leisure,man_made,military,"natural",po
wer,tourism,name,highway,
       case when religion in ('christian','jewish') then religion else 'INT-gene
ric'::text end as religion
       from planet_osm_polygon
       where landuse is not null
          or leisure is not null
          or aeroway in ('apron','aerodrome')
          or amenity in ('parking','university','college','school','hospital','k
indergarten','grave_yard')
          or military in ('barracks','danger_area')
          or "natural" in ('field','beach','desert','heath','mud','grassland','w
ood','sand','scrub')
          or power in ('station','sub_station','generator')
          or tourism in ('attraction','camp_site','caravan_site','picnic_site','
zoo')
          or highway in ('services','rest_area')
       order by z_order,way_area desc
      ) as leisure
      '
Traceback (most recent call last):
  File "C:\osm\generate_image.py", line 44, in <module>
    mapnik.load_map(m,mapfile)
RuntimeError: Postgis Plugin: PSQL error:
FEHLER:  Relation »planet_osm_polygon« existiert nicht
LINE 4:        from planet_osm_polygon
                    ^
Full sql was: 'SELECT * FROM
      (select way,aeroway,amenity,landuse,leisure,man_made,military,"natural",po
wer,tourism,name,highway,
       case when religion in ('christian','jewish') then religion else 'INT-gene
ric'::text end as religion
       from planet_osm_polygon
       where landuse is not null
          or leisure is not null
          or aeroway in ('apron','aerodrome')
          or amenity in ('parking','university','college','school','hospital','k
indergarten','grave_yard')
          or military in ('barracks','danger_area')
          or "natural" in ('field','beach','desert','heath','mud','grassland','w
ood','sand','scrub')
          or power in ('station','sub_station','generator')
          or tourism in ('attraction','camp_site','caravan_site','picnic_site','
zoo')
          or highway in ('services','rest_area')
       order by z_order,way_area desc
      ) as leisure
       LIMIT 0'
 (encountered during parsing of layer 'landcover' in map 'osm.xml')

bzw. nachdem ich “&layer-landcover;” in der osm.xml probehalber auskommentiert habe:

C:\osm>generate_image.py
C:\mapnik-2.0.1rc0\python\2.7\site-packages\mapnik2\__init__.py:27: DeprecationW
arning:  mapnik2 module has been deprecated,
        please use 'import mapnik'
  warnings.warn(msg, DeprecationWarning)
Postgis Plugin: SRID warning, using srid=-1 for '
      (select way,waterway
      from planet_osm_line
      where waterway in ('stream','drain','ditch')
        and (tunnel is null or tunnel != 'yes')
      ) as water_lines'
Traceback (most recent call last):
  File "C:\osm\generate_image.py", line 44, in <module>
    mapnik.load_map(m,mapfile)
RuntimeError: Postgis Plugin: PSQL error:
FEHLER:  Relation »planet_osm_line« existiert nicht
LINE 3:       from planet_osm_line
                   ^
Full sql was: 'SELECT * FROM
      (select way,waterway
      from planet_osm_line
      where waterway in ('stream','drain','ditch')
        and (tunnel is null or tunnel != 'yes')
      ) as water_lines LIMIT 0'
 (encountered during parsing of layer 'water-lines-casing' in map 'osm.xml')

Weiß jemand damit auf Anhieb was anzufangen? Danke schon mal im vorraus für hilfreiche Tipps!
Gruß
Masi

Weiß nicht, ob Du inzwischen schon weiter bist. Mit Mapnik2 kann ich nicht weiterhelfen, evtl. hilft aber auch schon das:

Das müsste per generate_xml.bat gehen, z.B.:


generate_xml.py --dbname osmdb --host 'localhost' --user osmuser --port 5432 --password '' --prefix planet --inc inc-de

siehe http://wiki.openstreetmap.org/wiki/User:Ajoessen/myMapnik#Basislayer_myMapnik

Gruß,
Norbert

Hallo Leute,

ich versuche schon länger einen eigenen Server aufzusetzten. Leider bleibe ich meistens an dem Punkt hängen das wenn ich den renderd ausführe der zwar läuft aber nichts weiter passiert. Wenn ich dann in die renderd.stats reinschaue stehen dort fast nur 0. Als System habe ich ein Ubuntu 12.04 mit Postgres und Mapnik. Hat von euch einer eine Ahnung fast ich falsch mache oder ob ich was vergessen habe??

mfg