Window Functions

تبدیل سیستم تصویر در SQL Server

با وجود اینکه SQL Server فاقد توابع مکانی مورد نیاز برای تبدیل سیستم مختصات و سیستم تصویر اطلاعات مکانی است می توان با استفاده از قابلیت توسعه پذیر آن توسط .NET CLR Assembly این امکان را فراهم کرد.

سیستم اطلاعات جغرافیایی, سامانه اطلاعات جغرافیایی,سامانه اطلاعات مکانی, نرم افزار, ژئوپرتال, GIS, WebGIS, Web-GIS,Software, GIS-Software, Geoportal, Mobile-GIS, Spatial Projection, SQL Server, .NET CLR Assembly, Map Projection, تبدیل سیستم مختصات در SQL Server, پروژکشن

برخلاف پایگاه ها داده هایی مثل Oracle و PostgreSQL PostGIS در SQL Server قابلیت تبدیل سیستم مختصات عوراض Geometry و Geography وجود ندارد. برای رفع این کمبود می توان از قابلیت توسعه پذیری SQL Server توسط کتابخانه های .NET CLR Assembly استفاده کرد.

یک .NET Common Language Runtime(CLR) یک فایل dll کامپایل شده از یکی از زبان های مورد پذیرش .NET Framework است.
با استفاده از CLR می توان ایجاد Stored Procedure، توابع و انواع اشیاء را در یک زبان برنامه نویسی مثل C# یا VB.NET انجام داد.

GeoPackMapSqlTools

سامانه اطلاعات مکانی تحت وب ژئوپک به منظور تبدیل سیستم تصویر عوارض پایگاه داده مکانی موجود از کتابخانه توسعه داده شده GeoPackMapSqlTools استفاده می کند. پس از بارگذاری این کتابخانه می توان عوارض هر لایه را به سیتسم مختصات مورد نظر پروژکت کرد.

GeoPackMapSqlTools

بارگذاری GeoPackMapSqlTools در SQL Server

با بار گذاری این کتابخانه یک User-Defined Type با نام SqlProjector ایجاد می شود که می توان از آن به منظور تبدیل مختصات استفاده کرد.

تبدیل سیستم مختصات

اسکریپت زیر روش تبدیل مختصات یک نقطعه از سیستم مختصات جغرافیایی به سیستم تصویر وب مرکاتور یا گوگل مرکاتور با کد EPSG:3857 را نشان می دهد.


DECLARE @g geometry
DECLARE @g_projected geometry

SET @g = geometry::STPointFromText('POINT (52.2534 30.5121)', 4326)
SET @g_projected = SqlProjector::ProjectGeometry(@g, '4326', '3857')

SELECT  @g As g,
		@g.STAsText() As g_WKT,
		@g_projected AS g_projected,
		@g_projected.STAsText() As g_projected_WKT

projecting-geometry-in-sql-server

تبدیل سیستم مختصات جغرافیایی به وب مرکاتور

در این روش از تابع استاتیک ProjectGeometry موجود در کلاس SqlProjector استفاده شده است.
ورودی های این تابع یک شی از نوع Geometry و مشخصات سیستم تصویر مبدا و مقصد است.
این تابع کد EPSG مربوط به حدود 5800 سیستم تصویر را در خود دارد و علاوه بر آن امکان معرفی سیستم تصویر مورد نظر در قالب WKT نیز وجود دارد.


DECLARE @g geometry
DECLARE @g_projected geometry
DECLARE @g_r geometry
DECLARE @to_sr as nvarchar(MAX)
SET @to_sr = 'PROJCS["Iran Lambert",
	GEOGCS["GCS_WGS_1984",
		DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],
		PRIMEM["Greenwich",0.0],
		UNIT["Degree",0.0174532925199433]],
 PROJECTION["Lambert_Conformal_Conic_2SP"],
 PARAMETER["False_Easting",5000000.0],PARAMETER["False_Northing",30000000.0],
 PARAMETER["Central_Meridian",54.0],
 PARAMETER["standard_parallel_1",30.0],
 PARAMETER["standard_parallel_2",36.0],
 PARAMETER["Central_Parallel",24.0],
 UNIT["Meter",1.0]]'
SET @g = geometry::STPointFromText('POINT (52.2534 30.5121)', 4326)
SET @g_projected = SqlProjector::ProjectGeometry(@g, '4326', @to_sr)
SET @g_r = SqlProjector::ProjectGeometry(@g_projected , @to_sr,'4326')

SELECT  @g.STAsText() As g_WKT,
		@g_projected.STAsText() As g_projected_WKT,
		@g_r.STAsText() As g_r_WKT

projecting-geometry-to-iran-lambert

تبدیل سیستم مختصات جغرافیایی به لامبرت ایران

علاوه بر این روش می توان توسط تابع استاتیک CreateFromWKT و معرفی سیستم تصویر های مبدا و مقصد یک شی از نوع SqlProjector و سپس توسط تابع Project این شی عوارض را تبدیل کرد.
نمونه اسکریپت زیر از این روش برای تبدیل تمام عوارض یک لایه پلیگونی استفاده کرده است. در این کد مختصات مرکز اشکال هندسی در سیستم مختصات لامبرت ایران استخراج شده است.


DECLARE @projector SqlProjector
SET @projector = SqlProjector::CreateFromWKT('4326','PROJCS["Iran Lambert",
	GEOGCS["GCS_WGS_1984",
		DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],
		PRIMEM["Greenwich",0.0],
		UNIT["Degree",0.0174532925199433]],
 PROJECTION["Lambert_Conformal_Conic_2SP"],
 PARAMETER["False_Easting",5000000.0],PARAMETER["False_Northing",30000000.0],
 PARAMETER["Central_Meridian",54.0],
 PARAMETER["standard_parallel_1",30.0],
 PARAMETER["standard_parallel_2",36.0],
 PARAMETER["Central_Parallel",24.0],
 UNIT["Meter",1.0]]')
 
SELECT [OBJECTID]
      ,[Name]
      ,[SHAPE].STCentroid().STAsText() AS Centroid
	  ,@projector.Project([SHAPE]).STCentroid().STAsText() as Centroid_Lambert
      
  FROM [POLYGONS_1]

projecting-layer

استخراج مختصات نقاط مرکز پلیگون های یک لایه در سیستم تصویر لامبرت

در سامانه اطلاعات مکانی تحت وب ژئوپک از این توابع برای جستجو در پایگاه داده و نمایش اطلاعات هندسی در قالب سیستم تصویر مورد نظر کاربر استفاده می شود. علاوه بر این کاربر می تواند به صورت دلخواه از این توابع در ستون های محاسباتی استفاده کند. برای جزئیات بیشتر می توانید به راهنمای سامانه مراجعه کنید.