2009-12-10 5 views
5

J'ai un code javascript que je veux convertir en C#. Je n'ai aucune idée de la meilleure façon de structurer ceci ou s'il y a un moyen facile de convertir le code.Comment convertir des géocoordonnées en Javascript aux géocoordonnées en C#

Un exemple de ce code est présenté ci-dessous.

// ellipse parameters 
var e = { WGS84: { a: 6378137,  b: 6356752.3142, f: 1/298.257223563 }, 
      Airy1830: { a: 6377563.396, b: 6356256.910, f: 1/299.3249646 }, 
      Airy1849: { a: 6377340.189, b: 6356034.447, f: 1/299.3249646 } }; 

// helmert transform parameters 
var h = { WGS84toOSGB36: { tx: -446.448, ty: 125.157, tz: -542.060, // m 
          rx: -0.1502, ry: -0.2470, rz: -0.8421, // sec 
          s: 20.4894 },        // ppm 
      OSGB36toWGS84: { tx: 446.448, ty: -125.157, tz: 542.060, 
          rx: 0.1502, ry: 0.2470, rz: 0.8421, 
          s: -20.4894 } }; 


function convertOSGB36toWGS84(p1) { 
    var p2 = convert(p1, e.Airy1830, h.OSGB36toWGS84, e.WGS84); 
    return p2; 
} 

Le code complet peut être téléchargé à partir de: Javascript Grid Code

EDIT: Je vous remercie tous beaucoup pour votre aide; Je suppose que la deuxième exigence est que le rappel du code dans le lien peut être converti. L'objectif de l'extrait était sur les types anonymes.

+0

je pense qu'il est mécanique, mais pas automatique. – Cheeso

+0

Si l'une de nos réponses a aidé à résoudre votre problème, veuillez le marquer comme réponse. –

+0

Aidé mais pas résolu. Personne ne semble avoir regardé la source complète que je suis en train de convertir. – Coolcoder

Répondre

0

L'entreprise où je travaille ont simplement ouvert le code source d'une bibliothèque pour faire exactement cela: http://code.google.com/p/geocoordconversion/

+0

Est-ce encore une bibliothèque open source? Il y a des permissions qui m'empêchent de voir le projet. – Web

+0

Je ne sais pas ce qui s'est passé là-bas, il devrait être disponible à nouveau. –

+6

Cette solution est trop spécifique pour correspondre au titre de la plupart des gens qui viennent ici. –

1

Je ne pense pas qu'il y ait un moyen facile de convertir le code, car javascript est un langage beaucoup plus lâche. Quoi de plus dans votre code que vous utilisez la génération d'objets à la volée de javascript que vous ne pourriez pas en C#.

Vous avez probablement besoin de déclarer les mêmes classes que vous utilisez dans JS (mais n'êtes pas obligés de le faire) et de réécrire le code, je ne pense pas qu'il y ait un moyen simple.

De mon point de vue personnel mais il serait probablement utile de réécrire le code à partir de zéro en C#. Si vous êtes un développeur C# expérimenté, vous pourriez trouver un meilleur algorithme ou un design plus simple pour le code, si vous êtes un novice, mais cela vous aiderait à apprendre la langue.

1

Le meilleur espoir est d'utiliser Dictionary combiné avec une nouvelle classe def.

public class abf 
{ 
    public double a 
    {get;set;} 
    public double b 
    {get;set;} 
    public double f 
    {get;set;} 
} 

public class txtytz 
{ 
    //repeat for tx ty tz etc 
} 

// 

public Dictionary<string, abf> e; 
public Dictionary<string, txtytz> h; 

Voilà comment vous pouvez l'utiliser:

abf wgs84Result=e["WGS84"]; // will yield { a: 6378137,  b: 6356752.3142, f: 1/298.257223563 } 

txtytz OSGB36toWGS84Result=h["OSGB36toWGS84"]; // will yield { tx: 446.448, ty: -125.157, tz: 542.060, 
          rx: 0.1502, ry: 0.2470, rz: 0.8421, 
          s: -20.4894 } }; 
7

Le javascript utilise des types anonymes. Vous pourriez faire la même chose en C# mais il serait plus clair d'utiliser les types nommés.

par exemple, le javascript comme ceci:

// ellipse parameters 
var e = { WGS84: { a: 6378137,  b: 6356752.3142, f: 1/298.257223563 }, 
      Airy1830: { a: 6377563.396, b: 6356256.910, f: 1/299.3249646 }, 
      Airy1849: { a: 6377340.189, b: 6356034.447, f: 1/299.3249646 } }; 

ellipses ..represents. Vous pouvez le faire en C# comme ceci:

// ellipse class 
public class EllipseParameters { 
    public double a {get; set;} 
    public double b {get; set;} 
    public double f {get; set;} 
} 

public Ellipses { 
    public EllipseParameters WGS84 {get;set;} 
    public EllipseParameters Airy1830 {get;set;} 
    public EllipseParameters Airy1849 {get;set;} 
} 

Ellipses e = new Ellipses { 
    WGS84 = new EllipseParameters { a = 6378137,  b= 6356752.3142, f = 1/298.257223563 }, 
    Airy1830 = new EllipseParameters { a= 6377563.396, b= 6356256.910, f= 1/299.3249646 }, 
    Airy1849 = new EllipseParameters { a= 6377340.189, b= 6356034.447, f= 1/299.3249646 } 
}; 

Mais à la place de la classe Ellipses, vous voudrez peut-être une approche dictionnaire, quelque chose comme ceci:

var e = new Dictionary<String,EllipseParameters>(); 
e.Add("WGS84", new EllipseParameters { a = 6378137,  b= 6356752.3142, f = 1/298.257223563 }); 
e.Add("Airy1830", new EllipseParameters { a= 6377563.396, b= 6356256.910, f= 1/299.3249646 }); 
e.Add("Airy1849", new EllipseParameters { a= 6377340.189, b= 6356034.447, f= 1/299.3249646 }); 

Vous prendriez la même approche avec la classes de transformation helmert.

9

Votre extrait de code JavaScript crée des types anonymes. Vous pouvez faire la même chose en C#:

var e = new 
{ 
    WGS84 = new { a = 6378137, b = 6356752.3142, f = 1/298.257223563 }, 
    Airy1830 = new { a = 6377563.396, b = 6356256.910, f = 1/299.3249646 }, 
    Airy1849 = new { a = 6377340.189, b = 6356034.447, f = 1/299.3249646 } 
}; 

var h = new 
{ 
    WGS84toOSGB36 = new 
    { 
     tx = -446.448, ty = 125.157, tz = -542.060, // m 
     rx = -0.1502, ry = -0.2470, rz = -0.8421, // sec 
     s = 20.4894         // ppm 
    },        
    OSGB36toWGS84 = new 
    { 
     tx = 446.448, 
     ty = -125.157, 
     tz = 542.060, 
     rx = 0.1502, 
     ry = 0.2470, 
     rz = 0.8421, 
     s = -20.4894 
    } 
}; 
1

Quelqu'un a écrit classe aC# pour convertir WGS84 à OSGB36 et lat lon à NE, vous pouvez le télécharger here Je l'ai vérifié et il semble fonctionner bien.

0

J'utilise ce convertisseur en ligne par M2H.

http://www.m2h.nl/files/js_to_c.php

+0

Cet outil est pour UnityScript (qui malgré l'unité l'appelle parfois JavaScript n'est pas vraiment JavaScript) –

0
function Update() { 

    GetComponent.<Renderer>().material.color.r = red; 
    GetComponent.<Renderer>().material.color.b = blue; 
    GetComponent.<Renderer>().material.color.g = green; 
    GetComponent.<Renderer>().material.color.a = alpha; 
    GetComponent.<Renderer>().material.mainTextureOffset = Vector2(parseFloat(xOffset),parseFloat(yOffset));mipazirad 

    GetComponent.<Renderer>().material.mainTextureScale = Vector2(parseFloat(xTiling),parseFloat(yTiling)); 
    moshkhas mikonim 
    if(selectedShader == 0) 
     GetComponent.<Renderer>().material.shader = Shader.Find("Diffuse"); 
    else if(selectedShader == 1) 
     GetComponent.<Renderer>().material.shader = Shader.Find("Bumped Diffuse"); 
    else if(selectedShader == 2) 
     GetComponent.<Renderer>().material.shader = Shader.Find("Bumped Specular"); 

} 
0
function Start() { 
    var theMesh : Mesh; 

    theMesh = this.transform.GetComponent(MeshFilter).mesh as Mesh; 
    var theUVs : Vector2[] = new Vector2[theMesh.uv.Length]; 

    theUVs = theMesh.uv; 
    theUVs[4] = Vector2(0.5, 1.0); 
    theUVs[5] = Vector2(1.0, 1.0); 
    theUVs[8] = Vector2(0.5, 0.5); 
    theUVs[9] = Vector2(1.0, 0.5); 
    theMesh.uv = theUVs; 
} 
+0

Bien que ce code puisse répondre à la question, fournir un contexte supplémentaire concernant comment et/ou pourquoi il résout le problème améliorerait la valeur à long terme de la réponse . –

Questions connexes