# How to figure out the SRID of a point by comparing it to another point with known SRID?

I have a set of store locations defined in the coordinate system of Bottincarto, which I need to display on Google Maps iOS.

Here is an example of coordinates for Notre-Dame-de-Paris:

Here is an example of coordinates for Trafalgar Square:

I already tried a linear regression, but it is not even good as an approximation.

How can I reverse engineer BottinCarto projection system?

• Unfortunately, I don't have time to read documentations atm. I need a straight answer. – Benjamin Toueg Oct 16 '13 at 4:38
• all you need to do is ask Bottincarto what projection their data is in. – Ian Turton Oct 16 '13 at 7:54
• The point of the question is to reverse engineer their projection, so asking them is off topic. – Benjamin Toueg Oct 16 '13 at 8:47
• then you are going to need to read some documentation :-) – Ian Turton Oct 16 '13 at 11:18

You can also evaluate the projection by going to this application and do like illustrated below to guess the projection system.

After, just click on the EPSG:27572 link to get the projection parameters. In your case, for performance reasons, it can be useful to make your own function but the normal way to make most JavaScript conversion is based on Proj4js

I've found a conversion function from lat,lon to Lambert.

48.852968 2.349902 --> 600930.555 2428284.034

51.508039 -0.128069 --> 428283.013 2726825.573

http://jsfiddle.net/aw46P/

``````function NTF_To_Lambert(inlat, inlng) {
var Lamb_a = 6378249.2;
var Lamb_b = 6356515;
var Lamb_Phi0 = 46.800;
var Lamb_Lambda0 = 2.596921296 / 200 180;
var Lamb_e = (Math.sqrt(Math.pow(Lamb_a, 2) - Math.pow(Lamb_b, 2))) / Lamb_a;
var NTF_Lat = inlat;
var NTF_Lng = inlng;
var Lamb_v = Lamb_a / (Math.sqrt(1 - Math.pow(Lamb_e, 2) Math.pow(Math.sin(NTF_Lat Math.PI / 180), 2)));
var Lamb_LatIso = (Math.log(Math.tan((Math.PI / 4 + (NTF_Lat Math.PI / 360))))) - Lamb_e / 2 (Math.log((1 + Lamb_e Math.sin(NTF_Lat Math.PI / 180)) / (1 - Lamb_e Math.sin(NTF_Lat Math.PI / 180))));
var Lamb_LatIso0 = (Math.log(Math.tan((Math.PI / 4 + (Lamb_Phi0 Math.PI / 360))))) - Lamb_e / 2 (Math.log((1 + Lamb_e Math.sin(Lamb_Phi0 Math.PI / 180)) / (1 - Lamb_e Math.sin(Lamb_Phi0 Math.PI / 180))));
if (NTF_Lng < 180) {
var Lamb_Gamma = (NTF_Lng - Lamb_Lambda0) Math.sin(Lamb_Phi0 Math.PI / 180);
}
if (NTF_Lng > 180) {
var Lamb_Gamma = (NTF_Lng - Lamb_Lambda0 - 360) Math.sin(Lamb_Phi0 Math.PI / 180);
}
var Lamb_Ce = 600;
var Lamb_Cn = 2200;
var Lamb_v0 = Lamb_a / (Math.sqrt(1 - Math.pow(Lamb_e, 2) Math.pow(Math.sin(Lamb_Phi0 Math.PI / 180), 2)));
var Lamb_R0 = Lamb_v0 / Math.tan(Lamb_Phi0 Math.PI / 180);
var Lamb_Phi1 = 50.99879884 / 200 180;
var Lamb_Phi2 = 52.99557167 / 200 180;
var Lamb_v01 = Lamb_a / (Math.sqrt(1 - Math.pow(Lamb_e, 2) Math.pow(Math.sin(Lamb_Phi1 Math.PI / 180), 2)));
var Lamb_v02 = Lamb_a / (Math.sqrt(1 - Math.pow(Lamb_e, 2) Math.pow(Math.sin(Lamb_Phi2 Math.PI / 180), 2)));
var Lamb_Ro01 = Lamb_a (1 - Math.pow(Lamb_e, 2)) / Math.pow((Math.sqrt(1 - Math.pow(Lamb_e, 2) Math.pow(Math.sin(Lamb_Phi1 Math.PI / 180), 2))), 3);
var Lamb_Ro02 = Lamb_a (1 - Math.pow(Lamb_e, 2)) / Math.pow((Math.sqrt(1 - Math.pow(Lamb_e, 2) Math.pow(Math.sin(Lamb_Phi2 Math.PI / 180), 2))), 3);
var Lamb_m1 = 1 + Lamb_Ro01 / 2 / Lamb_v01 Math.pow((Lamb_Phi1 - Lamb_Phi0) Math.PI / 180, 2);
var Lamb_m2 = 1 + Lamb_Ro02 / 2 / Lamb_v02 Math.pow((Lamb_Phi2 - Lamb_Phi0) Math.PI / 180, 2);
var Lamb_m = (Lamb_m1 + Lamb_m2) / 2;
var Lamb_mL = 2 - Lamb_m;
var Lamb_mLR0 = Lamb_mL Lamb_R0;
var Lamb_R = Lamb_mLR0 Math.exp(-Math.sin(Lamb_Phi0 Math.PI / 180) (Lamb_LatIso - Lamb_LatIso0));
var Lamb_E1 = Lamb_R Math.sin(Lamb_Gamma Math.PI / 180);
var Lamb_EE = Lamb_E1 + Lamb_Ce 1000;
var Lamb_NN = Lamb_mLR0 - Lamb_R + Lamb_E1 Math.tan(Lamb_Gamma Math.PI / 360) + Lamb_Cn 1000;
var Lamb_EE_Arr = Math.round(Lamb_EE 1000) / 1000;
var Lamb_NN_Arr = Math.round(Lamb_NN 1000) / 1000;
var Lreturn = new Object();
Lreturn.x = Lamb_EE_Arr;
Lreturn.y = Lamb_NN_Arr;
return Lreturn;
}
``````