0

一部の KML ファイルから座標を抽出する perl スクリプトを作成しました。このような:

if ($start ne 6) 
  {
  $sheet = substr($line,$start,$end-$start);
  }
  $start =  index($line,"<coordinates>") + 13;
  $end = index($line,"</coordinates>");
  $coords = substr($line,$start,$end-$start); 
if ($start ne 12) 
  {
  @values = split (' ',$coords);
  foreach (@values) {}
  my (@lat, @long);
( $lat[@lat], $long[@long] )
    = split /,/ for @values;

これにより、次の行から座標が抽出されます。 <Polygon><outerBoundaryIs><LinearRing><coordinates>-4.799999989183125,54.479999998144478 -5.399999989687073,54.479999998084068 -5.409999989614521,54.739999998345262 -4.809999989103597,54.749999998414239 -4.799999989183125,54.479999998144478</coordinates></LinearRing></outerBoundaryIs></Polygon>

しかし、1行でタグを何度も繰り返す複数のリングポリゴンがある場合<LinearRing><coordinates>、最初の座標セットのみを取得します(ご想像のとおり)。

私の質問は次のとおりです。複数のポリゴンに対応するために既に持っているものを変更できる方法はありますか、それとも別の解析手法を使用する必要がありますか?

ありがとう。

4

1 に答える 1

0

インデックスを逆インデックスに置き換えてから、 < と > の間のものをすべて削除して修正しました。

while ( <INPUT> ) {
  chomp();
    $line = $_;
  $start =  index($line,"SHEET") + 7;
  $end = index($line,"</SimpleData>");
if ($start ne 6) 
  {
  $sheet = substr($line,$start,$end-$start);
  }
  $start =  index($line,"<coordinates>") + 13;
  $end = rindex($line,"</coordinates>");
  $coords = substr($line,$start,$end-$start);
  $coords =~ s/<.*>//; 
if ($start ne 12) 
  {

  @values = split (' ',$coords);
于 2013-07-02T13:05:00.510 に答える