coordinateSystemId上DbGeography(coordinateSystemId

2019-08-19 03:36发布

我需要进行地理编码大量的地址,使用必应地图服务,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我是新来的空间数据,但我猜有一组明确的坐标系的例子吗? 我似乎无法找到一个定义。

Answer 1:

有地理信息系统的整体StackExchange,如果你和我一样,在那里胡扯的编码器不知道GIS,你是在一坐:

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

原来,有一个在映射称为EPSG标准(“GIS”),人们似乎提到它的时候用“EPSG”,“EPSG SRID”和“SRID”互换。 在大多数GPS COORDS使用,如果你在谈论地球(包括LatLngs你从谷歌地图获得),你正在使用EPSG SRID 4326,如果你在谈论一个2D平面地图(如谷歌自定义地图) ,你在谈论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);
    }
}


Answer 2:

这是一个良好定义的空间参考标识符 -一个数字,唯一地标识各种空间预测,基准,单元,面向等的某一配置



文章来源: coordinateSystemId on DbGeography