1 votos

TileStache + OpenLayers TMS - Los azulejos se muestran desordenados

Hace poco recurrí a TileStache para renderizar los mosaicos de Mapnik debido a la opción de almacenamiento en caché. Antes, estaba usando Mapnik python bindings solamente y funcionaba perfectamente. Ahora que utilizo TileStache, los azulejos se muestran aleatoriamente en la posición incorrecta en el orden equivocado, al igual que las piezas de un rompecabezas. Sólo en el zoom 0 las características están en el lugar correcto en el mapa.

enter image description here

Esto me hace pensar que el problema podría estar en la fila (y) y la columna (x) utilizadas para generar los mosaicos con coord = ModestMaps.Core.Coordinate(y, x, zoom) o con la proyección que es EPSG 900913.

Utilizo OpenLayers.Layer.TMS para el mapeo.

Aquí algunos códigos:

Escritura de embaldosado:

def tile(request, version, shapefile, zoom, x, y):
        config = {
            "cache": {
            "name": "Disk",
             "path": "/mygeosite/stache",
             "umask": "0000"},
          "layers": {
            shapefile.filename: {
                "provider": {"name": "mapnik", "mapfile": "c:\\mygeosite\\geodjango\\test.xml"},
                "projection": "spherical mercator"
            }
          }
        }

        # like http://tile.openstreetmap.org/1/0/0.png
        # x = row , y = column , zoom = zoom level
        coord = ModestMaps.Core.Coordinate(y, x, zoom)
        config = TileStache.Config.buildConfiguration(config)
        bytes = TileStache.getTile(config.layers[shapefile.filename], coord, 'png')
        return HttpResponse(bytes[2], mimetype="image/png")

mapnik.xml

<?xml version="1.0" encoding="utf-8"?>
<Map srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs +over" background-color="rgb(115,145,173)">
    <Style name="featureLayerStyle">
        <Rule>
            <PolygonSymbolizer fill="rgb(247,237,238)"/>
            <LineSymbolizer stroke-width="0.5"/>
        </Rule>
    </Style>
    <Layer name="featureLayer" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs +over">
        <StyleName>featureLayerStyle</StyleName>
        <Datasource>
            <Parameter name="dbname">ezmapping</Parameter>
            <Parameter name="geometry_field">geom_multipolygon</Parameter>
            <Parameter name="geometry_table">&quot;shapefile_feature&quot;</Parameter>
            <Parameter name="password">ogrant22</Parameter>
            <Parameter name="simplify_geometries">1</Parameter>
            <Parameter name="srid">900913</Parameter>
            <Parameter name="table">(select geom_multipolygon, id from &quot;shapefile_feature&quot; where shapefile_id=68) as geom</Parameter>
            <Parameter name="type">postgis</Parameter>
            <Parameter name="user">postgres</Parameter>
        </Datasource>
    </Layer>
</Map>

OpenLayers.js:

map = new OpenLayers.Map('map',
          {maxResolution: 156543.0399,
            projection: new OpenLayers.Projection("EPSG:3857"),
            units: 'm',
            maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
            numZoomLevels: 21});
tiledLayer = new OpenLayers.Layer.TMS('TMS',
                "{{ tmsURL }}",
                {serviceVersion: "1.0",
                layername: "{{ shapefile.id }}",
                type: 'png'});
map.addLayer(tiledLayer);

2voto

Devdatta Tengshe Puntos 942

Utilice OpenLayers.Layer.XYZ en su lugar. TMS es sólo XYZ con la Y invertida por razones históricas.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X