Chcę nałożyć niektóre dane, których rzutowanie to WGS-84 na warstwę mapy Google w OpenLayers. Ale po prostu nie mogę zrobić ich we właściwym miejscu. Zrobiłem w następujący sposób:
map = new OpenLayers.Map('map', {
numZoomLevels: 20,
projection: new OpenLayers.Projection("EPSG:900913"),
displayProjection: new OpenLayers.Projection("EPSG: 4326")
});
googlelayer = new OpenLayers.Layer.Google("Google street", {sphericalMercator: true});
map.addLayer(googlelayer);
veclayer = new OpenLayers.Layer.Vector("vector", {
projection: map.displayProjection
};
var geojson_format = new OpenLayers.Format.GeoJSON();
veclayer.addFeatures(geojson_format.read(jsonData));
Chociaż mam przypisany veclayer
w projekcji 4326, ale nadal jest interpretowany jako 900913, a system koordynacji wyświetlania jest również 900913, chociaż ustawiłem displayProjection na 4326. Jaki błąd popełniam?
preFeatureInsert
oznacza ta właściwość , w każdym razie nie mogę jej znaleźć w oficjalnym dokumencie API ~Masz miejsce za dwukropkiem.
Projection("EPSG: 4326")
tak naprawdęProjection("EPSG:4326")
nie powinno być wcześniej miejsca4326
.źródło
Zamieściłem mój stary fragment kodu. Pamiętam, że clou jest w projekcjach. addTransform powinien rozwiązać twój problem. (proj4)
źródło
Możesz tam spaść, ponieważ szukasz nieco przesuniętej reprezentacji wektora w Mapach Google, podczas gdy na innych warstwach bazowych jest w porządku, a przekształcenie EPSG: 4326 na EPSG: 900913 lub EPSG: 3857 nie rozwiązuje wszystkiego.
W Mapach Google występuje błąd, który nie ocenia dobrze rozmiaru div podczas inicjowania obiektu OpenLayers Map, jeśli nie jest jeszcze widoczny. Dlatego po wywołaniu transform () i przerysowania () konieczne może być
myMapObject.updateSize();
powiadomienie Google o rzeczywistej proporcji mapy na ekranie.Jeśli szukasz ogólnego rozwiązania do przekształcania warstw z jednego rzutu na drugi, możesz użyć tej funkcji:
Gotowe!
źródło
W przypadku Yahoo możesz wypróbować następujące opcje:
źródło