[OpenLayers-Users] kml projection

Eric Lemoine eric.c2c at gmail.com
Fri Oct 10 13:02:23 EDT 2008


Hi. Since you yourself create the KML format the format and projection
options passed to the vector layer are useless. To make the KML format
do the re-projection try:

var format = new OpenLayers.Format.KML({
    internalProjection: new OpenLayers.Projection("ESPG:900913"),
    externalProjection: new OpenLayers.Projection("ESPG:4326")
});

Eric

2008/10/10, Saris Hein <hein at beta9.be>:
> Hi,
>
> I am trying to show an inline kml string onto a OSM layer (using the
> proper projection transformations).
>
> Everything seems to work, except the features in the KML string are
> not shown properly.
> I use this code:
>
>          function init(){
>              var options = {
>                  projection: new OpenLayers.Projection("EPSG:900913"),
>                  displayProjection: new OpenLayers.Projection("EPSG:
> 4326"),
>                  units: "km",
>                  numZoomLevels: 18,
>                  maxResolution: 156543.0339,
>                  maxExtent: new OpenLayers.Bounds(-20037508, -20037508,
>                                                   20037508, 20037508.34)
>              };
>              map = new OpenLayers.Map('map', options);
>
>      		// create OSM layer
>      		var mapnik = new OpenLayers.Layer.TMS(
>          		"OpenStreetMap (Mapnik)",
>            		"http://a.tile.openstreetmap.org/",
>          		{
>              		type: 'png', getURL: osm_getTileURL,
>              		displayOutsideMaxExtent: true,
>              		attribution: '<a href="http://
> www.openstreetmap.org/">OpenStreetMap</a>'
>          		}
>      		);
>
> 	    map.addLayer(mapnik);
>
> 			// Add a KML as inline String
> 			var kmlString = '<?xml version="1.0" encoding="UTF-8"?><kml
> xmlns="http://earth.google.com/kml/2.1
> "><Document><Style
> id="marker"><IconStyle><Icon><href>http://localhost:3000/openlayers/img/marker-green.png
> </href></Icon></IconStyle></Style><Placemark id="13856"><name>place
> name</name><description>NULL::character varying</
> description><styleUrl>#marker</
> styleUrl><Point><altitudeMode>relativeToGround</
> altitudeMode><coordinates>23.29555556,-17.98611111</coordinates></
> Point></Placemark><Placemark id="13852"><name>place name 2</
> name><description>NULL::character varying</
> description><styleUrl>#marker</
> styleUrl><Point><altitudeMode>relativeToGround</
> altitudeMode><coordinates>24.56638889,-17.54027778</coordinates></
> Point></Placemark></Document></kml>';
> 			
> 			kmlLayer = new OpenLayers.Layer.Vector("KML", {
> 					projection: new OpenLayers.Projection("EPSG:4326"),
> 					format: OpenLayers.Format.KML,
> 					formatOptions: {
> 						extractStyles: true,
> 						extractAttributes: true
> 						}
> 					});
> 					
> 			var kmlParser = new OpenLayers.Format.KML();
> 			var kmlFeatures = kmlParser.read(kmlString);
>
> 			kmlLayer.addFeatures(kmlFeatures);
>
> 			
> 			map.addLayer(kmlLayer);
> 			
>      		bounds = getFeaturesBounds(kmlLayer.features);
>
> map.zoomToExtent(bounds.transform(map.displayProjection,
> map.getProjectionObject()));
>   		}
>
> When I read the same KML from a file and use this code, the data is
> shown correctly:
>
> 			kmlLayer = new OpenLayers.Layer.GML("KML", "kml/data.kml",
> 			      {
> 			      projection: new OpenLayers.Projection("EPSG:4326"),
> 			      format: OpenLayers.Format.KML,
> 			      formatOptions: {
> 			        extractStyles: true,
> 			        extractAttributes: true
> 			        }
> 			      });
> 			
> My guess is that I should do something else to add the features to the
> kmlLayer. Like a projection maybe?
>
> Thanks for your time.
> --
> Hein Saris - mailto:hein at beta9.be
> Beta Nine - software engineering - http://www.beta9.be
> .Mac - heinsaris at mac.com - http://homepage.mac.com/heinsaris
> Skype: heinsaris
>
>
>
> _______________________________________________
> Users mailing list
> Users at openlayers.org
> http://openlayers.org/mailman/listinfo/users
>



More information about the Users mailing list