Проблема: при совмещении в OpenLayers двух слоев(OSM и моего TMS) не совпадают проекции, хотя вроде все в меркаторе. Точка 2, к примеру должна соответствовать Москве. А теперь по порядку:
Рисую значит я карту из двух слоев:
Код: Выделить всё
function init() {
var options = {
projection: new OpenLayers.Projection("EPSG:900913"),
units: 'm',
maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
maxResolution: 156543.0399
};
map = new OpenLayers.Map('map',options);
layer = new OpenLayers.Layer.TMS('TMS',
"http://127.0.0.1:8000/shape-editor/tms/",
{serviceVersion: "1.0",
layername: "ip",
type: 'png',
isBaseLayer:false,
transparent: true,
projection:map.projection,
numZoomLevels: 19});
mapnikLayer=new OpenLayers.Layer.OSM("OpenStreetMap (Mapnik)");
map.addLayers([mapnikLayer,layer]);
map.zoomToMaxExtent();
}
Код: Выделить всё
MAX_ZOOM_LEVEL = 19
TILE_WIDTH = 256
TILE_HEIGHT = 256
def _unitsPerTile(zoomLevel):
return 400075016.68 / math.pow(2, zoomLevel)
def tile(request,xml_schema, zoom, x, y):
try:
zoom = int(zoom)
x= int(x)
y= int(y)
if zoom < 0 or zoom > MAX_ZOOM_LEVEL:
raise Http404
delta = _unitsPerTile(zoom)
minLong = x * delta - 200037508.34
minLat = y * delta - 200037508.34
maxLong = minLong + delta
maxLat = minLat + delta
mapfile = "geoip/mapnikStyles/ip.xml"
map = mapnik.Map(TILE_WIDTH,TILE_HEIGHT)
mapnik.load_map(map,mapfile)
map.zoom_to_box(mapnik.Envelope(minLong, minLat,maxLong, maxLat))
image = mapnik.Image(TILE_WIDTH, TILE_HEIGHT)
mapnik.render(map, image)
imageData = image.tostring('png')
return HttpResponse(imageData, mimetype="image/png")
except:
traceback.print_exc()
return HttpResponse("")
Код: Выделить всё
<Map srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +units=m +k=1.0 +nadgrids=@null +no_defs">
<Datasource name="commonDB">
<Parameter name="type">postgis</Parameter>
<Parameter name="dbname">django</Parameter>
<Parameter name="extent">-20037508,-19929239,20037508,19929239</Parameter>
<Parameter name="host">127.0.0.1</Parameter>
<Parameter name="port">5432</Parameter>
<Parameter name="multiple_geometries">true</Parameter>
<Parameter name="password">123</Parameter>
<Parameter name="srid">900913</Parameter>
<Parameter name="user">wonder</Parameter>
</Datasource>
<Style name="point">
<Rule>
<PointSymbolizer>
</PointSymbolizer>
</Rule>
</Style>
<Style name="link">
<Rule>
<LineSymbolizer>
</LineSymbolizer>
</Rule>
</Style>
<Layer name="points" >
<StyleName>point</StyleName>
<Datasource base="commonDB">
<Parameter name="table">geoip_point</Parameter>
</Datasource>
</Layer>
<Layer name="lines" >
<StyleName>link</StyleName>
<Datasource base="commonDB">
<Parameter name="table">geoip_link</Parameter>
</Datasource>
</Layer>
</Map>
Код: Выделить всё
# SELECT id,ST_SRID(point_geom),ST_X(point_geom),ST_Y(point_geom) from geoip_point;
id | st_srid | st_x | st_y
----+---------+------------------+------------------
1 | 900913 | 4187349.50310973 | 7509243.22427264
2 | 900913 | 768104.497089842 | 6659715.59821099
3 | 900913 | 6172897.64298635 | 4490855.01380304
4 | 900913 | 4289607.52212616 | 13864590.0782239
(4 rows)
Заранее спасибо за ответы.