<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

<div>On Wed, Mar 6, 2013 at 6:03 PM, Michael Geary <<a href="mailto:mg@mg.to" target="_blank">mg@mg.to</a>> wrote:<br>

> The meaning of the coordinate values depends on the coordinate reference<br>
> system (CRS) the GeoJSON file uses.<br>
><br>
> The default CRS is WGS84 (EPSG:4326), where the values do represent<br>
> longitude, latitude, and optional altitude.<br>
><br>
> If you specify a different CRS in the GeoJSON file, then the coordinate<br>
> values are easting, northing, and again optional altitude. The meaning of<br>
> the easting and northing depends on the CRS. I believe altitude is in meters<br>
> in all cases; someone correct me if I'm wrong.<br>
><br>
> As an example, my PolyGonzo library accepts GeoJSON in either the default<br>
> WGS84, or alternatively in Spherical Mercator (EPSG:3857) coordinates, also<br>
> known as Google Mercator. These are coordinates in "meters" on the projected<br>
> Spherical Mercator plane. If you use this in the GeoJSON, it allows slightly<br>
> faster display of the polygons because it only takes a single multiplication<br>
> to convert each coordinate to a pixel location instead of a sequence of<br>
> trigonometric operations.<br>
><br><br>On Thu, Mar 7, 2013 at 12:14 PM, Francis Galiegue <span dir="ltr"><<a href="mailto:fgaliegue@gmail.com" target="_blank">fgaliegue@gmail.com</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

</blockquote></div>
</div>Hmm, so the schemas I have written should be really split in two. I<br>
guess there is no defined way to tell from the get go if one GeoJSON<br>
representation is written using one coordinate reference system or<br>
another? How do APIs know whether one or the other coordinate system<br>
is used?</blockquote></div><br>Actually I described it poorly. A position is always an array of numbers in [ x, y, z ] order, where x and y are required, z is optional, and there may be additional optional numeric elements after that. Put more simply, it's an array of numbers with a minimum of two elements. Similarly, a bbox is an array of four or more numbers.</div>

<div class="gmail_extra"><br></div><div class="gmail_extra" style>What those numbers *represent* depends on the coordinate reference system. In WGS84, x and y are longitude and latitude. In Spherical Mercator, they are meters on the projected plane. In other CRSes they will mean other things. But the *format* of the numbers doesn't change; numbers are numbers.</div>

<div class="gmail_extra" style><br></div><div class="gmail_extra" style>I'm looking at your schema definition for a position:</div><div class="gmail_extra" style><br></div><div class="gmail_extra" style><pre style="margin-top:0px;margin-bottom:0px;padding:0px;border:0px;font-size:12px;font-family:Consolas,'Liberation Mono',Courier,monospace;color:rgb(51,51,51);line-height:10.666666984558105px">

<div class="" id="LC59" style="margin:0px;padding:0px 0px 0px 10px;border:0px;background-color:rgb(255,255,204)">        <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,128)">"position"</span><span class="" style="margin:0px;padding:0px;border:0px">:</span> <span class="" style="margin:0px;padding:0px;border:0px">{</span></div>

<div class="" id="LC60" style="margin:0px;padding:0px 0px 0px 10px;border:0px">            <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,128)">"description"</span><span class="" style="margin:0px;padding:0px;border:0px">:</span> <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(221,17,68)">"A single position"</span><span class="" style="margin:0px;padding:0px;border:0px">,</span></div>

<div class="" id="LC61" style="margin:0px;padding:0px 0px 0px 10px;border:0px">            <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,128)">"type"</span><span class="" style="margin:0px;padding:0px;border:0px">:</span> <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(221,17,68)">"array"</span><span class="" style="margin:0px;padding:0px;border:0px">,</span></div>

<div class="" id="LC62" style="margin:0px;padding:0px 0px 0px 10px;border:0px">            <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,128)">"minItems"</span><span class="" style="margin:0px;padding:0px;border:0px">:</span> <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,153,153)">2</span><span class="" style="margin:0px;padding:0px;border:0px">,</span></div>

<div class="" id="LC63" style="margin:0px;padding:0px 0px 0px 10px;border:0px">            <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,128)">"items"</span><span class="" style="margin:0px;padding:0px;border:0px">:</span> <span class="" style="margin:0px;padding:0px;border:0px">[</span> <span class="" style="margin:0px;padding:0px;border:0px">{</span> <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,128)">"type"</span><span class="" style="margin:0px;padding:0px;border:0px">:</span> <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(221,17,68)">"number"</span> <span class="" style="margin:0px;padding:0px;border:0px">},</span> <span class="" style="margin:0px;padding:0px;border:0px">{</span> <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,128)">"type"</span><span class="" style="margin:0px;padding:0px;border:0px">:</span> <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(221,17,68)">"number"</span> <span class="" style="margin:0px;padding:0px;border:0px">}</span> <span class="" style="margin:0px;padding:0px;border:0px">],</span></div>

<div class="" id="LC64" style="margin:0px;padding:0px 0px 0px 10px;border:0px">            <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,128)">"additionalItems"</span><span class="" style="margin:0px;padding:0px;border:0px">:</span> <span class="" style="margin:0px;padding:0px;border:0px;font-weight:bold">false</span></div>

<div class="" id="LC65" style="margin:0px;padding:0px 0px 0px 10px;border:0px">        <span class="" style="margin:0px;padding:0px;border:0px">},</span><div><br></div></div></pre></div><div class="gmail_extra" style><div class="gmail_extra">

<br></div><div class="gmail_extra" style>It looks like you need to change the additionalItems to allow for the optional numeric elements. Other than that, this should be fine regardless of the CRS, because the position array elements are numbers in all cases.</div>

<div class="gmail_extra" style><br></div><div class="gmail_extra" style>Looking at bbox:</div><div class="gmail_extra" style><br></div><div class="gmail_extra" style><pre style="margin-top:0px;margin-bottom:0px;padding:0px;border:0px;font-size:12px;font-family:Consolas,'Liberation Mono',Courier,monospace;color:rgb(51,51,51);line-height:10.666666984558105px">

<div class="" id="LC1" style="margin:0px;padding:0px 0px 0px 10px;border:0px"><span class="" style="margin:0px;padding:0px;border:0px">{</span></div><div class="" id="LC2" style="margin:0px;padding:0px 0px 0px 10px;border:0px">

    <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,128)">"$schema"</span><span class="" style="margin:0px;padding:0px;border:0px">:</span> <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(221,17,68)">"<a href="http://json-schema.org/draft-04/schema#">http://json-schema.org/draft-04/schema#</a>"</span><span class="" style="margin:0px;padding:0px;border:0px">,</span></div>

<div class="" id="LC3" style="margin:0px;padding:0px 0px 0px 10px;border:0px">    <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,128)">"id"</span><span class="" style="margin:0px;padding:0px;border:0px">:</span> <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(221,17,68)">"<a href="http://json-schema.org/geojson/bbox.json#">http://json-schema.org/geojson/bbox.json#</a>"</span><span class="" style="margin:0px;padding:0px;border:0px">,</span></div>

<div class="" id="LC4" style="margin:0px;padding:0px 0px 0px 10px;border:0px">    <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,128)">"description"</span><span class="" style="margin:0px;padding:0px;border:0px">:</span> <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(221,17,68)">"A bounding box as defined by GeoJSON"</span><span class="" style="margin:0px;padding:0px;border:0px">,</span></div>

<div class="" id="LC5" style="margin:0px;padding:0px 0px 0px 10px;border:0px">    <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,128)">"FIXME"</span><span class="" style="margin:0px;padding:0px;border:0px">:</span> <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(221,17,68)">"unenforceable constraint: even number of elements in array"</span><span class="" style="margin:0px;padding:0px;border:0px">,</span></div>

<div class="" id="LC6" style="margin:0px;padding:0px 0px 0px 10px;border:0px">    <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,128)">"type"</span><span class="" style="margin:0px;padding:0px;border:0px">:</span> <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(221,17,68)">"array"</span><span class="" style="margin:0px;padding:0px;border:0px">,</span></div>

<div class="" id="LC7" style="margin:0px;padding:0px 0px 0px 10px;border:0px">    <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,128)">"items"</span><span class="" style="margin:0px;padding:0px;border:0px">:</span> <span class="" style="margin:0px;padding:0px;border:0px">{</span> <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(0,0,128)">"type"</span><span class="" style="margin:0px;padding:0px;border:0px">:</span> <span class="" style="margin:0px;padding:0px;border:0px;color:rgb(221,17,68)">"number"</span> <span class="" style="margin:0px;padding:0px;border:0px">}</span></div>

<div class="" id="LC8" style="margin:0px;padding:0px 0px 0px 10px;border:0px"><span class="" style="margin:0px;padding:0px;border:0px">}</span></div></pre></div><div class="gmail_extra" style><br></div><div class="gmail_extra" style>

Maybe add a minItems: 4 here?</div><div class="gmail_extra" style><br></div><div class="gmail_extra" style>Regarding how applications and APIs know which CRS is used in a GeoJSON file, they get it from the crs property in the file and assume WGS84 if it's not specified. But as long as you just describe positions and bboxes as arrays of numbers, the CRS won't affect you.</div>

<div class="gmail_extra" style><br></div><div class="gmail_extra" style>-Mike</div></div></div>