12

我需要使用 Bing 地图服务、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。我是空间数据的新手,但我猜有一组定义明确的坐标系?我似乎找不到定义。

4

2 回答 2

14

GIS 有一个完整的 StackExchange,如果您像我一样,作为不了解 GIS 的编码员在其中遇到问题,那么您就可以搭便车了:

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

事实证明,地图(“GIS”)中有一个名为 EPSG 的标准,人们在提及它时似乎可以互换使用“EPSG”、“EPSG SRID”和“SRID”。在大多数 GPS 坐标使用中,如果您谈论的是地球(包括您从谷歌地图获得的纬度),那么您使用的是 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);
    }
}
于 2014-08-29T07:08:41.143 回答
4

它是一个定义明确的空间参考标识符——一个唯一标识各种空间投影、基准、单位、朝向等的某种配置的数字。

于 2013-04-02T23:21:22.413 回答