我需要进行地理编码大量的地址,使用必应地图服务,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我是新来的空间数据,但我猜有一组明确的坐标系的例子吗? 我似乎无法找到一个定义。
有地理信息系统的整体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);
}
}
这是一个良好定义的空间参考标识符 -一个数字,唯一地标识各种空间预测,基准,单元,面向等的某一配置