[OpenLayers-Dev] SVG Format patch q's
Tim Schaub
tschaub at opengeo.org
Tue Nov 4 15:44:28 EST 2008
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.
More information about the Dev
mailing list