Proj4js - Можете ли вы преобразовать широту / долготу в UTM без зоны?

Я пытаюсь использовать Proj4js для выполнения некоторых преобразований координат, но очень мало информации о том, как его использовать.

Что я хочу сделать, так это преобразовать широту и долготу в координату UTM, но я не знаю, что такое зона. Это должно быть легко, так как долгота диктует зону, и если вы знаете, что зона выходит по умолчанию.

Я пытался сделать это в Proj4js, но получаю сообщение об ошибке

«Uncaught TypeError: undefined не является функцией»

Мой код выглядит следующим образом:

 proj4Arr = [-105.2098, 39.7458];
 var source = ('+proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees +no_defs');
 var dest = ("+proj=utm +ellps=GRS80 +datum=nad83 +units=m +no_defs");

 console.log(proj4(source, dest, proj4Arr));

Я просто не знаю, возможно ли это сделать без включенной зоны. Я мог бы сначала вычислить зону, а затем поместить ее в строку, если мне нужно, но я стараюсь не усложнять.

И если кто-нибудь знает какие-нибудь хорошие чисто js-ресурсы на примерах (не обязательно с использованием OpenLayers 3), я тоже был бы признателен за это.

Спасибо!


person mudrock    schedule 15.04.2015    source источник


Ответы (2)


Я думаю, вам нужно будет указать информацию о зоне для проекций для проекций proj4, чтобы использовать библиотеку. Без зоны это недопустимая проекция proj4.

Вот вопрос о том, как определить зону от lon / лат.

И вот два примера: [1], [2]

Вы можете проверить код js самостоятельно.

person mfdev    schedule 16.04.2015
comment
Я понял, что на самом деле это была проблема, но я проголосовал за ваш ответ как за правильный. Я использовал этот код, чтобы сначала получить зону: var zone = 1 + Math.floor((lngd+180)/6); - person mudrock; 20.04.2015

В этом 2021 году можно выложить исполняемый код, который не только отвечает на вопрос, но и демонстрирует все шаги, которые приводят к результатам преобразования координат.

  function utmzone_from_lon(lon_deg) {
    //get utm-zone from longitude degrees
    return parseInt(((lon_deg+180)/6)%60)+1;
  }
  
  function proj4_setdef(lon_deg) {
    //get UTM projection definition from longitude
    const utm_zone = utmzone_from_lon(lon_deg);
    const zdef = `+proj=utm +zone=${utm_zone} +datum=WGS84 +units=m +no_defs`;
    return zdef;
  }
  
  // computation test
  let lon_input = 95.99;
  let lat_input = 15.15;
  console.log("Input (long,lat):", lon_input, lat_input);
  const azone = utmzone_from_lon(lon_input);
  console.log(`UTM zone from longitude: ${azone}`);
  console.log("AUTO projection definition:", proj4_setdef(lon_input));
  
  // define proj4_defs for easy uses
  // "EPSG:4326" for long/lat degrees, no projection
  // "EPSG:AUTO" for UTM 'auto zone' projection
  proj4.defs([
  [
    "EPSG:4326",
    "+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees"
  ],
  ["EPSG:AUTO", proj4_setdef(lon_input)]]);
 
  // usage:
  // conversion from (long/lat) to UTM (E/N)
  const en_m = proj4("EPSG:4326", "EPSG:AUTO", [lon_input, lat_input]);
  const e4digits = en_m[0].toFixed(4); //easting
  const n4digits = en_m[1].toFixed(4); //northing
  console.log(`Zone ${azone}, (E,N) m: ${e4digits}, ${n4digits}`);
  
  // inversion from (E,N) to (long,lat)
  const lonlat_chk = proj4("EPSG:AUTO", "EPSG:4326", en_m);
  console.log("Inverse check:", lonlat_chk);
<script src="https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.6.2/proj4.js"></script>

person swatchai    schedule 08.05.2021