C# 如何将Javascript中的地理坐标转换为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 },
// 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;
}