Как преобразовать Turf.js полигон в WKT

#geo #turfjs #wkt

#geo #turfjs #wkt

Вопрос:

Я использую Turf.js для создания геометрии окружности из точки и радиуса, используя функции окружности. Пример:

c = turf.circle([0.0, 0.0], 100, {steps:1000, units:'kilometers'})

Возвращаемый результат — это Feature объект, и единственный способ, которым мне удалось представить геометрию, — это применить, c.geometry.coordinates который возвращает массив.

Однако моя цель — сгенерировать WKT или, по крайней мере, GeoJSON, но я не нашел способа сделать это. Кто-нибудь знает, как это сделать с turf.js или, в качестве альтернативы, знаете способ получить представление WKT круга с центром и радиусом в качестве входных данных?

Ответ №1:

Чтобы получить GeoJSON текст объекта, вы можете сделать это

 var gjs = JSON.stringify(polygon_object);
  

(Обратная проверка) Чтобы проанализировать строку gjs и снова преобразовать ее обратно в object (GeoJSON)

 var ojn = JSON.parse(gjs);
  

Живой код:-

 const pgon = turf.polygon(
    [
      [
        [50.848677, 4.338074],
        [50.833264, 4.344961],
        [50.840809, 4.366227],
        [50.852455, 4.367945],
        [50.858306, 4.346693],
        [50.848677, 4.338074]
      ]
    ],
    { name: "pgon1" }
  );
  
  const coords0 = pgon.geometry.coordinates[0];
  
  // Create WKT of the polygon
  var phead = `POLYGON((`;
  var ptail =  `))`;
  var pbody = "";
  var cur_xy = "";
  coords0.forEach( function(item, index){
   //console.log(item, index);
   //lonlat.push([...item]); //OK
   cur_xy = item[0].toFixed(4)  " "  item[1].toFixed(4);
   pbody  = cur_xy   ","; 
  }, pbody);
  
  console.log("*WKT*", phead pbody cur_xy ptail);
  
  // Create geojson of the polygon
  console.log("*GeoJSON*"   JSON.stringify(pgon));  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/Turf.js/5.1.5/turf.min.js"></script>
<p>TurfJS uses GeoJSON to represent geometric features. Here a polygon feature is created and its geometry / properties are manipulated.<br/><br/>The result is printed on the console.</p>