मेरे अपने OSM डेटा सर्वर के साथ OpenLayers


9

मैं अपने खुद के OSM डेटाबेस / टाइल सर्वर को PostGIS सेट करके, Planet.osm डेटा स्नैपशॉट आयात करके (कुछ दिनों में), और सेटअप Mapnik / cascadenik, आदि की प्रक्रिया के माध्यम से चला गया हूँ, मैं मैन्युअल रूप से अपने स्वयं के रेंडर कर सकता हूं। के साथ generate_image.pyऔर मैं मैन्युअल रूप से टाइल का उत्पादन कर सकता हूं generate_tiles.py। मैंने अपने स्वयं के कस्टम स्टाइल टेम्प्लेट को कैस्केडेनिक और उससे उत्पन्न टाइलों का उपयोग करके समय की एक अच्छी राशि खर्च की है, जिससे मैं काफी खुश हूं।

मेरा नया मुद्दा OpenLayers के साथ एक ही सर्वर पर चलाने के लिए एक नमूना फिसलन मानचित्र स्थापित कर रहा है ...

मैंने इसे कुछ हद तक कॉन्फ़िगर और काम कर लिया है; सेटअप अपाचे, mod_python, TileCache, आदि। यह टाइलों को फिसलन भरे नक्शे में प्रस्तुत करता है, लेकिन मुझे लगता है कि मैंने उन सभी मापदंडों को खोल दिया है जो ओपनलाइयर में खराब हो चुके हैं। वर्तमान में मुझे जो मिला है (जो सभी ज़ूम स्तरों पर खाली महासागर की तरह दिखता है):

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <script src="http://openlayers.org/api/OpenLayers.js"></script> 
    <script type="text/javascript">
        var map;

        function init() {
                map = new OpenLayers.Map ("map", {
                        maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
                        maxResolution: 156543.0399,
                        numZoomLevels: 19,
                        units: 'm',
                        projection: new OpenLayers.Projection("EPSG:900913"),
                        displayProjection: new OpenLayers.Projection("EPSG:4326")
                } );

                layer = new OpenLayers.Layer.TMS( "OSM", "/tilecache/tilecache.py/", {layername: 'osm', type: 'png'} );
                map.addLayer(layer);
                map.addControl(new OpenLayers.Control.PanZoomBar());
                map.setCenter(new OpenLayers.LonLat(-82.686195, 27.84788), 12)
        }
        </script> 
  </head>
<body onload="init()">
    <div id="map"></div>
</body>
</html>

मुझे लगता है कि परत विकल्पों के मापदंडों के साथ कुछ गलत है, लेकिन मैं Mapnik द्वारा प्रदान की गई सामान्य OSM टाइलों को प्रदर्शित करने के लिए उपयोग किए जाने वाले मानक मापदंडों का वर्णन करने वाले अच्छे दस्तावेज नहीं पा सकता हूं ...

वहाँ कुछ स्पष्ट है कि मैं याद कर रहा हूँ कि इस समस्या का कारण होगा?

यहाँ सब मेरे पास tilecache.cfg में है:

[cache]
type=Disk
base=/tmp/tilecache
[osm]
type=Mapnik
spherical_mercator=true
mapfile=/home/user/mapfile.xml

जवाबों:


8

एक नोट: मैं mod_wsgi mod_python पर सलाह देता हूं। और या तो थ्रेड = 1 और प्रक्रियाओं = एन (जहां एन सबसे अच्छा तार्किक प्रोसेसर की संख्या से मेल खाता है) के साथ डेमॉन मोड में mod_python या (आदर्श रूप से) mod_wsgi के साथ Apache prefork का उपयोग करना महत्वपूर्ण है। mod_wsgi डेमॉन मोड में Apache prefork या कार्यकर्ता के साथ प्रयोग किया जा सकता है। इसका कारण यह है कि टाइलचेच मैपनिक.पॅप ऑब्जेक्ट को कैश करता है और इसलिए इसे थ्रेड्स में साझा नहीं किया जाना चाहिए। मेपनिक कोर पूरी तरह से थ्रेडसेफ़ है, लेकिन मल्टीथ्रेडेड सर्वर अनुप्रयोगों को प्रति मैप मेकनीक.मैप ऑब्जेक्ट की एक आवृत्ति बनाने की आवश्यकता होती है। Mod_tile और Paleoserver एक ऐसे अनुप्रयोग के उदाहरण हैं जो इस तरह से मल्टीथ्रेडेड प्रतिपादन का समर्थन करते हैं, लेकिन टाइलकेच इस का समर्थन नहीं करता है। हालाँकि, थ्रेड = 1 के साथ टाइलकैच + मेपनिक + mod_wsgi डेमन मोड एक अच्छा मार्ग है,

जहाँ तक आपकी लेयर कॉन्फिगरेशन में "सर्विसवर्जन" जोड़ने की कोशिश है:

var tms = new OpenLayers.Layer.TMS ("TileCache Mapnik Layer", url, {serviceVersion: "1.0.0", layername: "osm", टाइप: "png"});


धन्यवाद! इसने समस्या को ठीक कर दिया है, लेकिन अब सेटकेंटर काम नहीं कर रहा है - मुझे लगता है कि यह सही ज़ूम स्तर पर जा रहा है, लेकिन यह ll = (0, 0) (अफ्रीका से दूर) पर केंद्रित है ... संभवतः मीटर बनाम डिक के साथ एक समस्या । डिग्री? इसके अलावा, सलाह के लिए धन्यवाद फिर से: mod_wsgi मैं इसे इस तरह सेट करूंगा और देखूंगा कि क्या मुझे बेहतर प्रदर्शन मिल सकता है। मैं 6 कोर और 12 जीबी रैम के साथ एक वीएम में चल रहा हूं, इसलिए यह कुछ फास्ट रेंडरिंग / कैशिंग के लिए बहुत होना चाहिए।
कोलमैन

2
OSM निर्देशांक मीटर में हैं, इसलिए आपको अनुमानित मीटर में केंद्र स्थापित करना होगा। Docs.openlayers.org/library/… देखें ।
क्रिस्टोफर श्मिट

धन्यवाद, ऐसा लगता है कि यह मेरी समस्या थी - जब मीटर में यह काम करता है, तो कॉर्ड के साथ सेटकेंटर का उपयोग करना।
कोलमेनम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.