2009-12-10 5 views
5

Ich habe einige Javascript-Code, und ich möchte dies in C# konvertieren. Ich habe keine Ahnung von dem besten Weg, dies zu strukturieren oder wenn es eine einfache Möglichkeit gibt, den Code zu konvertieren.Wie Konvertieren von Geokoordinaten in Javascript zu geoordinated in C#

Ein Beispiel dieses Codes ist unten gezeigt. Javascript Grid Code

EDIT:

// 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; 
} 

Der vollständige Code kann heruntergeladen werden unter Vielen Dank an alle bisher für Ihre Hilfe; Ich denke, die zweite Anforderung ist, dass die Erinnerung an den Code in der Verbindung umgewandelt werden kann. Der Fokus des Snippets lag auf den anonymen Typen.

+0

Ich denke, es ist mechanisch, aber nicht automatisch. – Cheeso

+0

Wenn eine unserer Antworten zur Lösung Ihres Problems beigetragen hat, markieren Sie diese bitte als Antwort. –

+0

Hat geholfen, aber nicht gelöst. Niemand scheint sich die vollständige Quelle angesehen zu haben, die ich zu konvertieren versuche. – Coolcoder

Antwort

0

Die Firma für die ich arbeite haben nur offene Bibliothek sourced zu tun genau dies: http://code.google.com/p/geocoordconversion/

+0

Ist das noch eine Open-Source-Bibliothek? Es gibt Berechtigungen, die mich beim Anzeigen des Projekts blockieren. – Web

+0

Weiß nicht, was dort passiert ist, es sollte wieder verfügbar sein. –

+6

Diese Lösung ist zu spezifisch für den Titel der meisten Leute, die hierher kommen. –

1

Ich glaube nicht, dass es eine wirklich einfache Möglichkeit gibt, den Code zu konvertieren, da JavaScript eine viel lockere Sprache ist. Whatsmore in Ihrem Code verwenden Sie Javascript-on-the-Fly-Objekt Generation, die Sie nicht in C# konnten.

Sie müssen wahrscheinlich die gleichen Klassen deklarieren, die Sie in JS verwenden (aber nicht dazu gezwungen wurden) und den Code neu schreiben, ich glaube nicht, dass es einen einfachen Weg gibt.

Aus meiner persönlichen Perspektive wäre es wahrscheinlich hilfreich, den Code in C# von Grund auf neu zu schreiben. Wenn Sie ein erfahrener C# -Entwickler sind, könnten Sie einen besseren Algorithmus oder ein einfacheres Design für den Code finden, wenn Sie ein Neuling sind, aber es würde Ihnen helfen, die Sprache zu lernen.

1

Die beste Hoffnung ist es, Dictionary kombiniert mit einer neuen Klasse 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; 

Hier ist, wie Sie es verwenden können:

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

Die Javascript anonyme Typen verwendet. Sie könnten dasselbe in C# tun, aber es wäre klarer, benannte Typen zu verwenden.

zum Beispiel die Javascript wie folgt aus:

// 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 } }; 

..represents Ellipsen. Man könnte dies wie so in C# tun:

// 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 } 
}; 

Aber anstelle der Ellipsen-Klasse, können Sie ein Wörterbuch Ansatz wollen, so etwas wie dieses:

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 }); 

Sie würden den gleichen Ansatz mit der Helmert transformiert Klassen.

9

Ihr JavaScript-Snippet erstellt anonyme Typen. Sie können die gleiche Sache in C# tun:

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

Jemand aC# Klasse geschrieben hat WGS84 zu OSGB36 und lat lon NE zu konvertieren, können Sie es here herunterladen ich geprüft habe und es scheint nur zu arbeiten, fein.

0

Ich benutze diesen Online-Konverter von M2H.

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

+0

Dieses Tool ist für UnityScript (das trotz der Einheit es manchmal anruft ist JavaScript nicht wirklich 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

Während dieser Code die Frage beantworten kann, würde das Bereitstellen eines zusätzlichen Kontexts, wie und/oder warum er das Problem löst, den langfristigen Wert der Antwort verbessern . –