Hey- Jonathan Lister wrote: > >> The format doesn't yet support internalProjection/externalProjection >> parameters: I'd recommend doing so. >> (if this is too difficult, I can help make it happen.) > > I have a couple of questions about this, which expose my lack of > understanding of projections! In short, I really don't know how > setting projection parameters controls the appearance of a map or a > layer, nor how one should support this when reading in data. What is a > projection? How do you convert between them? >
For our purposes, a "projection" defines the relationship between a location on the earth (or a spheroid approximating the earth) and a corresponding location on a flat plane (map space). There is a second projection that takes coordinates in map space and transforms them into coordinates appropriate for your monitor (in pixels), but that is the easier one. So, the coordinates in your data are in some projection - or spatial reference system. If your data has coordinates that range from -180 to 180 in one axis and -90 to 90 in another, then your data is likely in a geographic projection - probably Geographic/WGS84. Note that while some people may tell you that this data is "unprojected", this is misleading. A circle on the earth will not be a circle on your map. A map in Geographic/WGS 84 is what you typically see hanging on the wall in 6th grade - northern & southern latitudes all stretched out east/west, equatorial latitudes not so distorted. Looking at Google Maps, you'll notice that it looks a bit different than a map in a geographic projection. The tiles that Google serves up for its maps (and Microsoft VE, and Yahoo Maps) are in a Mercator projection. We call it Spherical Mercator. This is a nice display of how the two projections distort things in different ways: Geographic: http://en.wikipedia.org/wiki/Image:Tissot_indicatrix_world_map_equirectangular_proj.svg Mercator: http://en.wikipedia.org/wiki/Image:Tissot_mercator.png So, there are tons of different spatial references systems for geospatial data. A lot of them can be represented by an identifying code. OpenLayers uses the "EPSG:X" shorthand to identify spatial reference systems. You will get in trouble if you claim this in certain circles, but for our purposes, if the coordinates in your geometry are in Geographic/WGS84 you can represent the spatial reference system with the code "EPSG:4326". For data in spherical mercator, we use "EPSG:900913". When using a format to parse your data (translate SVG or whatever into OpenLayers.Feature.Vector objects), you can provide the ability to transform geometry coordinates as they are parsed. The externalProjection property of a format represents the spatial reference system of your source data - i.e. the remote or native spatial reference system. The internalProjection property of a format represents the map's spatial reference system - i.e. the local spatial reference system used for display. So, if you want to read in data in Geographic/WGS84 and display it over Google's tiles, you set the following: externalProjection: new OpenLayers.Projection("EPSG:4326"), internalProjection: new OpenLayers.Projection("EPSG:900913") Then, the format applies a transform after parsing geometries. Specifically: // transform from remote to local projection geometry.transform(this.externalProjection, this.internalProjection) You can look at one of the other formats for inspiration. http://trac.openlayers.org/browser/trunk/openlayers/lib/OpenLayers/Format/GML/Base.js#L314 Tim > Thanks! > > > J. > > -- Tim Schaub OpenGeo - http://opengeo.org Expert service straight from the developers. _______________________________________________ Dev mailing list [email protected] http://openlayers.org/mailman/listinfo/dev
