[OpenLayers-Users] How to change geometry's projection back andforth

Lehtonen, Mika mika at digikartta.net
Mon Dec 8 15:14:30 EST 2008


Thanks,
downloaded, tested, happy :-)

- mika -

Christopher Schmidt kirjoitti:
> On Mon, Dec 08, 2008 at 09:50:54PM +0200, Lehtonen, Mika wrote:
>   
>> Thanks Arnd,
>>
>> you nailed it. Removing
>>         if (point.transformed) {
>>         this.log("point already transformed");
>>         return;
>>         }
>>     
>
> This code is not in the proj4js trunk code.
>
> http://svn.osgeo.org/metacrs/proj4js/trunk/
>
>   
>> made it possible to reproject the geometry back. Just wondering whether 
>> there had been any changes in newer proj4js..  Mine is dated 2007. Have 
>> to check that.
>>
>> So this was not an Openlayers issue after all.
>>
>> - mika -
>>
>> Arnd Wippermann kirjoitti:
>>     
>>> Hi,
>>>
>>> Perhaps this is the issue:
>>> http://www.mail-archive.com/users@openlayers.org/msg04875.html
>>>  
>>> Arnd Wippermann
>>>
>>> -----Ursprüngliche Nachricht-----
>>> Von: users-bounces at openlayers.org [mailto:users-bounces at openlayers.org] Im
>>> Auftrag von Lehtonen, Mika
>>> Gesendet: Montag, 8. Dezember 2008 15:57
>>> An: OpenLayers
>>> Betreff: [OpenLayers-Users] How to change geometry's projection back
>>> andforth
>>>
>>> Hi,
>>> I am trying to limit the size of a drawn geometry (regular polygon). So
>>> after the feature is created, I jump to my limiting function which suppose
>>> to redraw the geometry taking into account the set limit. My map is in
>>> EPSG:900913 (spherical mercator) because of the Google base maps, but all my
>>> geometries are natively in EPSG:2393. So in order to accomplish some
>>> comparison I have to reproject the drawn polygon into 2393, do the
>>> comparison and then reproject it back to 900913. The drawn geometry
>>> reprojects nicely to 2393 (with proj4js) but I can't get the new geometry
>>> reprojected back. What's wrong with this? Here is the
>>> essential:
>>>                     geometria = event.feature;
>>>                     kkj = geometria.geometry;
>>>                     kkj.transform(new
>>> OpenLayers.Projection("EPSG:900913"), new
>>> OpenLayers.Projection("EPSG:2393"));
>>>                     radius =
>>> OpenLayers.Number.limitSigDigs((kkj.getBounds().getHeight()/1000),2);
>>>                     if (radius > 50) {
>>>                     var scale = 50 / radius;
>>>                     var x = kkj.getBounds().getCenterLonLat().lon;
>>>                     var y = kkj.getBounds().getCenterLonLat().lat;
>>>                     var origin = new OpenLayers.Geometry.Point(x,y);
>>>                         kkj.resize(scale,origin,1); alert(kkj);
>>>                     kkj.transform(new
>>> OpenLayers.Projection("EPSG:2393"), new
>>> OpenLayers.Projection("EPSG:900913"));
>>> alert(kkj);   /* this is exactly the same than it was before */
>>>                     geometria.geometry = kkj;
>>>                     vlayer.drawFeature(geometria);
>>>                     // vlayer.redraw(true);
>>>                     OpenLayers.Util.getElement('metapalkki').innerHTML = "
>>> Hakuympyrän säde voi olla max. 50 km!";
>>>                     } else {
>>>                     OpenLayers.Util.getElement('metapalkki').innerHTML = "
>>> Hakuympyrän säde on " + radius + "km";
>>>                     }
>>>
>>> If I do this without reprojection, the geometry limitation works, although
>>> the scale is a little bit wrong and my other comparisons don't work because
>>> they should be using 2393.
>>>
>>> - mika -
>>> _______________________________________________
>>> Users mailing list
>>> Users at openlayers.org
>>> http://openlayers.org/mailman/listinfo/users
>>>
>>>   
>>>       
>> _______________________________________________
>> Users mailing list
>> Users at openlayers.org
>> http://openlayers.org/mailman/listinfo/users
>>     
>
>   



More information about the Users mailing list