1 votos

¿Cómo determinar el SRID de un punto comparándolo con otro punto con un SRID conocido?

Tengo un conjunto de ubicaciones de tiendas definidas en el sistema de coordenadas de Bottincarto, que necesito mostrar en Google Maps iOS.

Aquí tienes un ejemplo de coordenadas para Notre-Dame-de-Paris:

Aquí tienes un ejemplo de coordenadas para Trafalgar Square:

Ya intenté una regresión lineal, pero ni siquiera es buena como aproximación.

¿Cómo puedo ingenierizar en reversa el sistema de proyección de BottinCarto?

1voto

BWW Puntos 302

También puedes evaluar la proyección yendo a esta aplicación y hacer como se ilustra a continuación para adivinar el sistema de proyección.

ilustrado abajo

Después, simplemente haz clic en el enlace EPSG:27572 para obtener los parámetros de la proyección. En tu caso, por razones de rendimiento, puede ser útil crear tu propia función, pero la forma normal de realizar la mayoría de las conversiones en JavaScript se basa en Proj4js

0voto

Paul Delhanty Puntos 125

He encontrado una función de conversión de latitud y longitud a 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;
}

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X