"Attempted to read or write protected memory. This is often an indication that other memory is corru

H

humbleaptience

I'm migrating from 1.1 to 2.0. This code worked fine in 1.1 , but now
it throws an exception.

public static int LLtoUTM(int datumIn, int datumOut, double p_lat,
double p_lon,ref double UTMNorthing,ref double UTMEasting,ref int
UTMZone)
{
int errno;
//This is the formula for calculating which Zone a point is in at a
particular lat/long
int ZoneNumber = Convert.ToInt32((p_lon + 180) / 6) + 1;
double[] x = new double[1];
double[] y = new double[1];
double[] z = new double[1];
y[0] = p_lat*proj_api.Proj.DEG_TO_RAD;
x[0] = p_lon*proj_api.Proj.DEG_TO_RAD;
z[0] = 0.0;
IntPtr src0= proj_api.Proj.pj_init_plus("+proj_api.Proj=latlong
+datum=NAD27");
IntPtr src1 = proj_api.Proj.pj_init_plus("+proj_api.Proj=latlong
+datum=NAD83");
IntPtr dst0 = proj_api.Proj.pj_init_plus("+proj_api.Proj=utm +zone="
+ ZoneNumber + " +datum=NAD27");
IntPtr dst1 = proj_api.Proj.pj_init_plus("+proj_api.Proj=utm +zone="
+ ZoneNumber + " +datum=NAD83");
//This nice little bit of code below is designed to execute
pj_transfrom (the proj_api.Proj lib all around function)
//with the correct parameters so that a datumshift to the correct
datum is included.
if(datumIn==0)
{
if(datumOut==0)
{
errno = proj_api.Proj.pj_transform(src0, dst0, 1, 1, x, y,
z);//NAD27-NAD83
}
else
{
errno = proj_api.Proj.pj_transform(src0, dst1, 1, 1, x, y,
z);//NAD27-NAD27
}
}
else
{
if(datumOut==0)
{
errno = proj_api.Proj.pj_transform(src1, dst0, 1, 1, x, y,
z);//NAD83-NAD27
}
else
{
<!------- ERROR THROWN HERE --------!>
errno = proj_api.Proj.pj_transform(src1, dst1, 1,
1, x, y, z); //NAD83-NAD83
}
}

proj_api.Proj.pj_free(dst1);
proj_api.Proj.pj_free(src1);
proj_api.Proj.pj_free(dst0);
proj_api.Proj.pj_free(src0);
UTMNorthing = y[0];
UTMEasting = x[0];
UTMZone = ZoneNumber;
return errno;
}

pj_transform is a function in a C# wrapper of the Proj library.

public static extern int pj_transform(IntPtr src, IntPtr dst,
int point_count, int point_offset,
[InAttribute, OutAttribute] double[] x,
[InAttribute, OutAttribute] double[] y,
[InAttribute, OutAttribute] double[] z);

I assume it has something to do with assigning in-out attributes to
arrays?

Thanks!
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,057
Latest member
KetoBeezACVGummies

Latest Threads

Top