如何将JavaScript中的地理坐标转换为C中的地理坐标#
我有一些JavaScript代码,我想将其转换为C#。我不知道如何构建这个结构的最佳方式,或者是否有简单的方法来转换代码。如何将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 Grid Code
编辑:谢谢大家,到目前为止对你的帮助;我想第二个要求是,链接中的代码提醒可以被转换。片段的焦点在匿名类型上。
的我工作的公司刚刚开放的源库来做到这一点:http://code.google.com/p/geocoordconversion/
这仍然是一个开源库吗?有权限设置阻止我查看项目。 – Web 2011-06-21 15:04:48
不知道那里发生了什么,应该可以再次使用。 – 2011-06-22 12:25:42
该解决方案过于具体,无法匹配大多数来此的人的头衔。 – 2013-03-16 11:46:09
我不认为有任何真正简单的方法来转换代码,因为JavaScript是一个更松散的语言。在你的代码中,你正在使用JavaScript的即时对象生成方式,而这在C#中是无法实现的。
您可能需要声明您在JS中使用的相同类(但不是强制这样做)并重写代码,我不认为有一种简单的方法。
从我个人的角度来看,尽管在C#中重写代码可能会有帮助。如果你是一个C#开发人员,你可能会发现一个更好的算法或更简单的代码设计,如果你是一个新手,虽然它会帮助你学习语言。
最好的希望是使用Dictionary
加上一个新的类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;
这里是你如何使用它:
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 } };
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 } };
..represents椭圆。你可以这样做在C#像这样:
// 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 }
};
但代替省略号类的,你可能要一本字典的方法,像这样:
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 });
你会采取与同样的方法helmert转换类。
您的JavaScript片段正在创建匿名类型。你可以做同样的事情在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
}
};
我通过M2H使用这个在线转换器。
该工具适用于UnityScript(虽然统一调用JavaScript有时候JavaScript并非真正的JavaScript) – 2015-11-02 22:16:30
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;
}
虽然此代码可能回答此问题,但提供有关如何解决问题和/或为何解决问题的其他上下文会提高答案的长期价值。 – 2017-02-05 09:17:24
我认为这是机械的,但不是自动的。 – Cheeso 2009-12-10 15:14:32
如果我们的答案中的任何一个能帮助解决您的问题,请将其标记为答案。 – 2009-12-16 17:02:33
帮助但未解决。似乎没有人看过我想转换的完整源代码。 – Coolcoder 2009-12-17 08:39:04