On 7/20/06, P Kishor <[EMAIL PROTECTED]> wrote:
On 7/20/06, Steve Lime <[EMAIL PROTECTED]> wrote:
> Puneet: Why is speed such a big deal or will you be doing this often?

I will be doing this a few times a year (so, often, although not
necessarily often enough), but this portion is only a part of a longer
process. So, I have to optimize each step as much as I can for overall
better rate of return.

>
> Anyway, if it were me I'd just write a quick MapScript script using
> perl. Create a new shapefileObj, a new XBase table, open the file and
> start looping. The loop itself should have like 3 lines of code. The
> whole script should be about 15...
>


Hi,
suppose your csv file is made of these records:

12.500,41.890,790380
12.530,41.890,790480
...

In Perl you might go like this. Actually a bit more than 15 lines, but
you can reduce it if you like :))

use mapscript;
use XBase;
my $csv = 'dummy.csv';
my $outfile = 'dummy_out'; # any name with no extension

my $table = XBase->create(name => "$outfile.dbf",
                       field_names =>['X','Y','VALUE'],
                       field_types => ['N','N','N'],
                       field_lengths => [8,8,10],
                       field_decimals => [3,3,0]) or die XBase->errstr;

my $shapefile = new mapscript::shapefileObj($outfile,1) or die;

open (CSV,"<$csv") or die "Cannot open $csv: $!\n";
my @lines = <CSV>;
close (CSV);

my $i = -1;
foreach (@lines) {
   chomp;
   my @rec = split /,/;
   my ($x,$y,$value) = @rec;
   $i++;
   $table->set_record($i,@rec) or die XBase->errstr;
   my $point = new mapscript::pointObj();
   $point->setXY($x,$y);
   my $line = new mapscript::lineObj();
   $line->add($point);
   my $shape = new mapscript::shapeObj();
   $shape->add($line);
   $shapefile->add($shape);
}
$shapefile = '';


ciao
Roberto

Reply via email to