#!/usr/bin/env python
"""
Simple example to read a csv file and reproject point x/y data
Usage:
project_csv.py cities.csv 2 1 EPSG:4326 EPSG:3857
"""
import sys
import csv
from io import open
import mapscript
def main(input_file, x_field_idx, y_field_idx, input_proj, output_proj):
# set input and output projections
proj_in = mapscript.projectionObj(input_proj)
proj_out = mapscript.projectionObj(output_proj)
# open file
with open(input_file, encoding='utf-8') as f:
# read csv
csv_in = csv.reader(f)
headers = next(csv_in)
# setup output
csv_out = csv.writer(sys.stdout)
csv_out.writerow(headers)
for row in csv_in:
# set pointObj
point = mapscript.pointObj(float(row[x_field_idx]), float(row[y_field_idx]))
# project
point.project(proj_in, proj_out)
# update with reprojected coordinates
row[x_field_idx] = point.x
row[y_field_idx] = point.y
csv_out.writerow(row)
def usage():
"""
Display usage if program is used incorrectly
"""
print("Syntax: %s " % sys.argv[0])
sys.exit(2)
# check input parameters
if (len(sys.argv) != 6):
usage()
input_file = sys.argv[1]
# set x and y indices
x_field_idx = int(sys.argv[2])
y_field_idx = int(sys.argv[3])
# get projection codes
input_proj = "init="+sys.argv[4].lower()
output_proj = "init="+sys.argv[5].lower()
main(input_file, x_field_idx, y_field_idx, input_proj, output_proj)