Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将Javascript中的地理坐标转换为C中的地理坐标#_C#_Javascript_Standards - Fatal编程技术网

C# 如何将Javascript中的地理坐标转换为C中的地理坐标#

C# 如何将Javascript中的地理坐标转换为C中的地理坐标#,c#,javascript,standards,C#,Javascript,Standards,我有一些javascript代码,我想把它转换成C。我不知道构造这个的最佳方法,也不知道是否有转换代码的简单方法 下面显示了此代码的示例 // 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 },

我有一些javascript代码,我想把它转换成C。我不知道构造这个的最佳方法,也不知道是否有转换代码的简单方法

下面显示了此代码的示例

// 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;
}
完整代码可从以下网站下载:


编辑:感谢大家迄今为止的帮助;我猜第二个要求是链接中的代码提示可以转换。代码片段的重点是匿名类型。

我认为没有任何真正简单的方法来转换代码,因为javascript是一种更松散的语言。在您的代码中,您使用的是javascript的动态对象生成,这在C#中是无法实现的

您可能需要声明与JS中使用的类相同的类(但不是强制声明)并重写代码,我认为没有简单的方法


从我个人的角度来看,用C#从头重写代码可能会有所帮助。如果你是一名经验丰富的C#开发人员,你可能会找到更好的算法或更简单的代码设计,如果你是一名新手,尽管这会帮助你学习该语言。

最好的希望是将
字典
与新的类定义结合使用

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;

javascript使用匿名类型。在C#中也可以这样做,但使用命名类型会更清晰

例如,javascript如下所示:

// 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   } };
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   });
…表示省略号。您可以在C#中这样做:

但是代替省略号类,您可能需要一种字典方法,如下所示:

// 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   } };
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   });
var e=newdictionary();
e、 添加(“WGS84”,新的椭圆分段参数{a=6378137,b=6356752.3142,f=1/298.257223563});
e、 添加(“Airy1830”,新的省略参数{a=6377563.396,b=6356256.910,f=1/299.3249646});
e、 添加(“Airy1849”,新的椭圆分段参数{a=6377340.189,b=6356034.447,f=1/299.3249646});

您可以对helmert转换类采用相同的方法。

您的JavaScript片段正在创建匿名类型。你可以在C#中做同样的事情:

有人编写了一个c#类来将WGS84转换为OSGB36,将lat lon转换为NE,您可以下载它
我已经检查过了,它似乎工作得很好。

我工作的公司刚刚开放了一个库来完成这项工作:

我使用M2H的在线转换器

功能更新(){
GetComponent.(.material.color.r=红色;
GetComponent.(.material.color.b=蓝色;
GetComponent.(.material.color.g=绿色;
GetComponent.(.material.color.a=alpha;
GetComponent.(.material.mainTextureOffset=Vector2(parseFloat(xOffset),parseFloat(yOffset));mipazirad
GetComponent.(.material.mainTextureScale=Vector2(parseFloat(xTiling)、parseFloat(yTiling));
莫斯科哈斯米科尼姆酒店
如果(selectedShader==0)
GetComponent.(.material.shader=shader.Find(“漫反射”);
else if(selectedShader==1)
GetComponent.(.material.shader=shader.Find(“凹凸漫反射”);
else if(selectedShader==2)
GetComponent.(.material.shader=shader.Find(“凹凸镜面反射”);
}

我认为这是机械的,但不是自动的。如果我们的任何一个答案有助于解决您的问题,请将其标记为答案。有帮助但没有解决。似乎没有人看过我试图转换的完整源代码。这仍然是一个开源库吗?有权限设置阻止我查看项目。不知道那里发生了什么,它应该可以再次使用。对于大多数来这里的人来说,此解决方案过于具体,无法与标题匹配。此工具适用于UnityScript(尽管unity有时称之为JavaScript,但JavaScript并不是真正的JavaScript)虽然这段代码可以回答这个问题,但提供关于它如何和/或为什么解决问题的附加上下文将提高答案的长期价值。
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
    }
};
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");

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