Разбор проекции WKT в OpenLayers 3

Я ищу метод (javascript) (внешняя или внутренняя часть ol3), который может анализировать проекцию WKT на ее текст proj4 и создавать проекцию.

 <SRS>PROJCS["GDA94 / MGA zone 53",GEOGCS["GDA94",DATUM["Geocentric_Datum_of_Australia_1994",SPHEROID["GRS 1980",6378137,298.2572221010002,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6283"]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433],AUTHORITY["EPSG","4283"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AUTHORITY["EPSG","28353"]]</SRS>

Выше показан пример элемента XML, содержащего SRS.

Я узнал, что если я смогу преобразовать это в текст proj4. Затем я могу добавить его как проекцию следующим образом:

proj4.defs("EPSG:28353", "+proj=utm +zone=53 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");

var def = proj4.defs(grid.srs);
var units = def.units;
        var proj = new ol.proj.Projection({
            code: grid.srs,
            units: units,
            axisOrientation: def.axis
        });
        proj.setExtent(/*...*/);
        ol.proj.addProjection(proj);
        var proj4Transform1 = proj4('EPSG:3857', grid.srs);
        ol.proj.addCoordinateTransforms(ol.proj.get('EPSG:3857'), proj,
            proj4Transform1.forward, proj4Transform1.inverse);
        var proj4Transform2 = proj4('EPSG:4326', grid.srs);
        ol.proj.addCoordinateTransforms(ol.proj.get('EPSG:4326'), proj,
            proj4Transform2.forward, proj4Transform2.inverse);

Можно ли также найти протяженность проекции в WKT или я должен искать это также снаружи?


person Poul K. Sørensen    schedule 27.03.2015    source источник
comment
Опубликуйте эту проблему на gis.stackexchange.com, и вы получите больше ответов оттуда. Для картографов, географов и специалистов по ГИС   -  person super    schedule 27.03.2015
comment
Вопросы OpenLayers актуальны здесь, а stackoverflow является предпочтительной платформой для вопросов openlayers-3.   -  person ahocevar    schedule 27.03.2015


Ответы (1)


proj4js также поддерживает строки WKT. Вы можете бросить то, что у вас есть (за исключением тега <SRS>), прямо в proj4js, используя тот же синтаксис:

proj4.defs("EPSG:28353", "PROJCS["GDA94 / MGA zone 53",GEOGCS["GDA94",DATUM["Geocentric_Datum_of_Australia_1994",SPHEROID["GRS 1980",6378137,298.2572221010002,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6283"]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433],AUTHORITY["EPSG","4283"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",135],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",10000000],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AUTHORITY["EPSG","28353"]]");

После того, как вы определили проекцию с помощью proj4.defs(), она будет немедленно доступна в OpenLayers 3, и все преобразования будут зарегистрированы. Таким образом, строка proj4.defs() — это все, что вам нужно, если вы не хотите устанавливать дополнительные параметры, такие как экстент проекции в вашем случае. Есть два варианта сделать это: 1) глобально:

ol.proj.get('EPSG:28353').setExtent(*/ ... */);

или 2) только для одного экземпляра ol.proj.Projection, который вы используете, например. настройте свой ol.View:

var projection = new ol.proj.Projection({
  code: 'EPSG:28353',
  extent: /* ... */
});
person ahocevar    schedule 27.03.2015
comment
Спасибо. Я думаю, что причина, по которой я должен сам добавлять преобразования координат, заключается в том, что я загружаюсь с помощью загрузчиков AMD после загрузки ol3. Я предполагаю, что для того, чтобы ol3 сам их забрал, его нужно добавить вместе с proj4 до того, как ol3 загрузится? Ты согласен? - person Poul K. Sørensen; 30.03.2015
comment
Правильно, и это можно считать ошибкой в ​​ol3. В настоящее время ol3 ожидает, что Proj4js будет предоставлен как proj4 в глобальном пространстве имен. См. github.com/openlayers/ol3/pull/2333#issuecomment-82170569 для потенциального исправления, если вы хотите предоставить запрос на извлечение. - person ahocevar; 31.03.2015