Собственно, как расчитывать сабж?
Поясню. Задача такова - загружается план некой территории, ресайзится на три масштаба: оригинальный размер, 256х256 и средний между ними (все размеры вписываются в прозрачные квадраты со стороной, кратной 256). Затем все это нарезается на тайлы.
Потом юзер на этом загруженном плане отмечает вершины полигона. Отметки сохраняются и при последующем просмотре плана отображаются. Так вот, при изменении масштаба полигон и область, которую он закрывал, не совпадают.
Мне думается, что это из-за неверного значения сабжа.
Вот код:
<script>
YMaps.jQuery(function () {
var myData = new YMaps.TileDataSource("/media/0/floor/tiles/", 1, 1);
myData.getTileUrl = function (tile, zoom) {
return this.getTileUrlTemplate() + zoom + "-" + tile.x + "-" + tile.y + ".png";
};
myData.getErrorTileUrl = function() {
return '{{ static('img/empty.png') }}';
};
var myLayer = function () {
return new YMaps.Layer(myData);
};
YMaps.Layers.add("level#map", myLayer);
// Создаем собственный тип карты
var myType = new YMaps.MapType(["level#map"], "Floor plan");
var myCoordSystem = new YMaps.CartesianCoordSystem(
new YMaps.Point(0, 0),
new YMaps.Point(1024, 1024),
1,
2
);
var map = new YMaps.Map(YMaps.jQuery("#YMapsID")[0], {
coordSystem: myCoordSystem
});
map.setCenter(new YMaps.Point(512, 512), 2, myType);
map.addControl(new YMaps.Zoom({ noTips: true }));
map.enableScrollZoom();
var Listener = YMaps.Events.observe(map, map.Events.Click, function (map, mEvent) {
var style = new YMaps.Style("default#greenPoint");
style.polygonStyle = new YMaps.PolygonStyle();
style.polygonStyle.fill = 1;
style.polygonStyle.outline = 1;
style.polygonStyle.strokeWidth = 4;
style.polygonStyle.strokeColor = "ffff0088";
style.polygonStyle.fillColor = "ff000055";
YMaps.Styles.add("polygon#Example", style);
var points = mEvent.getGeoPoint();
var polygon = new YMaps.Polygon([
new YMaps.Point(points.x, points.y)
],{style: "polygon#Example"});
map.addOverlay(polygon);
polygon.startEditing();
Listener.cleanup();
$('#mb').click(function() {
var pts = polygon.getPoints();
for (i in pts){
$('#room_add_form').append('<input type="hidden" name="room_params[]" value="' + pts[i]['x'] + ',' + pts[i]['y'] + '">');
}
});
});
});
</script>
Нормальный полигон: http://img360.imageshack.
Съехал: http://img715.imageshack.