{"id":1256,"date":"2012-05-30T10:41:58","date_gmt":"2012-05-30T09:41:58","guid":{"rendered":"http:\/\/soci.hu\/blog\/?p=1256"},"modified":"2012-05-30T10:43:00","modified_gmt":"2012-05-30T09:43:00","slug":"sql-server-2012-ujdonsagok-6-spatial-fejlesztesek","status":"publish","type":"post","link":"https:\/\/soci.hu\/blog\/index.php\/2012\/05\/30\/sql-server-2012-ujdonsagok-6-spatial-fejlesztesek\/","title":{"rendered":"SQL Server 2012 \u00fajdons\u00e1gok &#8211; 6. Spatial fejleszt\u00e9sek"},"content":{"rendered":"<p>Geometriai adatok t\u00e1rol\u00e1sa \u00e9s kezel\u00e9se az SQL Server 2008-ban jelent meg. A k\u00fcl\u00f6nb\u00f6z\u0151 alakzatok adatait nem csak t\u00e1rolni k\u00e9pes a szerver, hanem sokf\u00e9le m\u0171veletet v\u00e9gezni rajtuk, \u00e9s k\u00e9pes indexelni a s\u00edkbeli \u00e9s a f\u00f6ld fel\u00fclet\u00e9n \u00e9rtelmezett g\u00f6rb\u00fclt adatokat, \u00edgy p\u00e9ld\u00e1ul k\u00e9t alakzat k\u00f6z\u00f6tti t\u00e1vols\u00e1gkeres\u00e9st nagyon gyorsan tudja v\u00e9grehajtani.<br \/>\nAz SQL Server 2012-ben a k\u00f6vetkez\u0151 f\u0151bb fejleszt\u00e9sek t\u00f6rt\u00e9ntek (nem teljes lista):<\/p>\n<ul>\n<li>A f\u00f6ldg\u00f6mb felsz\u00edn\u00e9n \u00e9rtelmezett geography t\u00edpus met\u00f3dusai most m\u00e1r mindent tudnak, amit a geometry t\u00edpus (eddig egyes met\u00f3dusok nem voltak rajta implement\u00e1lva).<\/li>\n<li>Az a korl\u00e1toz\u00e1s, hogy egy alakzat nem ny\u00falhat \u00e1t a m\u00e1sik f\u00e9lg\u00f6mbre megsz\u0171nt<\/li>\n<li>\u00daj alakzatok jelentek meg (CircularString, CompoundCurve, CurvePolygon). Ezen \u00edves alakzatok j\u00e1rul\u00e9kos el\u0151nye, hogy a Buffer met\u00f3dus mellett, amely k\u00e9pes k\u00f6rbevenni egy alakzatot egy m\u00e1sik (elnagyoltabb \u00e9s t\u00e1volabbi) alakzattal, megjelent a BufferWithCurves, amely nem csak egyenes vonalakkal dolgozik, \u00edgy sokkal kevesebb alakzatb\u00f3l l\u00e9tre tudja hozni a k\u00f6rvonalat.<\/li>\n<li>R\u00e9szletes hiba\u00fczenetek, ha nem valid egy alakzat (nem z\u00e1rt, stb.).<\/li>\n<li>Sok \u00faj met\u00f3dus, t\u00f6bbek k\u00f6z\u00f6tt:<\/li>\n<ul>\n<li>ShortestLineTo: legr\u00f6videbb \u00fat k\u00e9t alakzat k\u00f6z\u00f6tt egyenesk\u00e9nt visszaadva.<\/li>\n<li>\u00daj aggreg\u00e1l\u00f3 f\u00fcggv\u00e9nyek: UnionAggregate, EnvelopeAggregate, CollectionAggregate, ConvexHullAggregate. Ezek igen hasznosak, amikor sok kis darabb\u00f3l nagyobb alakzatokat \u00f6sszerakni.\n<\/li>\n<\/ul>\n<li>A bels\u0151 sz\u00e1m\u00edt\u00e1sok eddig 27, most m\u00e1r 48 bites pontoss\u00e1ggal dolgoznak.<\/li>\n<li>Auto grid. Az alakzatok indexel\u00e9s\u00e9hez a s\u00edkot felosztj\u00e1k egyre kisebb n\u00e9gyzetekre, \u00e9s r\u00f6gz\u00edtik, hogy az alakzat mely n\u00e9gyezeteket fedi le. Eddig nek\u00fcnk kellett megadni a maximum 4 szint felbont\u00e1s\u00e1t (h\u00e1nyszor h\u00e1nyas n\u00e9gyzetr\u00e1csra fektess\u00e9k r\u00e1 az alakzatot). Most m\u00e1r automatikusan k\u00e9pes d\u00f6nteni a szerver a felbont\u00e1sr\u00f3l, r\u00e1ad\u00e1sul olyan j\u00f3l, hogy az indexelt keres\u00e9sek \u00e1ltal\u00e1ban jelent\u0151sen gyorsabbak lesznek, mint a kor\u00e1bbi verzi\u00f3ban.\n<\/li>\n<\/ul>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\ncreate spatial index idxgeog\r\non table(column) using GEOGRAPHY_AUTO_GRID;\r\n<\/pre>\n<ul>\n<li>T\u00f6m\u00f6r\u00edthet\u0151 spatial indexek: kb. fel\u00e9re nyomhat\u00f3k \u00f6ssze a spatial indexek, 5-10% CPU vesztes\u00e9g \u00e1r\u00e1n.<\/li>\n<li>A leggyakoribb feladatra, amikor alakzatok k\u00f6z\u00f6tt kell legkisebb t\u00e1vols\u00e1got sz\u00e1molni (pl. \u00fatvonaltervez\u00e9sn\u00e9l) 10-30-szoros gyorsul\u00e1s \u00e9rhet\u0151 el az SQL 2008-hoz k\u00e9pest, ha a lek\u00e9rdez\u00e9s\u00fcnket \u00fagy \u00edrjuk meg, hogy az optimizer az \u00fan. Nearest Neighbor Query Plan-t tudja haszn\u00e1lni.\n<\/li>\n<li>sp_help_spatial_geography_histogram  \u00e9s sp_help_spatial_geometry_histogram  t\u00e1rolt elj\u00e1r\u00e1sok az adatok eloszl\u00e1s\u00e1t mutatja meg (az SQL Server Management Studio Spatial f\u00fcl\u00e9n vizu\u00e1lisan is).\n<\/li>\n<\/ul>\n<p>\u00cdme egy Nearest Neighbor Query Plan-t haszn\u00e1l\u00f3 lek\u00e9rdez\u00e9s:<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\nDECLARE @g geography = &#039;POINT(18.919358\t47.460025)&#039;;\t--Buda\u00f6rs\r\nSELECT TOP(10) geom.ToString(), \r\ngeom.STBuffer(5), \r\nTelepules, Utca, Hazszam1\r\nFROM &#x5B;HungarySpatial].&#x5B;dbo].&#x5B;Cim] \r\n--with(index (idx_Cim_Spatial_1))\r\nwith(index (idx_Cim_Spatial_Uj))\r\nWHERE geom.STDistance(@g) IS NOT NULL\r\nORDER BY geom.STDistance(@g);\r\n\r\n--Index n\u00e9lk\u00fcl: 280mp\r\n--2008-as index-szel 13mp\r\n--2012-es index-szel 0.1mp!\r\n\r\n--R\u00e9gi index\r\nCREATE SPATIAL INDEX idx_Cim_Spatial_1 ON Cim (geom)\r\nUSING  GEOGRAPHY_GRID \r\nWITH (GRIDS =(LEVEL_1 = MEDIUM, LEVEL_2 = MEDIUM, LEVEL_3 = MEDIUM, LEVEL_4 = MEDIUM), \r\nCELLS_PER_OBJECT = 16)\r\n\r\n--\u00daj, automatikus felbont\u00e1s\u00fa spatial index\r\nSET ARITHABORT ON\r\nSET CONCAT_NULL_YIELDS_NULL ON\r\nSET QUOTED_IDENTIFIER ON\r\nSET ANSI_NULLS ON\r\nSET ANSI_PADDING ON\r\nSET ANSI_WARNINGS ON\r\nSET NUMERIC_ROUNDABORT OFF\r\n\r\nCREATE SPATIAL INDEX idx_Cim_Spatial_Uj\r\nON Cim (geom) \r\nUSING GEOGRAPHY_AUTO_GRID;\r\n<\/pre>\n<p>A spatial t\u00e1mogat\u00e1s egy gyakran mell\u0151z\u00f6tt r\u00e9sze az SQL Servernek, pedig m\u00e9g az ingyenes Express is t\u00e1mogatja.  Az Entity Framework kliensoldalr\u00f3l k\u00f6nnyen el\u00e9rhet\u0151v\u00e9 teszi a t\u00e9rbeli adatokat, \u00edgy egyszer\u0171en \u00edrhatunk izgalmas \u00e9s hasznos alkalmaz\u00e1sokat, amelyek t\u00e9rbeli adatokkal dolgoznak (legk\u00f6zelebbi c\u00e9l\u00e1llom\u00e1s, t\u00e9rk\u00e9p vizualiz\u00e1ci\u00f3, stb.)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Geometriai adatok t\u00e1rol\u00e1sa \u00e9s kezel\u00e9se az SQL Server 2008-ban jelent meg. A k\u00fcl\u00f6nb\u00f6z\u0151 alakzatok adatait nem csak t\u00e1rolni k\u00e9pes a szerver, hanem&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,4,30,58,77,78],"tags":[],"class_list":["post-1256","post","type-post","status-publish","format-standard","hentry","category-adatbazisok","category-szakmai-elet","category-sql-server","category-sql-server-2008","category-sql-server-2008-r2","category-sql-server-2012"],"_links":{"self":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts\/1256","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=1256"}],"version-history":[{"count":2,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts\/1256\/revisions"}],"predecessor-version":[{"id":1258,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/posts\/1256\/revisions\/1258"}],"wp:attachment":[{"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=1256"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=1256"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/soci.hu\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=1256"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}