7 votos

El uso de Tilestache y el Folleto Para Mostrar los Rásteres En el Nativo de Proyección

Tengo una colección de viejas Idaho state highway mapas en formato GeoTiff. La proyección que estos mapas han sido georeferenciados en es una transversal de mercator proyección, llamado IDTM83 (Idaho Transversal de Mercator - NAD 83). La proyección se define como:

+proj=tmerc +lat_0=42 +lon_0=-114 +k=0.9996 +x_0=2500000 +y_0=1200000 +ellps=GRS80 +unidades=m +no_defs

La proyección es básicamente una modificación de la proyección UTM en la que se compensa por el hecho de que el estado de Idaho está dividida por zonas UTM 11 y 12. Mi meta es servir a los mapas en el nativo de IDTM83 de proyección usando Tilestache y el Folleto. Yo soy capaz de servir a estos mismos los rásteres que ya se han proyectado en el mundo de mercator, pero la proyección distorsiona mucho de la línea de trabajo desde el mapa original.

Ha habido algunos recursos útiles en internet sobre cómo servir a los datos proyectados utilizando Tilestache y Prospecto, aquí:

  1. https://gist.github.com/skogsmaskin/6452343
  2. http://blog.thematicmapping.org/2012/07/using-custom-projections-with-tilecache.html.

El mapnik de configuración para uno de mis mapas raster parece:

<Map background-color="steelblue" 
srs="+proj=tmerc +lat_0=42 +lon_0=-114 +k=0.9996 +x_0=2500000 +y_0=1200000 +ellps=GRS80 +units=m +no_defs"
maximum-extent="2205517,1134032,2834671,2040323">
<Style name="raster-style">
  <Rule>
      <RasterSymbolizer/>
  </Rule>
</Style>

<Layer name="idaho-1947" status="on" srs="+proj=tmerc +lat_0=42 +lon_0=-114 +k=0.9996 +x_0=2500000 +y_0=1200000 +ellps=GRS80 +units=m +no_defs">
<StyleName>raster-style</StyleName>
<Datasource>
    <Parameter name="type">gdal</Parameter>
    <Parameter name="file">GIS/IdahoMaps/1947_geo_idtm.tif</Parameter>
    <Parameter name="format">tiff</Parameter>
</Datasource>
</Layer>
</Map>

Usando Python, soy capaz de generar mapas de uso de las cajas de contorno de la IDTM sistema de coordenadas con el Mapnik de la API. Así que sé que Mapnik no es el problema.

Mi Tilestache de configuración es bastante básico:

    {
  "cache": {"name": "Test","verbose":"True"},
  "layers": {
    "idaho-1947": {
        "provider": {"name": "mapnik", "mapfile": "./mapnik.xml"},
        "projection": "TileStache.Goodies.Proj4Projection:Proj4Projection('+proj=tmerc +lat_0=42 +lon_0=-114 +k=0.9996 +x_0=2500000 +y_0=1200000 +ellps=GRS80 +units=m +no_defs',[5545984, 2772992, 1386496, 693248, 346624, 173312, 86656, 43328, 21664, 10832, 5416, 2708, 1354, 677, 338.5, 169.25, 84.625, 42.3125, 21.15625, 10.578125, 5.2890625, 1])"
    }}

Mi folleto visor es muy básica, como en el Enlace #2 arriba:

  var crs = L.CRS.proj4js('SR-ORG:6677', '+proj=tmerc +lat_0=42 +lon_0=-114 +k=0.9996 +x_0=2500000 +y_0=1200000 +ellps=GRS80 +units=m +no_defs', new L.Transformation(1, -432000, -1, 2040323));
  crs.scale = function(zoom) {
      return 1 / (234.375 / Math.pow(2, zoom));
  };

  var map = new L.Map('map', {
    crs: crs,
    layers: [
      new L.TileLayer('http://localhost:8080/idaho-1947/{z}/{x}/{y}.png', {
        minZoom: 0,
        maxZoom: 4,
        continuousWorld: true
      })
    ],
    center: new L.LatLng(45, -116),
    zoom: 3,
    continuousWorld: true
  });

Tengo la intención de perfeccionar esta vez puedo conseguir los mapas para mostrar, pero el ejemplo es el uso de UTM de los datos y de las escalas deben ser bastante similares. Estoy atrapado aquí. El uso de JavaScript ejemplos en los enlaces de arriba, me puede mostrar cualquiera de los mapas - sólo el azul de fondo. Yo sé lo que estoy tratando de hacer es posible en ArcGIS Server, pero realmente me gustaría aprovechar algunas de las herramientas OpenSource.

1voto

C. Ross Puntos 126

En Tilestache especifique la siguiente matriz de la resolución en la proyección de objetos:

[5545984, 2772992, 1386496, 693248, 346624, 173312, 86656, 43328, 21664, 10832, 5416, 2708, 1354, 677, 338.5, 169.25, 84.625, 42.3125, 21.15625, 10.578125, 5.2890625, 1]

Usted nos dijo que usted está usando la misma resolución que el enlace #2, que son:

[234.375, 117.1875, 58.59375, 29.296875, 14.6484375]

Esto significa que su folleto de aplicación probablemente no consulta el derecho de los azulejos.

Miré un poco en el Folleto de código a partir de tu comentario. Parece que usted todavía tiene una escala diferente de la matriz de su TileStache config. Una conjetura (no probado) sería:

var resolutions = [
  5545984, 2772992, 1386496, 693248, 346624,
  173312, 86656, 43328, 21664, 10832, 5416,
  2708, 1354, 677, 338.5, 169.25, 84.625,
  42.3125, 21.15625, 10.578125, 5.2890625, 1];

// I'm really not sure about this Transformation clause in your case...
var crs = L.CRS.proj4js('SR-ORG:6677', '+proj=tmerc +lat_0=42 +lon_0=-114 +k=0.9996 +x_0=2500000 +y_0=1200000 +ellps=GRS80 +units=m +no_defs'/*, new L.Transformation(1, -432000, -1, 2040323)*/);
crs.scale = function(zoom) {
    return 1 / resolutions[zoom];
};

var map = new L.Map('map', {
  crs: crs,
  layers: [
    new L.TileLayer('http://localhost:8080/idaho-1947/{z}/{x}/{y}.png', {
      minZoom: 0,
      maxZoom: resolutions.length-1,
      continuousWorld: true
    })
  ],
  center: new L.LatLng(45, -116),
  zoom: 3,
  continuousWorld: true
});

Si esto no funciona, tendrá que comprobar cuáles son las baldosas solicitado. En Chrome, abra la herramienta dev (F12) y mira en la pestaña de la Red para ver lo que son las piezas solicitadas.

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