OpenLayers.Image kml和openlayers的定位区别
OpenLayers.Image positionning difference between kml vs openlayers
我在使用 OpenLayers 正确定位图像时遇到问题。我有一个网络软件如何在网页上创建 KML 文件或显示地图。
这里是 Google Earth 上地图显示的屏幕截图以及使用 openlayers 的相同显示(Google Earth 是很好的可视化效果)。
地图有点偏北
什么是假的? epsg 转换?我需要用 gdalwarp 重建图像吗?
这是我的代码示例
function ConvertLonLatFromESPG4326ToESPG900913(LonLat) {
var lonlatTransforme = LonLat.clone();
if (map == null) {
lonlatTransforme.transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:900913"));
}
else {
lonlatTransforme.transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection(map.getProjectionObject().projCode));
}
return lonlatTransforme;
}
var bounds = new OpenLayers.Bounds();
bounds.extend(ConvertLonLatFromESPG4326ToESPG900913(new OpenLayers.LonLat(y1, x1)));
bounds.extend(ConvertLonLatFromESPG4326ToESPG900913(new OpenLayers.LonLat(y2, x2)));
var graphic = new OpenLayers.Layer.Image(
nomImage,
url,
bounds,
new OpenLayers.Size($("#map").width(), $("#map").height()),
{
//http://www.forumsig.org/showthread.php?t=26393
maxResolution: map.layers[0].resolutions[0],
resolutions: map.layers[0].resolutions,
isBaseLayer: false,
displayInLayerSwitcher: true
}
);
map.addLayer(graphic);
感谢您的帮助
我终于找到了解决方案,因为我认为它必须使用 gdalwarp。
这是我重建图像的代码
//step1 create a GeoTIFF
gdal_translate.exe -of Gtiff -co tfw=yes -a_ullr -5.25555900000001 52.739645 10.334585 41.047037 -a_srs EPSG:4326 "D:\imageSource.png" "D:\imageEtape1.tiff"
//step2 redraw GeoTIFF
gdalwarp.exe -co COMPRESS=LZW -r bilinear -s_srs EPSG:4326 -t_srs EPSG:900913 "D:\imageEtape1.tiff" "D:\imageEtape2.tiff"
//step3 transform the geoTiff to PNG
gdal_translate.exe -of PNG -a_ullr -5.25555900000001 52.739645 10.334585 41.047037 -a_srs EPSG:4326 "D:\imageEtape2.tiff" "D:\imageFinale.png"[/code]
我希望这可以帮助别人。 (我现在明白为什么 OpenLayers,虽然它知道解析 kml,但不管理 groundoverlay,因为结果将是我遇到的同样问题
我在使用 OpenLayers 正确定位图像时遇到问题。我有一个网络软件如何在网页上创建 KML 文件或显示地图。
这里是 Google Earth 上地图显示的屏幕截图以及使用 openlayers 的相同显示(Google Earth 是很好的可视化效果)。 地图有点偏北
什么是假的? epsg 转换?我需要用 gdalwarp 重建图像吗?
这是我的代码示例
function ConvertLonLatFromESPG4326ToESPG900913(LonLat) {
var lonlatTransforme = LonLat.clone();
if (map == null) {
lonlatTransforme.transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:900913"));
}
else {
lonlatTransforme.transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection(map.getProjectionObject().projCode));
}
return lonlatTransforme;
}
var bounds = new OpenLayers.Bounds();
bounds.extend(ConvertLonLatFromESPG4326ToESPG900913(new OpenLayers.LonLat(y1, x1)));
bounds.extend(ConvertLonLatFromESPG4326ToESPG900913(new OpenLayers.LonLat(y2, x2)));
var graphic = new OpenLayers.Layer.Image(
nomImage,
url,
bounds,
new OpenLayers.Size($("#map").width(), $("#map").height()),
{
//http://www.forumsig.org/showthread.php?t=26393
maxResolution: map.layers[0].resolutions[0],
resolutions: map.layers[0].resolutions,
isBaseLayer: false,
displayInLayerSwitcher: true
}
);
map.addLayer(graphic);
感谢您的帮助
我终于找到了解决方案,因为我认为它必须使用 gdalwarp。
这是我重建图像的代码
//step1 create a GeoTIFF
gdal_translate.exe -of Gtiff -co tfw=yes -a_ullr -5.25555900000001 52.739645 10.334585 41.047037 -a_srs EPSG:4326 "D:\imageSource.png" "D:\imageEtape1.tiff"
//step2 redraw GeoTIFF
gdalwarp.exe -co COMPRESS=LZW -r bilinear -s_srs EPSG:4326 -t_srs EPSG:900913 "D:\imageEtape1.tiff" "D:\imageEtape2.tiff"
//step3 transform the geoTiff to PNG
gdal_translate.exe -of PNG -a_ullr -5.25555900000001 52.739645 10.334585 41.047037 -a_srs EPSG:4326 "D:\imageEtape2.tiff" "D:\imageFinale.png"[/code]
我希望这可以帮助别人。 (我现在明白为什么 OpenLayers,虽然它知道解析 kml,但不管理 groundoverlay,因为结果将是我遇到的同样问题