Получить координаты из Geojson с Powershell - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь экспортировать названия областей и границы из геойсона в CSV.Вот пример моих данных:

{
  "type" : "FeatureCollection",
  "features" : [{
     "type":"Feature",
        "properties" : {
           "id"            : "72639",
           "alltags"       : {
              "name:en" : "Area1",
              "admin_level" : "4"}
           },
           "geometry": {"type":"MultiPolygon","coordinates":[[[[36.407,45.071],[36.408,45.072],[36.406,45.071],[36.407,45.071]]],[[[35.082,45.611],[35.084,45.605],[35.082,45.611],[35.082,45.611]]]]}
        },{
     "type":"Feature",
        "properties" : {
           "id"            : "71245",
           "alltags"       : {
              "name:en" : "Area2",
              "admin_level" : "4"}
           },
           "geometry": {"type":"MultiPolygon","coordinates":[[[[27.189,50.625],[29.196,51.607],[27.195,50.561],[27.190,50.624],[27.189,50.625]]]]}
        } ]
}

Я хочу получить выходные данные с 'name: en' и такими координатами:

Area1
[[[[36.407,45.071],[36.408,45.072],[36.406,45.071],[36.407,45.071]]],[[[35.082,45.611],[35.084,45.605],[35.082,45.611],[35.082,45.611]]]]
Area2
[[[[27.189,50.625],[29.196,51.607],[27.195,50.561],[27.190,50.624],[27.189,50.625]]]]

Я использую следующий скрипт:

$path = "D:\!map\!test\"
$name_in = "test.GeoJson"
$coords_pattern = '"value":(.*?),"Count"'

$inputjson = Get-Content -Raw -Path $path$name_in | ConvertFrom-Json
Foreach ($feature in $inputjson.features){
   $area_name = $feature.properties.alltags.'name:en'
   $geojson = $feature.geometry
   $coordinates = $geojson.coordinates | ConvertTo-Json -Compress
   $borders = [regex]::match($coordinates, $coords_pattern).Groups[1].Value
   Write-Host $area_name
   Write-Host $borders
}

Для Area2 все в порядке, но Area1 состоит из 2 групп координат, а выход для Area1 «поврежден»:

Area1
[["36.407 45.071","36.408 45.072","36.406 45.071","36.407 45.071"]]
Area2
[[[27.189,50.625],[29.196,51.607],[27.195,50.561],[27.190,50.624],[27.189,50.625]]]

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

1 Ответ

2 голосов
/ 26 июня 2019

Возможно, проще использовать -replace:

$inputjson = $geo | ConvertFrom-Json
Foreach ($feature in $inputjson.features){
   $area_name = $feature.properties.alltags.'name:en'
   $geojson = $feature.geometry
   $coordinates = ($geojson.coordinates | ConvertTo-Json -Compress -Depth 4) -replace '\{"value":|,"Count":1\}|"', ''
   Write-Host $area_name
   Write-Host $coordinates
}

Вывод:

Area1
[[[[36.407,45.071],[36.408,45.072],[36.406,45.071],[36.407,45.071]]],[[[35.082,45.611],[35.084,45.605],[35.082,45.611],[35.082,45.611]]]]
Area2
[[[27.189,50.625],[29.196,51.607],[27.195,50.561],[27.190,50.624],[27.189,50.625]]]

Я понятия не имею, насколько глубоки вложения координатмассивы могут работать, поэтому вам придется поиграть с параметром -Depth в командлете ConvertTo-Json

...