Hab zwar keine Erfahrung damit, aber aus einer von TileMill erzeugten MBTiles Datei müsste sich mit mbutil auch ein Tile-Verzeichnis exportieren lassen, siehe FAQ.
Metatile wird auf die Platte geschrieben und später wieder von anderem Tool weiterverarbeitet
Metatile wird nur im Speicher gerendert und gleich in Einzelkacheln gespeichert, Metatile taucht auf Platte nie auf
Nein.
Entsprechendes Python Skript.
Nein, das Eine hat mit dem Anderen nichts zu tun.
Um die Beschriftung zu erhalten wird normalerweise ein zusätzlicher Rand von 1/2 Tile mitgerendert und verworfen. Das kann man auch für einzelne Tiles machen. Umgekehrt kann man auch Metatiles ohne Rand rendern.
Danke für den Tipp. Das wär ja top wenn das geht. Hatte mich gerade in Mapnik ein bißchen eingelesen. Das scheint ja ne Quälerei zu sein damit zu arbeiten.
Weiß jemand wie ich dieses mbutil zum laufen bekomme? Python habe ich installiert aber ich habe keine Ahnung was ich da starten oder ob ich das Ding noch installieren muss.
Die musst du erst mal an der richtigen Stelle installiert haben, sonst läuft da nix.
Der Vorteil von Mapnik ist halt, dass alle Abhängigkeiten gut dokumentiert sind. Bei Exoten wie mbutil kommt man nicht drum herum, den Entwickler danach zu fragen
Ich habe jetzt doch mal TileMill ausprobiert und auch gleich das mbutil. Eine Installation ist nicht notwendig, hätte nur den Vorteil, dass mb-util direkt als Kommando verwendet werden kann.
Bei mir hat folgender Aufruf funktioniert (Pfade und Dateiname anpassen):
Habs gestern auch noch hinbekommen. Ich rufe es so auf:
python mb-util test.mbtiles /tmp
Jetzt muss ich nur noch eine passende openlayers oder leaflet Vorlage finden. Weiß jemand zufällig wie man die eigenen tiles einbindet? Hatte gestern schon mit der Anleitung im Wiki http://wiki.openstreetmap.org/wiki/OpenLayers_Local_Tiles_Example getestet aber das schein nicht ganz das richtige zu sein.
Edit: Was machste du denn mit dem Schalter --scheme ?
Das schaut gut aus. Habs grad mal getestet und wie nicht anders zu erwarten geht es nicht. Ich habe mein Verzeichnis auf dem Webspace eingebunden und meine Karte wird nicht angezeigt. Habe das dann mal mit Chrome untersucht. Meine Verzeichnisstruktur nach dem Export mit mbutil stimmt soweit. Er findet aber die einzelnen Kacheln nicht. Er sucht nach dateien die bspw. so heißen: http://www.blabla/tiles/14/8801/5291.png bei mir heißen die Tiles nach dem Export aber http://www.blabla/tiles/14/8801/11092.png. Die Dateien haben also den falschen Dateinamen. Ich hatte irgendwo gelesen das das mbtiles Format spherical Mercator benutzt. Kann ich das bei der Projektion in der karten.js des gpx viewers irgendwo einstellen?
Man alles schwerer als gedacht. Wenn ich das zum laufen bekomme muss ich wohl ein dickes Tutorial dafür schreiben.
Es gibt da verschiedene Weltanschauungen, wie man die Tiles nummeriert. Google und OSM fangen oben an (bei 85° Nord, die offizielle TMS_Spezifikation fängt unten an, bei 85° Süd.
Umrechnung: ty1=(2**zoom - 1) - ty
Du kannst dir mal probeweise maptiler anschauen. Die nummerieren auch “verkehrt herum”, und bauen eine eigene Openlayers-Anwendung, die es dann richtigherum darstellt. Oder per script umnummerieren, oder sich einfach an die Standard-Mapnik-Toolchain halten
Na das muss man erstmal wissen. In der Beschreibung zu mbutil steht ja zu den Schaltern gar nichts, oder ich habe es nicht gefunden D.h. wenn ich mb-util mit dem Schalter --scheme=osm nochmal laufen lasse geht das mit einer Standard implementierung von Openlayers?
So habe es jetzt hinbekommen und die Karte funktioniert so. Danke nochmal für die Hilfe.
Nun habe ich gleich ein neues Problem: Ich lasse mir per Overpass API verschiedene Pois auf meine Karte einblenden. Die lassen sich ja an- und abschalten. Wenn ich meine Karte lade sind die aber grundsätzlich eingeschaltet, ich will das jetzt aber so das die Pois beim Laden der Karte nicht angezeigt werden. Hat dafür jemand ein Codebeispiel? Ich kann ja mal meinen Code posten mit dem ich die Abfrage mache:
arztlayer = new OpenLayers.Layer.Vector("Ärzte in NB", {styleMap: styleMaparzt,
strategies: [new OpenLayers.Strategy.Fixed()],
protocol: new OpenLayers.Protocol.HTTP({
url: "arzt.xapi",
format: new OpenLayers.Format.OSM()
}),
projection: new OpenLayers.Projection("EPSG:4326")
});
map.addLayers([arztlayer]);
var options = {hover: false, onSelect: onFeatureSelect, onUnselect: onFeatureUnselect };
selectControl = new OpenLayers.Control.SelectFeature(arztlayer, options);
map.addControl(selectControl);
selectControl.activate();
Man kann dann auf die angezeigten Punkte auf der Karte klicken und die Daten werden aus der Overpass Api bzw. der arzt.xapi angezeigt:
//Beginn Popuhandling
var selectControl;
var selectedFeature;
function onPopupClose(evt) {
selectControl.unselect(selectedFeature);
}
function onFeatureSelect(feature) {
selectedFeature = feature;
var tags = feature.attributes;
var infoHtml = "<table>";
for (var key in tags) {
infoHtml += "<tr><td>" + key + "</td><td>" + tags[key] + "</td></tr>";
}
infoHtml += "</table>";
popup = new OpenLayers.Popup.FramedCloud("chicken",
feature.geometry.getBounds().getCenterLonLat(),
null,
infoHtml,
null, true, onPopupClose);
feature.popup = popup;
map.addPopup(popup);
}
function onFeatureUnselect(feature) {
map.removePopup(feature.popup);
feature.popup.destroy();
feature.popup = null;
}
//Ende Popuphandling
Kann ich die Größe des Popups beeinflußen, im speziellen die Breite?
Der Konstruktor der “OpenLayers.Popup.FramedCloud”-Klasse akzeptiert als drittes Argument eine Pixelgröße. Du übergibst an der Stelle ein “null”. Du kannst da auch eine gewünschte Größe angeben:
popup = new OpenLayers.Popup.FramedCloud("chicken",
feature.geometry.getBounds().getCenterLonLat(),
new OpenLayers.Size (300, 200),
infoHtml,
[…]