OpenLayers метры в shp-файлах
Добавлено: 22 окт 2014, 10:32
Есть код, смысл чтение из shp файла контуров и наложение на карту. Привожу только код главной процедуры:
Суть проблемы:
1. Маркер накладывается правильно, оно и понятно у него координаты в градусах (широта/долгота)
2. А вот точки вершин полигонов, считываются из shp-файла и их координаты в метрах. В результате они накладываются где в районе Франции и не в том масштабе.
Понимаю, что должна быть какая-то трансформация их координат в проекцию EPSG:900913.
Подскажите, как быть.
Спасибо.
Код: Выделить всё
function init1(records) {
var pj_4326 = new OpenLayers.Projection("EPSG:4326");
var pj_900913 = new OpenLayers.Projection("EPSG:900913");
var options = {
projection: pj_900913,
displayProjection: pj_4326,
numZoomLevels: 18
};
map = new OpenLayers.Map('mapdiv', options);
map.addControl(
new OpenLayers.Control.MousePosition({
displayProjection: new OpenLayers.Projection('EPSG:4326')
})
);
//map = new OpenLayers.Map("mapdiv");
var mapnik = new OpenLayers.Layer.OSM();
map.addLayer(mapnik);
var siteStyle = {
'fillOpacity':0.2,
'strokeColor':'#FE2E2E'
};
//МАРКЕР выводится правильно
var lonlat = new OpenLayers.LonLat(40,57).transform(
pj_4326, // transform from WGS 1984
pj_900913 // to Spherical Mercator
);
var zoom = 13;
var markers = new OpenLayers.Layer.Markers( "Markers" );
map.addLayer(markers);
markers.addMarker(new OpenLayers.Marker(lonlat));
var pole = new OpenLayers.Layer.Vector( "Pole" );
map.addLayer(pole);
//for (var i = 0; i < records.length; i++) {
for (var i = 0; i < 10; i++) {
var record = records[i];
if (record.shapeType == ShpType.SHAPE_POLYGON || record.shapeType == ShpType.SHAPE_POLYLINE) {
var shp = record.shape;
for (var j = 0; j < shp.rings.length; j++) {
var ring = shp.rings[j];
if (ring.length < 1) continue;
var sitePoints = [];
for (var k = 0; k < ring.length; k++) {
//ВЕРШИНЫ полигонов считаны из shp-файла, в градусах. Выводятся не правильно!
var point = new OpenLayers.Geometry.Point(ring[k].x, ring[k].y);
document.getElementById('label').innerHTML=ring[k].x;
sitePoints.push(point);
}
sitePoints.push(sitePoints[0]);
var linearRing = new OpenLayers.Geometry.LinearRing(sitePoints);
var geometry = new OpenLayers.Geometry.Polygon([linearRing]);
var polygonFeature = new OpenLayers.Feature.Vector(geometry, null, siteStyle);
pole.addFeatures([polygonFeature]);
}
}
}
map.addControl(new OpenLayers.Control.LayerSwitcher());
map.setCenter(lonlat, zoom);
}
1. Маркер
Код: Выделить всё
var lonlat = new OpenLayers.LonLat(40,57).transform(
pj_4326, // transform from WGS 1984
pj_900913 // to Spherical Mercator
);
2. А вот точки вершин полигонов
Код: Выделить всё
var point = new OpenLayers.Geometry.Point(ring[k].x, ring[k].y);
Понимаю, что должна быть какая-то трансформация их координат в проекцию EPSG:900913.
Подскажите, как быть.
Спасибо.