我需要使用Bing Map服务,EF 5和SQL Server 2008对大量地址进行地理编码。我使用的是SQL中的地理数据类型,它转换为EF的DbGeography类型。
当我创建DbGeography对象时,就像这样
string point = string.Format("POINT({0} {1})",address.Longitude,address.Latitude);
address.Location = System.Data.Spatial.DbGeography.PointFromText(point, 4326);
第二个参数调用“coordinateSystemId”。究竟是什么?我看到很多例子都使用了4326。 我是空间数据的新手,但我猜测有一套定义明确的坐标系?我似乎无法找到定义。
答案 0 :(得分:14)
有一整套用于GIS的StackExchange,如果你像我一样,在那里作为一个不了解GIS的编码器而笨拙地出现在你身边:
事实证明,有一种称为EPSG的地图标准(“GIS”),人们似乎在引用时可以互换地使用“EPSG”,“EPSG SRID”和“SRID”。在大多数GPS坐标使用中,如果您正在谈论地球(包括从谷歌地图获得的LatLng),那么您正在使用EPSG SRID 4326,如果您正在谈论平面2D地图(如Google自定义地图) ,你在谈论EPSG SRID 3857。
还有一些关于WGS的关键词你可以忽略。
.Net仅查找EPSG SRID中的实际数字ID。如果这些只是DbGeography上的常量,那将是非常有用的:
public class DbGeography
{
public const int SridGps = 4326;
public const int Srid2dPlane = 3857;
但没有这样的运气。
无论如何,请考虑在应用程序中使它们成为常量,而不是仅仅抛出未记录的幻数。我们的小助手班:
public class GeoHelper
{
public const int SridGoogleMaps = 4326;
public const int SridCustomMap = 3857;
public static DbGeography FromLatLng(double lat, double lng)
{
// http://codepaste.net/73hssg
return DbGeography.PointFromText(
"POINT("
+ lng.ToString() + " "
+ lat.ToString() + ")",
SridGoogleMaps);
}
}
答案 1 :(得分:4)
这是一个well defined spatial reference identifier - 一个唯一标识各种空间投影,基准,单位,面临等的特定配置的数字。