Проекции и OpenLayers.Geometry.Point в openlayers

Я пытаюсь показать карту с тремя слоями (слои карт Google, слой wms и слой точек), это мой код:

     var map = new OpenLayers.Map({
         div: "map",
         maxExtent: new OpenLayers.Bounds(-20037508, -20037508, 20037508, 20037508.34)
     });


     var capaGoogle = new OpenLayers.Layer.Google(
                "Google Satellite",
                { type: G_SATELLITE_MAP, sphericalMercator: true, transparent: true }
            );

     var wmsOverlay = new OpenLayers.Layer.WMS("OpenLayers WMS",
         "http://localhost:1979/geoserver/wms",
         { layers: 'world:PYCIUDADES', transparent: true }, { isBaseLayer: false });


     var vectorLayer = new OpenLayers.Layer.Vector("vector");

     vectorLayer.addFeatures([
        new OpenLayers.Feature.Vector(
            new OpenLayers.Geometry.Point(-57.635021, -25.276987)

        ),
        new OpenLayers.Feature.Vector(
            new OpenLayers.Geometry.Point(-56.759034, -22.71539)
        )

        ]

    );

     map.addLayers([wmsOverlay, vectorLayer, capaGoogle]);

     map.addControl(new OpenLayers.Control.LayerSwitcher());
     var center = new OpenLayers.LonLat(-57.58, -25.27).transform(
     new OpenLayers.Projection("EPSG:4326"),
     map.getProjectionObject()
     )
     map.setCenter(center, 6);

слой "vectorLayer" должен быть выше моей карты, но я получаю это (мой слой wms находится в Южной Америке, мои точки должны быть также в Южной Америке, но они находятся недалеко от Африки):

http://i45.tinypic.com/34y40zk.png

Что я могу сделать?

заранее спасибо

2 ответа

Решение

Вы должны преобразовать координаты вашей точки:

var epsg4326 = new OpenLayers.Projection('EPSG:4326');
var epsg900913 = new OpenLayers.Projection('EPSG:900913');

vectorLayer.addFeatures([
    new OpenLayers.Feature.Vector(
        new OpenLayers.Geometry.Point(-57.635021, -25.276987).transform(epsg4326, epsg900913)
    ),
    new OpenLayers.Feature.Vector(
        new OpenLayers.Geometry.Point(-56.759034, -22.71539).transform(epsg4326, epsg900913)
    )
]);

"рядом с Африкой" = долгота 0 широта 0

когда вы просто вводите Долготу и Широту, OL считает это проекцией WGS84 (стандарт).

но поскольку вы используете слой Google (CapaGoogle), который представляет собой проекцию с привязкой к меркатору, вы в конечном итоге используете две эталонные проекции (4326 = WGS84 AND 900913 = меркатор) одновременно, и картографический сервер не учитывает местоположение ваших маркеров, поскольку они "неверны". следовательно, он просто помещает их в (0,0).

Как сказал DrNextGIS, вы должны "преобразовать координаты точек", чтобы все на вашей карте использовало одну и ту же проекцию.

у вас не было бы этой проблемы, если бы вы использовали простую карту OpenLayer (без Google или OSM).

Другие вопросы по тегам