pax_global_header00006660000000000000000000000064146333511310014512gustar00rootroot0000000000000052 comment=e092f5e8e740d657e60f480327c67e51af62cf5d libgeo-converter-wkt2kml-perl-0.0.3/000077500000000000000000000000001463335113100173115ustar00rootroot00000000000000libgeo-converter-wkt2kml-perl-0.0.3/Build.PL000066400000000000000000000010511463335113100206020ustar00rootroot00000000000000use strict; use warnings; use Module::Build; my $builder = Module::Build->new( module_name => 'Geo::Converter::WKT2KML', license => 'perl', dist_author => 'OHTSUKA Ko-hei ', dist_version_from => 'lib/Geo/Converter/WKT2KML.pm', requires => { 'Test::Base' => 0, 'version' => 0, 'Exporter' => 0, 'XML::Simple' => 0, 'XML::Parser' => 0, }, add_to_cleanup => [ 'Geo-Converter-WKT2KML-*' ], ); $builder->create_build_script(); libgeo-converter-wkt2kml-perl-0.0.3/Changes000066400000000000000000000004651463335113100206110ustar00rootroot00000000000000Revision history for Geo-Converter-WKT2KML 0.0.3 Wed Aug 27 2008 Use XML::Parser to parse KML 0.0.2 Wed Aug 27 2008 Remove perlcritic.t to avoid perlcritic test fails. # Perlcriic error is not occur in my local environment... 0.0.1 Mon Aug 25 03:22:28 2008 Initial release. libgeo-converter-wkt2kml-perl-0.0.3/MANIFEST000066400000000000000000000002551463335113100204440ustar00rootroot00000000000000Build.PL Changes lib/Geo/Converter/WKT2KML.pm Makefile.PL MANIFEST META.yml README t/00.load.t t/01.wkt2kml.t t/02.kml2wkt.t t/03.wkt2kml_realcase.t t/04.kml2wkt_realcase.t libgeo-converter-wkt2kml-perl-0.0.3/META.yml000066400000000000000000000010131463335113100205550ustar00rootroot00000000000000--- name: Geo-Converter-WKT2KML version: 0.0.3 author: - 'OHTSUKA Ko-hei ' abstract: Simple converter between WKT and KML license: perl resources: license: http://dev.perl.org/licenses/ requires: Exporter: 0 Test::Base: 0 XML::Parser: 0 XML::Simple: 0 version: 0 provides: Geo::Converter::WKT2KML: file: lib/Geo/Converter/WKT2KML.pm version: 0.0.3 generated_by: Module::Build version 0.2808 meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.2.html version: 1.2 libgeo-converter-wkt2kml-perl-0.0.3/Makefile.PL000066400000000000000000000002521463335113100212620ustar00rootroot00000000000000use lib qw(lib); use Module::Build::Compat; Module::Build::Compat->run_build_pl(args => \@ARGV); Module::Build::Compat->write_makefile(build_class => 'Module::Build'); libgeo-converter-wkt2kml-perl-0.0.3/README000066400000000000000000000011711463335113100201710ustar00rootroot00000000000000Geo-Converter-WKT2KML This module provides two functions, wkt2kml and kml2wkt. These are convert geometry formats WKT (Well-Known Text) and KML each other. INSTALLATION To install this module, run the following commands: perl Makefile.PL make make test make install Alternatively, to install with Module::Build, you can use the following commands: perl Build.PL ./Build ./Build test ./Build install DEPENDENCIES Exporter XML::Simple Test::Base COPYRIGHT AND LICENCE Copyright (C) 2008, OHTSUKA Ko-hei This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. libgeo-converter-wkt2kml-perl-0.0.3/lib/000077500000000000000000000000001463335113100200575ustar00rootroot00000000000000libgeo-converter-wkt2kml-perl-0.0.3/lib/Geo/000077500000000000000000000000001463335113100205715ustar00rootroot00000000000000libgeo-converter-wkt2kml-perl-0.0.3/lib/Geo/Converter/000077500000000000000000000000001463335113100225405ustar00rootroot00000000000000libgeo-converter-wkt2kml-perl-0.0.3/lib/Geo/Converter/WKT2KML.pm000066400000000000000000000177311463335113100242020ustar00rootroot00000000000000package Geo::Converter::WKT2KML; use warnings; use strict; use Carp; use XML::Simple; $XML::Simple::PREFERRED_PARSER = 'XML::Parser'; use version; our $VERSION = qv('0.0.3'); use base 'Exporter'; our @EXPORT = qw( wkt2kml kml2wkt ); my $coord = qr{[\+\-]?\d+(?:\.\d+)?}; my $formatter; $formatter = { 'point' => sub { '' . coordformatter( $_[0] ) . '' }, 'multipoint' => sub { $formatter->{geometrycollection}->([ map { $formatter->{point}->([$_]) } @{$_[0]} ]); }, 'linestring' => sub { '' . coordformatter( $_[0] ) . '' }, 'multilinestring' => sub { $formatter->{geometrycollection}->([ map { $formatter->{linestring}->($_) } @{$_[0]} ]); }, 'polygon' => sub { my @lnr; push @lnr, $formatter->{LinearRing}->([shift(@{$_[0]})],'outerBoundaryIs'); push @lnr, $formatter->{LinearRing}->($_[0],'innerBoundaryIs') if ( @{ $_[0] } ); "\n" . join( "\n", @lnr ) . "\n"; }, 'LinearRing' => sub { my $bound = $_[1]; join ( "\n", map { "<$bound>" . coordformatter( $_ ) . "" } @{$_[0]} ); }, 'multipolygon' => sub { $formatter->{geometrycollection}->([ map { $formatter->{polygon}->($_) } @{$_[0]} ]); }, 'geometrycollection' => sub { "\n" . join( "\n", @{$_[0]} ) . "\n" }, }; sub coordformatter { my @coords = @{$_[0]}; join( "\n", map { my $s = $_; $s =~ s/\s+/,/g; $s } @coords ); } sub wkt2kmlparser { return wkt2kmlformatter($_[1]) unless $_[0]; $_[0] =~ s{\A # start of the string \s* # spaces ( [\(\)] # paren | [a-zA-Z]+ # command | (?:$coord\s+)+$coord # coordinate | , # delimiter ) }{}x; return wkt2kmlformatter($_[1]) if $1 eq ')'; my $token = $1 eq '(' ? wkt2kmlparser( $_[0], [] ) : $1 ne ',' ? lc($1) : undef; push @{ $_[1] }, $token if ( defined( $token ) ); goto &wkt2kmlparser; } sub wkt2kmlformatter { return $_[0] if ( !ref($_[0]) || $_[0]->[0] !~ /^[a-z]+$/ ); my @args = @{$_[0]}; my @reslt; while ( my $command = shift(@args) ) { if ( my $format = $formatter->{$command} ) { push ( @reslt, $format->( shift @args ) ); } else { croak "WKT $command cannot be interpreted"; } } return @reslt > 1 ? \@reslt : $reslt[0]; } sub wkt2kml { wkt2kmlparser( $_[0], []) } my $builder; $builder = { 'Point' => sub { my $buf = 'POINT(' . join( ',', map { coordbuilder($_->{coordinates}) } @{$_[0]} ) . ')'; $buf = 'MULTI' . $buf if ( @{$_[0]} > 1 ); $buf; }, 'LineString' => sub { my $buf = '(' . join( '),(', map { coordbuilder($_->{coordinates}) } @{$_[0]} ) . ')'; $buf = @{$_[0]} > 1 ? "MULTILINESTRING($buf)" : "LINESTRING$buf"; $buf; }, 'Polygon' => sub { my $buf = '(' . join( '),(', map { $builder->{linearring}->($_) } @{$_[0]} ) . ')'; $buf = @{$_[0]} > 1 ? "MULTIPOLYGON($buf)" : "POLYGON$buf"; $buf; }, 'linearring' => sub { my @lnr; push( @lnr, $_[0]->{outerBoundaryIs}->{LinearRing}->{coordinates} ); push( @lnr, map { $_->{LinearRing}->{coordinates} } ( ref($_[0]->{innerBoundaryIs}) eq 'ARRAY' ? @{$_[0]->{innerBoundaryIs}} : ($_[0]->{innerBoundaryIs}) ) ) if ( defined($_[0]->{innerBoundaryIs}) ); '(' . join( '),(', map { coordbuilder($_) } @lnr ) . ')'; }, 'MultiGeometry' => sub { my @key = grep { $builder->{$_} } keys %{$_[0]->[0]}; my $buf = join( ',', map { kml2wktbuilder( $_, $_[0]->[0]->{$_} ) } @key ); $buf = "GEOMETRYCOLLECTION($buf)" if ( @key > 1 ); $buf; }, }; sub coordbuilder { my $coords = $_[0]; $coords =~ s/^[\s\n]*(.+)[\s\n]*$/$1/m; my @coords = split( /[\s\n]+/, $coords ); join( ",", map { my $s = $_; $s =~ s/,/ /g; $s } @coords ); } sub kml2wktbuilder { my $key = shift; my $arg = shift; if ( my $build = $builder->{$key} ) { my @reslt = $build->( ref($arg) eq 'ARRAY' ? $arg : [$arg]); return @reslt > 1 ? \@reslt : $reslt[0]; } else { croak "KML $key element cannot be interpreted"; } } sub kml2wkt { my $xml = XMLin($_[0],KeepRoot => 1); my ($key) = keys %{$xml}; kml2wktbuilder( $key, $xml->{$key} ); } 1; # Magic true value required at end of module __END__ =head1 NAME Geo::Converter::WKT2KML - Simple converter between WKT and KML =head1 SYNOPSIS use Geo::Converter::WKT2KML; # Convert WKT to KML's geometry fragment wkt2kml('POINT(135 35)'); # Convert KML's geometry fragment to KML kml2wkt('135,35'); =head1 DESCRIPTION This module provides two functions, wkt2kml and kml2wkt. These are convert geometry formats WKT (Well-Known Text) and KML each other. This module can interpret only geometry fragment of KML, cannot interpret full spec KML. Only elements can be understood are: * Point * LineString * Polygon * MultiGeometry * (Belows are child elements of aboves) * coordinates * LinearRing * outerBoundaryIs * innerBoundaryIs WKT is also understood full spec one. "POINT ZM ..." or "POLYGON EMPTY" are cannot interpreted. Only commands can be understood are: * POINT * MULTIPOINT * LINESTRING * MULTILINESTRING * POLYGON * MULTIPOLYGON * GEOMETRYCOLLECTION =head1 EXPORT =over =item C<< wkt2kml($wkt) >> Returns KML geometry fragment. =item C<< kml2wkt($kml_fragment) >> Returns WKT. =back =head1 INTERNAL METHOD =over =item C<< wkt2kmlparser >> =item C<< wkt2kmlformatter >> =item C<< coordformatter >> =item C<< kml2wktbuilder >> =item C<< coordbuilder >> =back =head1 DEPENDENCIES =over =item C<< Exporter >> =item C<< XML::Simple >> =item C<< Test::Base >> =item C<< XML::Parser >> =back =head1 BUGS AND LIMITATIONS This module is under test phase, need many test case to find bug. Send test cases are welcome. =head1 AUTHOR OHTSUKA Ko-hei C<< >> =head1 LICENCE AND COPYRIGHT Copyright (c) 2008, OHTSUKA Ko-hei C<< >>. All rights reserved. This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See L. =head1 DISCLAIMER OF WARRANTY BECAUSE THIS SOFTWARE IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE SOFTWARE "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH YOU. SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR, OR CORRECTION. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE SOFTWARE AS PERMITTED BY THE ABOVE LICENCE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE SOFTWARE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE SOFTWARE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. libgeo-converter-wkt2kml-perl-0.0.3/t/000077500000000000000000000000001463335113100175545ustar00rootroot00000000000000libgeo-converter-wkt2kml-perl-0.0.3/t/00.load.t000066400000000000000000000002311463335113100210720ustar00rootroot00000000000000use Test::More tests => 1; BEGIN { use_ok( 'Geo::Converter::WKT2KML' ); } diag( "Testing Geo::Converter::WKT2KML $Geo::Converter::WKT2KML::VERSION" ); libgeo-converter-wkt2kml-perl-0.0.3/t/01.wkt2kml.t000066400000000000000000000074771463335113100215720ustar00rootroot00000000000000use strict; use warnings; use Test::Base; use Geo::Converter::WKT2KML; plan tests => 1*blocks; filters { input => [qw/chomp/], expected => [qw/chomp/], }; run { my $block = shift; is (wkt2kml($block->input),$block->expected); }; __END__ === test point --- input POINT(6 10) --- expected 6,10 === test linestring --- input LINESTRING(3 4,10 50,20 25) --- expected 3,4 10,50 20,25 === test polygon --- input POLYGON((1 1,5 1,5 5,1 5,1 1),(2 2, 3 2, 3 3, 2 3,2 2)) --- expected 1,1 5,1 5,5 1,5 1,1 2,2 3,2 3,3 2,3 2,2 === test multipoint --- input MULTIPOINT(3.5 5.6,4.8 10.5) --- expected 3.5,5.6 4.8,10.5 === test multilinestring --- input MULTILINESTRING((3 4,10 50,20 25),(-5 -8,-10 -8,-15 -4)) --- expected 3,4 10,50 20,25 -5,-8 -10,-8 -15,-4 === test multipolygon --- input MULTIPOLYGON(((1 1,5 1,5 5,1 5,1 1),(2 2, 3 2, 3 3, 2 3,2 2)),((3 3,6 2,6 4,3 3))) --- expected 1,1 5,1 5,5 1,5 1,1 2,2 3,2 3,3 2,3 2,2 3,3 6,2 6,4 3,3 === test geometrycollection --- input GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10)) --- expected 4,6 4,6 7,10 === test polygon --- input POINT(135.52 -34.56) --- expected 135.52,-34.56 === test multipolygon --- input MULTIPOINT(-94.6 -20.4, 135.87 25.90) --- expected -94.6,-20.4 135.87,25.90 === test linestring --- input LINESTRING(135.52 -34.56, 134.25 24.67,133.25 24.45) --- expected 135.52,-34.56 134.25,24.67 133.25,24.45 === test multilinestring --- input MULTILINESTRING((-94.6 -20.4, 135.87 25.90),(135.52 -34.56, 134.25 24.67),(135.52 -34.56, 134.25 24.67, 23.89 56.76)) --- expected -94.6,-20.4 135.87,25.90 135.52,-34.56 134.25,24.67 135.52,-34.56 134.25,24.67 23.89,56.76 === test polygon-outeronly --- input POLYGON((135.52 -34.56, 134.25 24.67,133.25 24.45,135.52 -34.56)) --- expected 135.52,-34.56 134.25,24.67 133.25,24.45 135.52,-34.56 === test polygon-outin --- input POLYGON((135.52 -34.56, 134.25 24.67,133.25 24.45,135.52 -34.56),(-94.6 -20.4, 135.87 25.90),(135.52 -34.56, 134.25 24.67)) --- expected 135.52,-34.56 134.25,24.67 133.25,24.45 135.52,-34.56 -94.6,-20.4 135.87,25.90 135.52,-34.56 134.25,24.67 libgeo-converter-wkt2kml-perl-0.0.3/t/02.kml2wkt.t000066400000000000000000000074571463335113100215710ustar00rootroot00000000000000use strict; use warnings; use Test::Base; use Geo::Converter::WKT2KML; plan tests => 1*blocks; filters { input => [qw/chomp/], expected => [qw/chomp/], }; run { my $block = shift; is (kml2wkt($block->expected),$block->input); }; __END__ === test point --- input POINT(6 10) --- expected 6,10 === test linestring --- input LINESTRING(3 4,10 50,20 25) --- expected 3,4 10,50 20,25 === test polygon --- input POLYGON((1 1,5 1,5 5,1 5,1 1),(2 2,3 2,3 3,2 3,2 2)) --- expected 1,1 5,1 5,5 1,5 1,1 2,2 3,2 3,3 2,3 2,2 === test multipoint --- input MULTIPOINT(3.5 5.6,4.8 10.5) --- expected 3.5,5.6 4.8,10.5 === test multilinestring --- input MULTILINESTRING((3 4,10 50,20 25),(-5 -8,-10 -8,-15 -4)) --- expected 3,4 10,50 20,25 -5,-8 -10,-8 -15,-4 === test multipolygon --- input MULTIPOLYGON(((1 1,5 1,5 5,1 5,1 1),(2 2,3 2,3 3,2 3,2 2)),((3 3,6 2,6 4,3 3))) --- expected 1,1 5,1 5,5 1,5 1,1 2,2 3,2 3,3 2,3 2,2 3,3 6,2 6,4 3,3 === test geometrycollection --- input GEOMETRYCOLLECTION(LINESTRING(4 6,7 10),POINT(4 6)) --- expected 4,6 4,6 7,10 === test polygon --- input POINT(135.52 -34.56) --- expected 135.52,-34.56 === test multipolygon --- input MULTIPOINT(-94.6 -20.4,135.87 25.90) --- expected -94.6,-20.4 135.87,25.90 === test linestring --- input LINESTRING(135.52 -34.56,134.25 24.67,133.25 24.45) --- expected 135.52,-34.56 134.25,24.67 133.25,24.45 === test multilinestring --- input MULTILINESTRING((-94.6 -20.4,135.87 25.90),(135.52 -34.56,134.25 24.67),(135.52 -34.56,134.25 24.67,23.89 56.76)) --- expected -94.6,-20.4 135.87,25.90 135.52,-34.56 134.25,24.67 135.52,-34.56 134.25,24.67 23.89,56.76 === test polygon-outeronly --- input POLYGON((135.52 -34.56,134.25 24.67,133.25 24.45,135.52 -34.56)) --- expected 135.52,-34.56 134.25,24.67 133.25,24.45 135.52,-34.56 === test polygon-outin --- input POLYGON((135.52 -34.56,134.25 24.67,133.25 24.45,135.52 -34.56),(-94.6 -20.4,135.87 25.90),(135.52 -34.56,134.25 24.67)) --- expected 135.52,-34.56 134.25,24.67 133.25,24.45 135.52,-34.56 -94.6,-20.4 135.87,25.90 135.52,-34.56 134.25,24.67 libgeo-converter-wkt2kml-perl-0.0.3/t/03.wkt2kml_realcase.t000066400000000000000000000722071463335113100234240ustar00rootroot00000000000000use strict; use warnings; use Test::Base; use Geo::Converter::WKT2KML; plan tests => 1*blocks; filters { input => [qw/chomp/], expected => [qw/chomp/], }; run { my $block = shift; is (wkt2kml($block->input),$block->expected); }; __END__ === test point --- input MULTIPOLYGON(((141.3984375 39.7526041666667,141.40234375 39.7526041666667,141.40234375 39.75,141.3984375 39.75,141.3984375 39.7473958333333,141.3984375 39.7447916666667,141.40234375 39.7447916666667,141.40234375 39.7421875,141.40234375 39.7395833333333,141.40234375 39.7369791666667,141.3984375 39.7369791666667,141.3984375 39.734375,141.39453125 39.734375,141.39453125 39.7317708333333,141.39453125 39.7291666666667,141.39453125 39.7265625,141.3984375 39.7265625,141.3984375 39.7239583333333,141.3984375 39.7213541666667,141.3984375 39.71875,141.3984375 39.7161458333333,141.39453125 39.7161458333333,141.39453125 39.7135416666667,141.39453125 39.7109375,141.39453125 39.7083333333333,141.3984375 39.7083333333333,141.3984375 39.7057291666667,141.40234375 39.7057291666667,141.40234375 39.703125,141.40625 39.703125,141.41015625 39.703125,141.41015625 39.7005208333333,141.41015625 39.6979166666667,141.41015625 39.6953125,141.40625 39.6953125,141.40625 39.6927083333333,141.41015625 39.6927083333333,141.41015625 39.6901041666667,141.40625 39.6901041666667,141.40625 39.6875,141.40234375 39.6875,141.40234375 39.6848958333333,141.3984375 39.6848958333333,141.39453125 39.6848958333333,141.39453125 39.6822916666667,141.39453125 39.6796875,141.390625 39.6796875,141.390625 39.6770833333333,141.38671875 39.6770833333333,141.38671875 39.6744791666667,141.38671875 39.671875,141.3828125 39.671875,141.37890625 39.671875,141.375 39.671875,141.375 39.6692708333333,141.37109375 39.6692708333333,141.3671875 39.6692708333333,141.36328125 39.6692708333333,141.36328125 39.6666666666667,141.359375 39.6666666666667,141.359375 39.6640625,141.359375 39.6614583333333,141.35546875 39.6614583333333,141.35546875 39.6588541666667,141.3515625 39.6588541666667,141.3515625 39.65625,141.34765625 39.65625,141.34765625 39.6536458333333,141.34765625 39.6510416666667,141.34375 39.6510416666667,141.34375 39.6484375,141.34375 39.6458333333333,141.33984375 39.6458333333333,141.33984375 39.6432291666667,141.3359375 39.6432291666667,141.3359375 39.640625,141.33984375 39.640625,141.33984375 39.6380208333333,141.33984375 39.6354166666667,141.33984375 39.6328125,141.33984375 39.6302083333333,141.34375 39.6302083333333,141.34375 39.6276041666667,141.34765625 39.6276041666667,141.34765625 39.625,141.3515625 39.625,141.35546875 39.625,141.35546875 39.6223958333333,141.359375 39.6223958333333,141.359375 39.6197916666667,141.36328125 39.6197916666667,141.3671875 39.6197916666667,141.3671875 39.6171875,141.37109375 39.6171875,141.375 39.6171875,141.375 39.6145833333333,141.37890625 39.6145833333333,141.3828125 39.6145833333333,141.3828125 39.6119791666667,141.38671875 39.6119791666667,141.390625 39.6119791666667,141.390625 39.609375,141.39453125 39.609375,141.39453125 39.6067708333333,141.3984375 39.6067708333333,141.3984375 39.6041666666667,141.40234375 39.6041666666667,141.40625 39.6041666666667,141.40625 39.6015625,141.41015625 39.6015625,141.41015625 39.5989583333333,141.41015625 39.5963541666667,141.4140625 39.5963541666667,141.4140625 39.59375,141.4140625 39.5911458333333,141.41796875 39.5911458333333,141.41796875 39.5885416666667,141.421875 39.5885416666667,141.42578125 39.5885416666667,141.42578125 39.5859375,141.4296875 39.5859375,141.4296875 39.5833333333333,141.43359375 39.5833333333333,141.43359375 39.5807291666667,141.43359375 39.578125,141.43359375 39.5755208333333,141.43359375 39.5729166666667,141.43359375 39.5703125,141.43359375 39.5677083333333,141.4296875 39.5677083333333,141.4296875 39.5651041666667,141.42578125 39.5651041666667,141.421875 39.5651041666667,141.41796875 39.5651041666667,141.41796875 39.5677083333333,141.4140625 39.5677083333333,141.4140625 39.5703125,141.4140625 39.5729166666667,141.41015625 39.5729166666667,141.41015625 39.5755208333333,141.40625 39.5755208333333,141.40234375 39.5755208333333,141.40234375 39.578125,141.3984375 39.578125,141.3984375 39.5755208333333,141.39453125 39.5755208333333,141.390625 39.5755208333333,141.38671875 39.5755208333333,141.3828125 39.5755208333333,141.3828125 39.5729166666667,141.37890625 39.5729166666667,141.37890625 39.5755208333333,141.375 39.5755208333333,141.37109375 39.5755208333333,141.3671875 39.5755208333333,141.3671875 39.5729166666667,141.36328125 39.5729166666667,141.359375 39.5729166666667,141.359375 39.5703125,141.35546875 39.5703125,141.35546875 39.5677083333333,141.3515625 39.5677083333333,141.34765625 39.5677083333333,141.34375 39.5677083333333,141.33984375 39.5677083333333,141.3359375 39.5677083333333,141.33203125 39.5677083333333,141.33203125 39.5703125,141.328125 39.5703125,141.32421875 39.5703125,141.32421875 39.5729166666667,141.3203125 39.5729166666667,141.3203125 39.5755208333333,141.31640625 39.5755208333333,141.31640625 39.5729166666667,141.3125 39.5729166666667,141.3125 39.5755208333333,141.30859375 39.5755208333333,141.30859375 39.578125,141.30859375 39.5807291666667,141.3046875 39.5807291666667,141.3046875 39.5833333333333,141.3046875 39.5859375,141.3046875 39.5885416666667,141.30078125 39.5885416666667,141.30078125 39.5911458333333,141.296875 39.5911458333333,141.296875 39.59375,141.296875 39.5963541666667,141.29296875 39.5963541666667,141.29296875 39.5989583333333,141.29296875 39.6015625,141.2890625 39.6015625,141.2890625 39.6041666666667,141.2890625 39.6067708333333,141.28515625 39.6067708333333,141.28515625 39.609375,141.28515625 39.6119791666667,141.28515625 39.6145833333333,141.28515625 39.6171875,141.28125 39.6171875,141.28125 39.6197916666667,141.28125 39.6223958333333,141.27734375 39.6223958333333,141.2734375 39.6223958333333,141.2734375 39.625,141.26953125 39.625,141.26953125 39.6276041666667,141.265625 39.6276041666667,141.265625 39.6302083333333,141.26171875 39.6302083333333,141.26171875 39.6328125,141.26171875 39.6354166666667,141.2578125 39.6354166666667,141.2578125 39.6380208333333,141.25390625 39.6380208333333,141.25390625 39.640625,141.25390625 39.6432291666667,141.25 39.6432291666667,141.25 39.6458333333333,141.24609375 39.6458333333333,141.2421875 39.6458333333333,141.23828125 39.6458333333333,141.234375 39.6458333333333,141.23046875 39.6458333333333,141.23046875 39.6484375,141.234375 39.6484375,141.234375 39.6510416666667,141.23046875 39.6510416666667,141.23046875 39.6536458333333,141.2265625 39.6536458333333,141.22265625 39.6536458333333,141.22265625 39.65625,141.21875 39.65625,141.21484375 39.65625,141.2109375 39.65625,141.20703125 39.65625,141.203125 39.65625,141.203125 39.6536458333333,141.19921875 39.6536458333333,141.19921875 39.6510416666667,141.1953125 39.6510416666667,141.1953125 39.6484375,141.19140625 39.6484375,141.19140625 39.6510416666667,141.1875 39.6510416666667,141.1875 39.6536458333333,141.18359375 39.6536458333333,141.18359375 39.65625,141.1796875 39.65625,141.1796875 39.6588541666667,141.17578125 39.6588541666667,141.17578125 39.6614583333333,141.171875 39.6614583333333,141.16796875 39.6614583333333,141.1640625 39.6614583333333,141.1640625 39.6640625,141.1640625 39.6666666666667,141.16015625 39.6666666666667,141.16015625 39.6692708333333,141.15625 39.6692708333333,141.15234375 39.6692708333333,141.1484375 39.6692708333333,141.14453125 39.6692708333333,141.140625 39.6692708333333,141.13671875 39.6692708333333,141.1328125 39.6692708333333,141.12890625 39.6692708333333,141.12890625 39.6666666666667,141.125 39.6666666666667,141.12109375 39.6666666666667,141.1171875 39.6666666666667,141.1171875 39.6640625,141.11328125 39.6640625,141.11328125 39.6614583333333,141.109375 39.6614583333333,141.109375 39.6588541666667,141.10546875 39.6588541666667,141.10546875 39.65625,141.10546875 39.6536458333333,141.1015625 39.6536458333333,141.1015625 39.6510416666667,141.09765625 39.6510416666667,141.09375 39.6510416666667,141.09375 39.6484375,141.08984375 39.6484375,141.0859375 39.6484375,141.0859375 39.6458333333333,141.08203125 39.6458333333333,141.078125 39.6458333333333,141.078125 39.6432291666667,141.07421875 39.6432291666667,141.0703125 39.6432291666667,141.0703125 39.640625,141.06640625 39.640625,141.0625 39.640625,141.05859375 39.640625,141.05859375 39.6432291666667,141.0546875 39.6432291666667,141.05078125 39.6432291666667,141.05078125 39.6458333333333,141.046875 39.6458333333333,141.046875 39.6484375,141.05078125 39.6484375,141.05078125 39.6510416666667,141.05078125 39.6536458333333,141.046875 39.6536458333333,141.046875 39.65625,141.046875 39.6588541666667,141.04296875 39.6588541666667,141.04296875 39.6614583333333,141.0390625 39.6614583333333,141.0390625 39.6588541666667,141.0390625 39.65625,141.0390625 39.6536458333333,141.03515625 39.6536458333333,141.03125 39.6536458333333,141.03125 39.6510416666667,141.02734375 39.6510416666667,141.02734375 39.6484375,141.0234375 39.6484375,141.01953125 39.6484375,141.01953125 39.6510416666667,141.015625 39.6510416666667,141.015625 39.6536458333333,141.01171875 39.6536458333333,141.01171875 39.65625,141.01171875 39.6588541666667,141.01171875 39.6614583333333,141.0078125 39.6614583333333,141.00390625 39.6614583333333,141.00390625 39.6640625,141 39.6640625,140.99609375 39.6640625,140.99609375 39.6666666666667,141 39.6666666666667,141 39.6692708333333,141.00390625 39.6692708333333,141.00390625 39.671875,141.0078125 39.671875,141.0078125 39.6744791666667,141.0078125 39.6770833333333,141.01171875 39.6770833333333,141.01171875 39.6796875,141.015625 39.6796875,141.015625 39.6822916666667,141.01171875 39.6822916666667,141.01171875 39.6848958333333,141.01171875 39.6875,141.01171875 39.6901041666667,141.01171875 39.6927083333333,141.015625 39.6927083333333,141.015625 39.6953125,141.01953125 39.6953125,141.01953125 39.6979166666667,141.0234375 39.6979166666667,141.0234375 39.7005208333333,141.02734375 39.7005208333333,141.03125 39.7005208333333,141.03515625 39.7005208333333,141.03515625 39.6979166666667,141.0390625 39.6979166666667,141.0390625 39.6953125,141.0390625 39.6927083333333,141.04296875 39.6927083333333,141.046875 39.6927083333333,141.046875 39.6901041666667,141.05078125 39.6901041666667,141.05078125 39.6927083333333,141.0546875 39.6927083333333,141.0546875 39.6953125,141.05859375 39.6953125,141.0625 39.6953125,141.0625 39.6979166666667,141.06640625 39.6979166666667,141.0703125 39.6979166666667,141.07421875 39.6979166666667,141.07421875 39.7005208333333,141.078125 39.7005208333333,141.078125 39.703125,141.08203125 39.703125,141.0859375 39.703125,141.0859375 39.7057291666667,141.08203125 39.7057291666667,141.078125 39.7057291666667,141.078125 39.7083333333333,141.078125 39.7109375,141.078125 39.7135416666667,141.078125 39.7161458333333,141.078125 39.71875,141.08203125 39.71875,141.08203125 39.7213541666667,141.078125 39.7213541666667,141.078125 39.7239583333333,141.07421875 39.7239583333333,141.07421875 39.7265625,141.078125 39.7265625,141.08203125 39.7265625,141.08203125 39.7239583333333,141.0859375 39.7239583333333,141.0859375 39.7213541666667,141.08984375 39.7213541666667,141.08984375 39.7239583333333,141.09375 39.7239583333333,141.09765625 39.7239583333333,141.09765625 39.7265625,141.09765625 39.7291666666667,141.09765625 39.7317708333333,141.1015625 39.7317708333333,141.10546875 39.7317708333333,141.10546875 39.734375,141.10546875 39.7369791666667,141.10546875 39.7395833333333,141.10546875 39.7421875,141.109375 39.7421875,141.109375 39.7447916666667,141.11328125 39.7447916666667,141.11328125 39.7473958333333,141.1171875 39.7473958333333,141.12109375 39.7473958333333,141.12109375 39.75,141.1171875 39.75,141.1171875 39.7526041666667,141.1171875 39.7552083333333,141.12109375 39.7552083333333,141.12109375 39.7578125,141.12109375 39.7604166666667,141.125 39.7604166666667,141.125 39.7630208333333,141.125 39.765625,141.12890625 39.765625,141.12890625 39.7682291666667,141.1328125 39.7682291666667,141.13671875 39.7682291666667,141.13671875 39.7708333333333,141.140625 39.7708333333333,141.14453125 39.7708333333333,141.1484375 39.7708333333333,141.1484375 39.7682291666667,141.1484375 39.765625,141.15234375 39.765625,141.15625 39.765625,141.16015625 39.765625,141.1640625 39.765625,141.1640625 39.7682291666667,141.16796875 39.7682291666667,141.171875 39.7682291666667,141.17578125 39.7682291666667,141.1796875 39.7682291666667,141.1796875 39.765625,141.18359375 39.765625,141.18359375 39.7630208333333,141.1875 39.7630208333333,141.19140625 39.7630208333333,141.1953125 39.7630208333333,141.1953125 39.765625,141.19921875 39.765625,141.19921875 39.7682291666667,141.203125 39.7682291666667,141.203125 39.7708333333333,141.20703125 39.7708333333333,141.2109375 39.7708333333333,141.21484375 39.7708333333333,141.21875 39.7708333333333,141.22265625 39.7708333333333,141.2265625 39.7708333333333,141.23046875 39.7708333333333,141.234375 39.7708333333333,141.23828125 39.7708333333333,141.2421875 39.7708333333333,141.24609375 39.7708333333333,141.24609375 39.7682291666667,141.25 39.7682291666667,141.25 39.765625,141.25 39.7630208333333,141.25 39.7604166666667,141.25390625 39.7604166666667,141.2578125 39.7604166666667,141.2578125 39.7578125,141.26171875 39.7578125,141.265625 39.7578125,141.26953125 39.7578125,141.26953125 39.7604166666667,141.2734375 39.7604166666667,141.2734375 39.7630208333333,141.27734375 39.7630208333333,141.28125 39.7630208333333,141.28515625 39.7630208333333,141.28515625 39.765625,141.2890625 39.765625,141.29296875 39.765625,141.29296875 39.7682291666667,141.296875 39.7682291666667,141.296875 39.7708333333333,141.30078125 39.7708333333333,141.3046875 39.7708333333333,141.3046875 39.7682291666667,141.3046875 39.765625,141.30078125 39.765625,141.30078125 39.7630208333333,141.30078125 39.7604166666667,141.30078125 39.7578125,141.3046875 39.7578125,141.30859375 39.7578125,141.30859375 39.7604166666667,141.3125 39.7604166666667,141.31640625 39.7604166666667,141.3203125 39.7604166666667,141.3203125 39.7578125,141.32421875 39.7578125,141.32421875 39.7552083333333,141.328125 39.7552083333333,141.328125 39.7526041666667,141.33203125 39.7526041666667,141.33203125 39.7552083333333,141.3359375 39.7552083333333,141.33984375 39.7552083333333,141.34375 39.7552083333333,141.34375 39.7526041666667,141.34765625 39.7526041666667,141.3515625 39.7526041666667,141.35546875 39.7526041666667,141.359375 39.7526041666667,141.36328125 39.7526041666667,141.3671875 39.7526041666667,141.3671875 39.7552083333333,141.37109375 39.7552083333333,141.375 39.7552083333333,141.37890625 39.7552083333333,141.3828125 39.7552083333333,141.38671875 39.7552083333333,141.390625 39.7552083333333,141.39453125 39.7552083333333,141.39453125 39.7526041666667,141.3984375 39.7526041666667)),((141.0703125 39.7265625,141.0703125 39.7291666666667,141.07421875 39.7291666666667,141.07421875 39.7265625,141.0703125 39.7265625))) --- expected 141.3984375,39.7526041666667 141.40234375,39.7526041666667 141.40234375,39.75 141.3984375,39.75 141.3984375,39.7473958333333 141.3984375,39.7447916666667 141.40234375,39.7447916666667 141.40234375,39.7421875 141.40234375,39.7395833333333 141.40234375,39.7369791666667 141.3984375,39.7369791666667 141.3984375,39.734375 141.39453125,39.734375 141.39453125,39.7317708333333 141.39453125,39.7291666666667 141.39453125,39.7265625 141.3984375,39.7265625 141.3984375,39.7239583333333 141.3984375,39.7213541666667 141.3984375,39.71875 141.3984375,39.7161458333333 141.39453125,39.7161458333333 141.39453125,39.7135416666667 141.39453125,39.7109375 141.39453125,39.7083333333333 141.3984375,39.7083333333333 141.3984375,39.7057291666667 141.40234375,39.7057291666667 141.40234375,39.703125 141.40625,39.703125 141.41015625,39.703125 141.41015625,39.7005208333333 141.41015625,39.6979166666667 141.41015625,39.6953125 141.40625,39.6953125 141.40625,39.6927083333333 141.41015625,39.6927083333333 141.41015625,39.6901041666667 141.40625,39.6901041666667 141.40625,39.6875 141.40234375,39.6875 141.40234375,39.6848958333333 141.3984375,39.6848958333333 141.39453125,39.6848958333333 141.39453125,39.6822916666667 141.39453125,39.6796875 141.390625,39.6796875 141.390625,39.6770833333333 141.38671875,39.6770833333333 141.38671875,39.6744791666667 141.38671875,39.671875 141.3828125,39.671875 141.37890625,39.671875 141.375,39.671875 141.375,39.6692708333333 141.37109375,39.6692708333333 141.3671875,39.6692708333333 141.36328125,39.6692708333333 141.36328125,39.6666666666667 141.359375,39.6666666666667 141.359375,39.6640625 141.359375,39.6614583333333 141.35546875,39.6614583333333 141.35546875,39.6588541666667 141.3515625,39.6588541666667 141.3515625,39.65625 141.34765625,39.65625 141.34765625,39.6536458333333 141.34765625,39.6510416666667 141.34375,39.6510416666667 141.34375,39.6484375 141.34375,39.6458333333333 141.33984375,39.6458333333333 141.33984375,39.6432291666667 141.3359375,39.6432291666667 141.3359375,39.640625 141.33984375,39.640625 141.33984375,39.6380208333333 141.33984375,39.6354166666667 141.33984375,39.6328125 141.33984375,39.6302083333333 141.34375,39.6302083333333 141.34375,39.6276041666667 141.34765625,39.6276041666667 141.34765625,39.625 141.3515625,39.625 141.35546875,39.625 141.35546875,39.6223958333333 141.359375,39.6223958333333 141.359375,39.6197916666667 141.36328125,39.6197916666667 141.3671875,39.6197916666667 141.3671875,39.6171875 141.37109375,39.6171875 141.375,39.6171875 141.375,39.6145833333333 141.37890625,39.6145833333333 141.3828125,39.6145833333333 141.3828125,39.6119791666667 141.38671875,39.6119791666667 141.390625,39.6119791666667 141.390625,39.609375 141.39453125,39.609375 141.39453125,39.6067708333333 141.3984375,39.6067708333333 141.3984375,39.6041666666667 141.40234375,39.6041666666667 141.40625,39.6041666666667 141.40625,39.6015625 141.41015625,39.6015625 141.41015625,39.5989583333333 141.41015625,39.5963541666667 141.4140625,39.5963541666667 141.4140625,39.59375 141.4140625,39.5911458333333 141.41796875,39.5911458333333 141.41796875,39.5885416666667 141.421875,39.5885416666667 141.42578125,39.5885416666667 141.42578125,39.5859375 141.4296875,39.5859375 141.4296875,39.5833333333333 141.43359375,39.5833333333333 141.43359375,39.5807291666667 141.43359375,39.578125 141.43359375,39.5755208333333 141.43359375,39.5729166666667 141.43359375,39.5703125 141.43359375,39.5677083333333 141.4296875,39.5677083333333 141.4296875,39.5651041666667 141.42578125,39.5651041666667 141.421875,39.5651041666667 141.41796875,39.5651041666667 141.41796875,39.5677083333333 141.4140625,39.5677083333333 141.4140625,39.5703125 141.4140625,39.5729166666667 141.41015625,39.5729166666667 141.41015625,39.5755208333333 141.40625,39.5755208333333 141.40234375,39.5755208333333 141.40234375,39.578125 141.3984375,39.578125 141.3984375,39.5755208333333 141.39453125,39.5755208333333 141.390625,39.5755208333333 141.38671875,39.5755208333333 141.3828125,39.5755208333333 141.3828125,39.5729166666667 141.37890625,39.5729166666667 141.37890625,39.5755208333333 141.375,39.5755208333333 141.37109375,39.5755208333333 141.3671875,39.5755208333333 141.3671875,39.5729166666667 141.36328125,39.5729166666667 141.359375,39.5729166666667 141.359375,39.5703125 141.35546875,39.5703125 141.35546875,39.5677083333333 141.3515625,39.5677083333333 141.34765625,39.5677083333333 141.34375,39.5677083333333 141.33984375,39.5677083333333 141.3359375,39.5677083333333 141.33203125,39.5677083333333 141.33203125,39.5703125 141.328125,39.5703125 141.32421875,39.5703125 141.32421875,39.5729166666667 141.3203125,39.5729166666667 141.3203125,39.5755208333333 141.31640625,39.5755208333333 141.31640625,39.5729166666667 141.3125,39.5729166666667 141.3125,39.5755208333333 141.30859375,39.5755208333333 141.30859375,39.578125 141.30859375,39.5807291666667 141.3046875,39.5807291666667 141.3046875,39.5833333333333 141.3046875,39.5859375 141.3046875,39.5885416666667 141.30078125,39.5885416666667 141.30078125,39.5911458333333 141.296875,39.5911458333333 141.296875,39.59375 141.296875,39.5963541666667 141.29296875,39.5963541666667 141.29296875,39.5989583333333 141.29296875,39.6015625 141.2890625,39.6015625 141.2890625,39.6041666666667 141.2890625,39.6067708333333 141.28515625,39.6067708333333 141.28515625,39.609375 141.28515625,39.6119791666667 141.28515625,39.6145833333333 141.28515625,39.6171875 141.28125,39.6171875 141.28125,39.6197916666667 141.28125,39.6223958333333 141.27734375,39.6223958333333 141.2734375,39.6223958333333 141.2734375,39.625 141.26953125,39.625 141.26953125,39.6276041666667 141.265625,39.6276041666667 141.265625,39.6302083333333 141.26171875,39.6302083333333 141.26171875,39.6328125 141.26171875,39.6354166666667 141.2578125,39.6354166666667 141.2578125,39.6380208333333 141.25390625,39.6380208333333 141.25390625,39.640625 141.25390625,39.6432291666667 141.25,39.6432291666667 141.25,39.6458333333333 141.24609375,39.6458333333333 141.2421875,39.6458333333333 141.23828125,39.6458333333333 141.234375,39.6458333333333 141.23046875,39.6458333333333 141.23046875,39.6484375 141.234375,39.6484375 141.234375,39.6510416666667 141.23046875,39.6510416666667 141.23046875,39.6536458333333 141.2265625,39.6536458333333 141.22265625,39.6536458333333 141.22265625,39.65625 141.21875,39.65625 141.21484375,39.65625 141.2109375,39.65625 141.20703125,39.65625 141.203125,39.65625 141.203125,39.6536458333333 141.19921875,39.6536458333333 141.19921875,39.6510416666667 141.1953125,39.6510416666667 141.1953125,39.6484375 141.19140625,39.6484375 141.19140625,39.6510416666667 141.1875,39.6510416666667 141.1875,39.6536458333333 141.18359375,39.6536458333333 141.18359375,39.65625 141.1796875,39.65625 141.1796875,39.6588541666667 141.17578125,39.6588541666667 141.17578125,39.6614583333333 141.171875,39.6614583333333 141.16796875,39.6614583333333 141.1640625,39.6614583333333 141.1640625,39.6640625 141.1640625,39.6666666666667 141.16015625,39.6666666666667 141.16015625,39.6692708333333 141.15625,39.6692708333333 141.15234375,39.6692708333333 141.1484375,39.6692708333333 141.14453125,39.6692708333333 141.140625,39.6692708333333 141.13671875,39.6692708333333 141.1328125,39.6692708333333 141.12890625,39.6692708333333 141.12890625,39.6666666666667 141.125,39.6666666666667 141.12109375,39.6666666666667 141.1171875,39.6666666666667 141.1171875,39.6640625 141.11328125,39.6640625 141.11328125,39.6614583333333 141.109375,39.6614583333333 141.109375,39.6588541666667 141.10546875,39.6588541666667 141.10546875,39.65625 141.10546875,39.6536458333333 141.1015625,39.6536458333333 141.1015625,39.6510416666667 141.09765625,39.6510416666667 141.09375,39.6510416666667 141.09375,39.6484375 141.08984375,39.6484375 141.0859375,39.6484375 141.0859375,39.6458333333333 141.08203125,39.6458333333333 141.078125,39.6458333333333 141.078125,39.6432291666667 141.07421875,39.6432291666667 141.0703125,39.6432291666667 141.0703125,39.640625 141.06640625,39.640625 141.0625,39.640625 141.05859375,39.640625 141.05859375,39.6432291666667 141.0546875,39.6432291666667 141.05078125,39.6432291666667 141.05078125,39.6458333333333 141.046875,39.6458333333333 141.046875,39.6484375 141.05078125,39.6484375 141.05078125,39.6510416666667 141.05078125,39.6536458333333 141.046875,39.6536458333333 141.046875,39.65625 141.046875,39.6588541666667 141.04296875,39.6588541666667 141.04296875,39.6614583333333 141.0390625,39.6614583333333 141.0390625,39.6588541666667 141.0390625,39.65625 141.0390625,39.6536458333333 141.03515625,39.6536458333333 141.03125,39.6536458333333 141.03125,39.6510416666667 141.02734375,39.6510416666667 141.02734375,39.6484375 141.0234375,39.6484375 141.01953125,39.6484375 141.01953125,39.6510416666667 141.015625,39.6510416666667 141.015625,39.6536458333333 141.01171875,39.6536458333333 141.01171875,39.65625 141.01171875,39.6588541666667 141.01171875,39.6614583333333 141.0078125,39.6614583333333 141.00390625,39.6614583333333 141.00390625,39.6640625 141,39.6640625 140.99609375,39.6640625 140.99609375,39.6666666666667 141,39.6666666666667 141,39.6692708333333 141.00390625,39.6692708333333 141.00390625,39.671875 141.0078125,39.671875 141.0078125,39.6744791666667 141.0078125,39.6770833333333 141.01171875,39.6770833333333 141.01171875,39.6796875 141.015625,39.6796875 141.015625,39.6822916666667 141.01171875,39.6822916666667 141.01171875,39.6848958333333 141.01171875,39.6875 141.01171875,39.6901041666667 141.01171875,39.6927083333333 141.015625,39.6927083333333 141.015625,39.6953125 141.01953125,39.6953125 141.01953125,39.6979166666667 141.0234375,39.6979166666667 141.0234375,39.7005208333333 141.02734375,39.7005208333333 141.03125,39.7005208333333 141.03515625,39.7005208333333 141.03515625,39.6979166666667 141.0390625,39.6979166666667 141.0390625,39.6953125 141.0390625,39.6927083333333 141.04296875,39.6927083333333 141.046875,39.6927083333333 141.046875,39.6901041666667 141.05078125,39.6901041666667 141.05078125,39.6927083333333 141.0546875,39.6927083333333 141.0546875,39.6953125 141.05859375,39.6953125 141.0625,39.6953125 141.0625,39.6979166666667 141.06640625,39.6979166666667 141.0703125,39.6979166666667 141.07421875,39.6979166666667 141.07421875,39.7005208333333 141.078125,39.7005208333333 141.078125,39.703125 141.08203125,39.703125 141.0859375,39.703125 141.0859375,39.7057291666667 141.08203125,39.7057291666667 141.078125,39.7057291666667 141.078125,39.7083333333333 141.078125,39.7109375 141.078125,39.7135416666667 141.078125,39.7161458333333 141.078125,39.71875 141.08203125,39.71875 141.08203125,39.7213541666667 141.078125,39.7213541666667 141.078125,39.7239583333333 141.07421875,39.7239583333333 141.07421875,39.7265625 141.078125,39.7265625 141.08203125,39.7265625 141.08203125,39.7239583333333 141.0859375,39.7239583333333 141.0859375,39.7213541666667 141.08984375,39.7213541666667 141.08984375,39.7239583333333 141.09375,39.7239583333333 141.09765625,39.7239583333333 141.09765625,39.7265625 141.09765625,39.7291666666667 141.09765625,39.7317708333333 141.1015625,39.7317708333333 141.10546875,39.7317708333333 141.10546875,39.734375 141.10546875,39.7369791666667 141.10546875,39.7395833333333 141.10546875,39.7421875 141.109375,39.7421875 141.109375,39.7447916666667 141.11328125,39.7447916666667 141.11328125,39.7473958333333 141.1171875,39.7473958333333 141.12109375,39.7473958333333 141.12109375,39.75 141.1171875,39.75 141.1171875,39.7526041666667 141.1171875,39.7552083333333 141.12109375,39.7552083333333 141.12109375,39.7578125 141.12109375,39.7604166666667 141.125,39.7604166666667 141.125,39.7630208333333 141.125,39.765625 141.12890625,39.765625 141.12890625,39.7682291666667 141.1328125,39.7682291666667 141.13671875,39.7682291666667 141.13671875,39.7708333333333 141.140625,39.7708333333333 141.14453125,39.7708333333333 141.1484375,39.7708333333333 141.1484375,39.7682291666667 141.1484375,39.765625 141.15234375,39.765625 141.15625,39.765625 141.16015625,39.765625 141.1640625,39.765625 141.1640625,39.7682291666667 141.16796875,39.7682291666667 141.171875,39.7682291666667 141.17578125,39.7682291666667 141.1796875,39.7682291666667 141.1796875,39.765625 141.18359375,39.765625 141.18359375,39.7630208333333 141.1875,39.7630208333333 141.19140625,39.7630208333333 141.1953125,39.7630208333333 141.1953125,39.765625 141.19921875,39.765625 141.19921875,39.7682291666667 141.203125,39.7682291666667 141.203125,39.7708333333333 141.20703125,39.7708333333333 141.2109375,39.7708333333333 141.21484375,39.7708333333333 141.21875,39.7708333333333 141.22265625,39.7708333333333 141.2265625,39.7708333333333 141.23046875,39.7708333333333 141.234375,39.7708333333333 141.23828125,39.7708333333333 141.2421875,39.7708333333333 141.24609375,39.7708333333333 141.24609375,39.7682291666667 141.25,39.7682291666667 141.25,39.765625 141.25,39.7630208333333 141.25,39.7604166666667 141.25390625,39.7604166666667 141.2578125,39.7604166666667 141.2578125,39.7578125 141.26171875,39.7578125 141.265625,39.7578125 141.26953125,39.7578125 141.26953125,39.7604166666667 141.2734375,39.7604166666667 141.2734375,39.7630208333333 141.27734375,39.7630208333333 141.28125,39.7630208333333 141.28515625,39.7630208333333 141.28515625,39.765625 141.2890625,39.765625 141.29296875,39.765625 141.29296875,39.7682291666667 141.296875,39.7682291666667 141.296875,39.7708333333333 141.30078125,39.7708333333333 141.3046875,39.7708333333333 141.3046875,39.7682291666667 141.3046875,39.765625 141.30078125,39.765625 141.30078125,39.7630208333333 141.30078125,39.7604166666667 141.30078125,39.7578125 141.3046875,39.7578125 141.30859375,39.7578125 141.30859375,39.7604166666667 141.3125,39.7604166666667 141.31640625,39.7604166666667 141.3203125,39.7604166666667 141.3203125,39.7578125 141.32421875,39.7578125 141.32421875,39.7552083333333 141.328125,39.7552083333333 141.328125,39.7526041666667 141.33203125,39.7526041666667 141.33203125,39.7552083333333 141.3359375,39.7552083333333 141.33984375,39.7552083333333 141.34375,39.7552083333333 141.34375,39.7526041666667 141.34765625,39.7526041666667 141.3515625,39.7526041666667 141.35546875,39.7526041666667 141.359375,39.7526041666667 141.36328125,39.7526041666667 141.3671875,39.7526041666667 141.3671875,39.7552083333333 141.37109375,39.7552083333333 141.375,39.7552083333333 141.37890625,39.7552083333333 141.3828125,39.7552083333333 141.38671875,39.7552083333333 141.390625,39.7552083333333 141.39453125,39.7552083333333 141.39453125,39.7526041666667 141.3984375,39.7526041666667 141.0703125,39.7265625 141.0703125,39.7291666666667 141.07421875,39.7291666666667 141.07421875,39.7265625 141.0703125,39.7265625 libgeo-converter-wkt2kml-perl-0.0.3/t/04.kml2wkt_realcase.t000066400000000000000000000046031463335113100234200ustar00rootroot00000000000000use strict; use warnings; use Test::Base; use Geo::Converter::WKT2KML; plan tests => 1*blocks; filters { input => [qw/chomp/], expected => [qw/chomp/], }; run { my $block = shift; is (kml2wkt($block->input),$block->expected); }; __END__ === test point --- input 1 1 absolute -112.2550785337791,36.07954952145647,2357 -112.2549277039738,36.08117083492122,2357 -112.2552505069063,36.08260761307279,2357 --- expected LINESTRING(-112.2550785337791 36.07954952145647 2357,-112.2549277039738 36.08117083492122 2357,-112.2552505069063 36.08260761307279 2357) === test point --- input 1 relativeToGround -77.05788457660967,38.87253259892824,100 -77.05465973756702,38.87291016281703,100 -77.05315536854791,38.87053267794386,100 -77.05668055019126,38.87154239798456,100 -77.05542625960818,38.87167890344077,100 -77.05485125901024,38.87076535397792,100 --- expected POLYGON((-77.05788457660967 38.87253259892824 100,-77.05465973756702 38.87291016281703 100,-77.05315536854791 38.87053267794386 100),(-77.05668055019126 38.87154239798456 100,-77.05542625960818 38.87167890344077 100,-77.05485125901024 38.87076535397792 100)) === test point --- input -122.4425587930444,37.80666418607323,0 -122.4428379594768,37.80663578323093,0 -122.4425509770566,37.80662588061205,0 -122.4428340530617,37.8065999493009,0 --- expected MULTILINESTRING((-122.4425587930444 37.80666418607323 0,-122.4428379594768 37.80663578323093 0),(-122.4425509770566 37.80662588061205 0,-122.4428340530617 37.8065999493009 0))