DbGeography上的coordinateSystemId

时间:2013-04-02 23:17:21

标签: .net sql-server-2008-r2 entity-framework-5 geospatial

我需要使用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。 我是空间数据的新手,但我猜测有一套定义明确的坐标系?我似乎无法找到定义。

2 个答案:

答案 0 :(得分:14)

有一整套用于GIS的StackExchange,如果你像我一样,在那里作为一个不了解GIS的编码器而笨拙地出现在你身边:

https://gis.stackexchange.com/questions/48949/epsg-3857-or-4326-for-googlemaps-openstreetmap-and-leaflet

事实证明,有一种称为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 - 一个唯一标识各种空间投影,基准,单位,面临等的特定配置的数字。