Více

Nastavení geometrie pomocí dotazu sql

Nastavení geometrie pomocí dotazu sql


Snažím se sloučit data z amerického státu shapefile s daty o každém státě. Použil jsem tento dotaz SQL, který má fungovat:

SELECT * FROM child_poverty_by_state UPDATE child_poverty_by_state SET the_geom = us_states.the_geom FROM us_states WHERE us_states.state = child_poverty_by_state.state

Tabulka „us_states“, což je soubor shapefile, se v dotazu automaticky nevyplní. Nejste si jisti proč, došlo u mého dotazu k chybě?


Když vytváříte child_poverty_by_state, musíte vytvořit tabulku geometrie s následujícími, za předpokladu, že pracujete ve WGS84…

ALTER TABLE child_poverty_by_state PŘIDAT COLUMN the_geom geometry (POINT, 4326);

Musíte také zajistit, aby sloupec geometrie měl správný srid, není vždy přidán ze souboru tvaru, například pro WGS84…

UPDATE us_states SET the_geom = ST_SetSRID (the_geom, 4326);

Používání datových typů GEOMETRY a GEOGRAPHY v ADO.NET

Datové typy Vertica GEOMETRY a GEOGRAPHY jsou zálohovány LONG VARBINARY nativními typy a klientské aplikace ADO.NET je považují za binární data. Tyto datové typy však mají formát, který je pro Verticu jedinečný. Chcete-li manipulovat s těmito daty ve vaší aplikaci C #, musíte použít funkce ve Vertica, které je převedou do rozpoznaného formátu.

Chcete-li převést WKT nebo WKB do formátu GEOMETRIE nebo GEOGRAFIE, použijte jednu z následujících funkcí SQL:

    —Převede WKT na typ GEOGRAFIE. —Převede WKB na typ GEOGRAPHY. —Převede WKT na typ GEOMETRIE. —Převede typ WKB na GEOMETRII.

Chcete-li převést objekt GEOMETRY nebo GEOGRAPHY na odpovídající WKT nebo WKB, použijte jednu z následujících funkcí SQL:

    —Převede objekt GEOMETRIE nebo GEOGRAFIE na WKT, vrátí LONGVARCHAR. —Převede objekt GEOMETRIE nebo GEOGRAFIE na WKB, vrátí DLOUHÝ VARBINÁŘ.

Následující příklad kódu C # převede data WKT na data GEOMETRY pomocí ST_GeomFromText a uloží je do tabulky. Později tento příklad načte data GEOMETRY z tabulky a převede je do formátu WKT a WKB pomocí ST_AsText a ST_AsBinary.


A. Ukazuje, jak přidat a dotazovat se na data geometrie

Následující dva příklady ukazují, jak přidat a dotazovat se na data geometrie. První příklad vytvoří tabulku se sloupcem identity a sloupcem geometrie GeomCol1. Třetí sloupec vykresluje sloupec geometrie do své reprezentace dobře známého textu (WKT) Open Geospatial Consortium (OGC) a používá metodu STAsText (). Poté se vloží dva řádky: jeden řádek obsahuje instanci LineString geometrie a jeden řádek obsahuje instanci Polygon.

B. Vrácení průniku dvou instancí geometrie

Druhý příklad používá metodu STIntersection () k vrácení bodů, kde se protínají dvě dříve vložené instance geometrie.

C. Použití geometrie ve vypočítaném sloupci

Následující příklad vytvoří tabulku s trvalým vypočítaným sloupcem pomocí a geometrie typ.


Databáze IBM Informix

Chcete-li použít vrstvu dotazu k zobrazení prostorových dat z databáze Informix, musí být databáze zaregistrována v Informix Spatial DataBlade a v počítači, ze kterého se k databázi budete připojovat, musí být nainstalován a nakonfigurován klient Informix IConnect.

Informix Spatial DataBlade

Databáze Informix, kterou chcete použít, musí být zaregistrována v Informix Spatial DataBlade, než budete moci použít prostorový typ ST_Geometry. Pokud si nejste jisti, zda je databáze, ke které se připojujete, povolena pro ST_Geometry, kontaktujte svého správce GIS nebo správce databáze.

Informix IConnect

Nainstalujte si na klientský počítač aplikaci Informix IConnect a nakonfigurujte aplikaci Setnet32. Pokud pro připojení k Informixu nebudete používat připojovací řetězec bez DSN, musíte nakonfigurovat připojení ODBC (Open Database Connectivity).

Klientskou aplikaci Informix si můžete stáhnout z My Esri nebo ji získat od IBM. V dokumentaci k produktu IBM Informix najdete informace o instalaci a konfiguraci klienta Informix.


Používání dat prostorové geometrie ve službě Azure Cosmos DB

Mnoho aplikací používá prostorová data k reprezentaci fyzických umístění a tvarů objektů, jako jsou města, silnice a jezera. Nyní můžete uložit datový typ geografie i datový typ geometrie ve službě Azure Cosmos DB pomocí rozhraní SQL (Core) API. T on zeměpis datový typ představuje data v souřadnicovém systému kulaté Země a geometrie datový typ představuje data v euklidovském plochém souřadnicovém systému.

Azure Cosmos DB podporuje indexování a dotazování prostorových dat představovaných pomocí specifikace GeoJSON a čtyř prostorových typů:

Indexování geografických dat

Toto je ukázková zásada indexování, která indexuje Points, Polygons, MultiPolygons a LineStrings with zeměpis indexování dat:

Indexování geometrických dat

Indexování geometrických dat je stejně jako indexování geografických dat, ale existují dva další kroky, které lze provést v Azure Portal nebo Azure Cosmos DB .NET SDK.

  1. Přepněte geoprostorovou konfiguraci z geografie (výchozí) na geometrii aby mohl dotazovací modul Azure Cosmos DB vědět, jaký typ prostorových dat se indexuje. To je důležité, protože i když jsou geografická data a geometrická data v GeoJSONu zastoupena, Azure Cosmos DB interpretuje a indexuje data odlišně, v závislosti na geoprostorové konfiguraci.

Nastavení geometrie nastavení pro prostorové nastavení v Azure Cosmos DB

  1. Přidejte ohraničovací rámeček do své zásady indexování pro každou prostorovou cestu při přepnutí na prostorové indexování geometrie. Ohraničující rámeček není pro geografická prostorová data nutný, protože všechna geografická data jsou založena na jeho poloze na Zemi a relevantní typy GeoJSON v platných zeměpisných šířkách a délkách jsou vždy indexovány. Dvojrozměrná euklidovská rovina souřadnic geometrických dat však nemá žádná omezení, takže při přepnutí na prostorové indexování geometrie musíte určit ohraničující rámeček.
Pomocí ohraničovacího rámečku

Ohraničující rámeček se skládá z následujících vlastností:

  • xmin: minimální indexovaná souřadnice x
  • ymin: minimální indexovaná souřadnice y
  • xmax: maximální indexovaná souřadnice x
  • ymax: maximální indexovaná souřadnice y

Vytvořte ohraničující rámeček, který obsahuje všechna (nebo většinu) vašich dat, protože pouze operace vypočítané na objektech, které jsou zcela uvnitř ohraničujícího rámečku, budou moci využívat prostorový index. Nerobte ohraničující rámeček výrazně větší, než je nutné, protože to negativně ovlivní výkon dotazu. Můžete definovat ohraničující rámeček v rámci vaší zásady indexování, jako je příklad níže, ve kterém jsou indexována všechna data, která mají souřadnici x mezi -10 a 10 a souřadnici y mezi -20 a 20:

Při použití prostorových dat by měly být indexovány všechny možné typy. V Azure Cosmos DB může indexování dalších cest vést k vyššímu poplatku za zápis (RU) jednotky. Pouze prostorové indexy však mají vytvořeny pouze dokumenty s platnými cestami GeoJSON. Například pokud máte ve své datové sadě pouze Body, pak můžete indexovat jak Body, tak Polygony se stejným množstvím RU na zápis, než kdybyste právě # indexovali Body.

Míchání prostorových dat s jinými typy

Geografická data a geometrická data nelze kombinovat ve stejném kontejneru Azure Cosmos DB, ale prostorová data lze kombinovat s jinými typy dat. Prostorové indexy lze také použít vedle existujících rozsahových a složených indexů. Stejné funkce prostorového systému lze použít s geografickými daty a geometrickými daty, včetně:


Nastavení geometrie pomocí dotazu sql - Geografické informační systémy

Odpověděl:

Otázka

Ahoj,
Zakoupili jsme data ve formátu WKT, která obsahují multipolygony pro všechny poštovní směrovací čísla v USA. Bohužel při pokusu o jejich import jako geografických datových typů narazím na problémy. Jelikož máme co do činění s reprezentací dat na úrovni zipu, zdálo se rozumné ustoupit zpět do geometrie, abychom je reprezentovali. Takže pomocí geometry :: STMPolyFromText ([wkt], 4326), kde wkt je moje pole prostorových dat, jsem byl schopen dostat svá data dovnitř. (Kde stále selhal v geografii, myslím, že kvůli protínajícím se více polygonům).

Tak. Nyní se snažím nastavit prostorový index na poli geometrie.
jaká data použiji pro hraniční pole x-min a y-min a x-max y-max. mohu použít hodnoty zeměpisné délky a šířky? jak to ví, co používám jako souřadnice?
Dík!
Tereza

Odpovědi

Pokud máte co do činění s PSČ v USA, pak by vaše ohraničovací rámeček měl být v USA. Pokud jste takto uložili PSČ, použili byste pro ohraničující rámeček hodnoty s dlouhou latí. Geometrie je souřadnicová agnostika, vy určíte, co znamenají souřadnice.

Ale navrhuji přehodnotit geografii. Problémy s importem (co používáte pro import?) Můžete obejít importem jako geometrie a následným převodem na geografii pomocí SQL Spatial Tools na CodePlex (http://www.codeplex.com/sqlspatialtools). Metoda převodu se nazývá VacuousGeometryToGeography a současně se zbavuje problémů se směrem prstenu. Odepište, pokud to nefunguje.

Udělal jsem nějaké testování pomocí zipcodes a geografických indexů a zjistil (pro * geografie * prostorový index), že HHHH_256 nebo HHHH_512 nebo HHHH_128 (to je vysoká hustota na každé úrovni, s různými buňkami na objekt) se zdá dobře fungovat. ALE vaše definice prostorového indexu pro nejlepší výkon závisí také na tom, jaký druh dotazů s ním děláte. & quotfind, do kterého PSČ bod patří, & quot, je jiný index než & quotfind zipcodes v okrese & quot. Pro podrobnosti o tom, jak postupovat, můžete použít prostorové diagnostické procs (série blogů začínající zde: http://www.sqlskills.com/BLOGS/BOBB/post/Using-the-spatial-index-diagnostic-stored-procedures.aspx) přečtěte si výstup a jak je spustit), abyste určili optimální prostorový index.

Snad to pomůže,
Bob Beauchemin
SQLskills

Řekl bych, že první věc, kterou je třeba zkontrolovat, je, že vaše data jsou skutečně definována pomocí SRID 4326. Zdroj, ze kterého jste data dostali, by měl uvádět použitý souřadnicový systém (mohlo by se to jmenovat číslo EPSG, nebo by mohl existovat textový popis použitého souřadnicového systému), ale budete moci používat pouze zeměpis datový typ, pokud jsou vaše souřadnicová data definována pomocí jednoho z uznávaných zeměpisných souřadnicových systémů uvedených v seznamu sys.spatial_reference_systems stůl.

Vzhledem k tomu, že to zní, jako byste importovali WKT nejprve do sloupce s názvem wkt (což je nvarchar (max)?) A poté z tohoto sloupce naplníte svůj geografický / geometrický sloupec, mělo by být snadné zjistit ty řádky, které se nedaří vytvořit platné zeměpisné instance. Existují nějaké vzory, kterým řádky selhávají? (Například jsou to řádky na Aljašce? Nebo jsou to jen řádky, které jsou MULTIPOLYGONY?)

Souhlasím s Bobem - používám geometrie se z krátkodobého hlediska může zdát jako dobrá oprava (a existují nějaký platné situace, kdy chcete ukládat geografická data do datového typu geometrie), ale problémy narazíte až později, pokud pak budete chtít na svých datech provádět jakékoli operace zahrnující vzdálenosti, oblasti atd., nebo pokud chcete spojit tato data s jinými geografickými daty.

Pokud se budete držet geometrie, pak musím s Bobem nesouhlasit, pokud jde o indexy - stěží mi připadá HHHH jako nejefektivnější mřížka, pokud neprohledáváte pouze tabulku bodů a vaše vzorky dotazů jsou samy o sobě všechny body nebo velmi malé polygony, které lze mozaikovat na stejnou zrnitost bez vyfukování limitu CELLS_PER_OBJECT. Jak vidíte, zvyšuje limit CELLS_PER_OBJECT výrazně nad výchozí hodnotu 16, aby zajistil úplné rozložení objektů, ale to může vést k velmi velkým položkám indexu. Myslím, že se oba shodneme, že na tuto otázku neexistuje žádná & quot; přímá & quot; odpověď - budete muset sami provést nějaké experimenty, abyste zjistili, co vám nejlépe vyhovuje.


Živé myšlení & # 8230

Pracoval jsem na vkládání dat z FeatureClasses do tabulek SQL Server 2008. Existuje spousta online příkladů, které ukazují, jak lze prostorová data vložit do tabulek serveru SQL Server 2008. Tady je jeden od Hannesa.

Odtamtud jsem vzal z tága a pokračoval v tom, co by měl udělat každý dobrý programátor & # 8230parametrizovat dotaz VLOŽIT. Zde je zjednodušená verze scénáře, který jsem se snažil řešit & # 8230

sqlCommand.CommandText = INSERT INTO foo (id, geom) VALUES (1, @ g)

sqlCommand.InsertParameter (& # 8220 @ g & # 8221, & # 8216POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0)) & # 8217)

Výše uvedený příkaz INSERT fungoval dobře. Ale také jsem chtěl vložit geometrii nebo geografii s hodnotou WKID z FeatureClass. Takže jsem změnil výše uvedený příkaz INSERT tak, aby používal statickou metodu geometrie & # 8217s a poskytl WKID, jak je uvedeno níže

sqlCommand.InsertParameter (& # 8220 @ g & # 8221, & # 8216geometry :: STGeomFromText (POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0)), 0) & # 8217)

Ale to nešlo úplně podle očekávání. Příkaz INSERT hodil chybu, která říkala, že nerozpoznala & # 8216geometry :: STGeomFromText & # 8217 a očekávala & # 8216POINT, POLYGON, LINESTRING & # 8230 & # 8217 atd.

System.FormatException: 24114: Geometrie štítku :: STGeomFrom ve vstupním dobře známém textu (WKT) není platná. Platné štítky jsou POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON nebo GEOMETRYCOLLECTION.

To mě vedlo k použití typu Udt SqlParamter k obejití problému, jak je uvedeno níže. Tímto způsobem jsem mohl použít typ SqlGeometry ve jmenném prostoru & # 8216Microsoft.SqlServer.Types & # 8217 a nastavit SRID přímo na jeho vlastnost & # 8216STSRID & # 8217. Typy & # 8216SqlGeometry & # 8217 a & # 8216SqlGeography & # 8217 najdete v sadě funkcí pro SQL Server 2008, kterou najdete zde. Odkaz SqlGeometry lze poté použít jako hodnotu pro SqlParameter.

Parametr SqlParameter = nový SqlParameter (parametrName, hodnota)

parameter.Direction = ParameterDirection.Input
parameter.ParameterName = parametrName
parameter.SourceColumn = sourceColumn
parameter.SqlDbType = SqlDbType.Udt
parameter.UdtTypeName = & # 8220GEOMETRY & # 8221
parameter.SourceVersion = DataRowVersion.Current

command.Parameters.Add (parametr)

& # 8216UdtTypeName & # 8217 by měl být nastaven na & # 8216GEOGRAPHY & # 8217 pro vkládání zeměpisných polí.

A fungovalo to jako kouzlo.

Aktualizace: Slyšel od Mortena, že používání typů SqlGeography a SqlGeometry je téměř dvakrát rychlejší než použití WKB (Well Known Binary). Použití WKB je samo o sobě rychlejší než použití WKT (dobře známý text).


Nastavení geometrie pomocí dotazu sql - Geografické informační systémy

Za prvé, moje chápání prostorových konceptů je docela špatné, takže mě plesae omluvte, pokud je tato otázka zásadně hloupá.

Mám britský OS datový soubor, který obsahuje mnohoúhelník pro každé PSČ ve Velké Británii. Jsou uloženy v souborech MID / MIF. Chci uložit polygony do geografického pole SQL. Je zřejmé, že budou existovat nějaké konverzní obruče, které budou přeskočit.

Podařilo se mi použít univerzální překladač MapInfo k převodu souborů na soubory obrazců, protože jsem věděl, že je pak mohu pomocí Shape2SQL importovat do geografického pole SQL. Udělal jsem to několikrát s jinými polygonovými datovými sadami a fungovalo to dobře.

Převod na shapefiles fungoval dobře, ale když jsem použil Shape2SQL k načtení shapefile do SQL, mohl jsem načíst pouze do geometrie - když jsem se pokusil načíst do geografie, dal mi varování, že body jsou mimo rozsah.

Byl jsem trochu zmatený, ale načetl jsem data do pole geometrie a myslel jsem si, že bych pak mohl bez problémů převést geometrii na geografii. Když jsem však zkoumal obsah pole gemetrie PŘEVEDENÍM na text, viděl jsem, že polygon byl tvořen body uloženými jako východ a sever.

Předpokládám, že geografický datový typ může ukládat pouze polygony, kde jsou body uloženy jako lat / long i při mém omezeném porozumění, to by dávalo smysl - východ a sever jsou „ploché“ a zeměpis je „kulatý“.

V zásadě tedy musím převést každý bod v geometrickém polygonu na šířku / délku a poté převést geometrický polygon na geografii? A pokud tomu tak je, jaký je nejlepší nástroj k tomu?

Jakákoli pomoc by byla velmi oceněna.

Odpovědi

Vůbec ne hloupá otázka. Ve skutečnosti bych z vašeho popisu problému řekl, že vaše chápání prostorových konceptů je vlastně celkem dobré :)

Máte naprostou pravdu - geografie je pro data lat / long. geometrie je pro x / y data.

Myslím, že vaše poštovní směrovací čísla jsou definována pomocí OS National Grid Velké Británie, který by měl být ve výchozím nastavení importován na SQL Server pomocí datového typu geometrie a SRID 27700.

Všechna prostorová data použitá v daném dotazu na serveru SQL Server (řekněme, abychom zjistili, které body protínají mnohoúhelník) je však třeba definovat pomocí stejného datového typu a stejného SRID. Pokud tedy chcete použít tato data PSČ v dotazech týkajících se vašich dalších geografických dat, musíte je převést na jakýkoli souřadnicový systém, ve kterém jsou data definována (pravděpodobně SRID 4326), a místo toho použít odpovídající datový typ zeměpisu.

SQL Server neposkytuje možnost reprojektovat data, takže před importem musíte data převést mimo SQL Server. Shape2SQL to nemůže udělat, ale napsal jsem několik příspěvků pomocí OGR2OGR (otevřený zdroj) pro převod a načtení dat průzkumu Ordnance z Shapefile na SQL Server, který vám může pomoci:

(ukazuje, jak promítnout data OS z geometrie 27700 do geografie 4326 a uloží výsledek jako WKT, protože v té době se OGR2OGR nemohl načíst přímo na SQL Server. Pokud získáte nejnovější verzi 1.8 & # 43, může, jak je popsáno v dalším příspěvku :)

Všechny odpovědi

Vůbec ne hloupá otázka. Ve skutečnosti bych z vašeho popisu problému řekl, že vaše chápání prostorových konceptů je vlastně celkem dobré :)

Máte naprostou pravdu - geografie je pro data lat / long. geometrie je pro x / y data.

Myslím, že vaše poštovní směrovací čísla jsou definována pomocí OS National Grid Velké Británie, který by měl být ve výchozím nastavení importován na SQL Server pomocí datového typu geometrie a SRID 27700.

Všechna prostorová data použitá v daném dotazu na serveru SQL Server (řekněme, abychom zjistili, které body protínají mnohoúhelník) je však třeba definovat pomocí stejného datového typu a stejného SRID. Pokud tedy chcete použít tato data PSČ v dotazech týkajících se vašich dalších geografických dat, musíte je převést na jakýkoli souřadnicový systém, ve kterém jsou data definována (pravděpodobně SRID 4326), a místo toho použít odpovídající datový typ zeměpisu.

SQL Server neposkytuje možnost reprojektovat data, takže před importem musíte data převést mimo SQL Server. Shape2SQL to nemůže udělat, ale napsal jsem několik příspěvků pomocí OGR2OGR (otevřený zdroj) pro převod a načtení dat průzkumu Ordnance z Shapefile na SQL Server, který vám může pomoci:

(ukazuje, jak promítnout data OS z geometrie 27700 do geografie 4326 a uloží výsledek jako WKT, protože v té době se OGR2OGR nemohl načíst přímo na SQL Server. Pokud získáte nejnovější verzi 1.8 & # 43, může, jak je popsáno v dalším příspěvku :)

Dobře, konečně jsem splnil to, co jsem si předsevzal, a podělím se o pár věcí, o kterých jsem se zde naučil - vím, že většina lidí tady je pravděpodobně prostorový ninjas, pokud jste to vy, prosím, ignorujte, ale někdo s možná bude muset udělat to, co jsem udělal, a to jim může pomoci.

Chtěl jsem načíst OS Code-Point s polygony do datového typu geografie SQL. Problém byl v tom, že polygony v Code-Point ukládaly své body jako Eastings / Northings a geografie je potřebuje ukládat jako lat / long.

Na základě doporučení společnosti Alistair a fantastických blogových příspěvků jsem si stáhl nástroj OGR2OGR a vytvořil řešení. Bohužel, když jsem to spustil, vyhodilo chyby, které naznačovaly, že chybí dll - proj.dll. Po vyhledání Googlem jsem zjistil, že se jedná o docela běžný problém, a stáhl jsem si proj4 46_win32_bin.zip z http://trac.osgeo.org/proj/. Po zkopírování těchto souborů do OGR2OGR / bin tento problém zmizel.

Dále jsem plánoval spustit OGR2OGR a tahat nezpracovaná data ze souborů MID / MIF Code-Point až do geografického pole SQL. Doufal jsem, že zvládnu všechny transformace / reprojekce „za letu“, aniž bych kdekoli staging dat. To nemělo být.

I když je to teoreticky možné, kdykoli jsem se pokusil načíst do geografického datového typu, dostal jsem System.ArgumentException: 24200: Zadaný vstup nepředstavuje platnou geografickou instanci. Data načtená do datového typu geometrie jsou v pořádku, ale i po MakeValid a SET ogr_geography = geography :: STGeomFromWKB (ogr_geometry.STAsBinary (), 4326) se mi nepodařilo načíst data načíst do geografického pole.

Nakonec jsem tedy použil OGR2OGR k převodu z MIF na .shp. Reprojekce z EPSG: 2770 na EPSG: 4326 fungovala dobře. Získání správné syntaxe příkazového řádku bylo trochu složité, ale nakonec to pro mě fungovalo (buďte opravdu, opravdu opatrní s citací):

C: OGR2OGR bin ogr2ogr.exe -s_srs EPSG: 27700 -t_srs EPSG: 4326 -f & quotESRI Shapefile & quot & quotD: SSIS DataWarehouseIn OSData CodePoint MK.shp & quot & quotD: SSIS DataWarehouseIn OSData Code .mif & quot

Takže jsem použil Shape2SQL k načtení .shp do geografického pole, což fungovalo dobře. Měl jsem však ke zpracování 120 souborů MIF, takže to muselo být automatizováno. Použil jsem (poněkud lehce zdokumentovaný) příkazový řádek Shape2SQL. Opět jsem syntaxi několikrát pokazil, než jsem ji správně pochopil, takže pro mě fungovalo toto:

C: Shape2SQL Shape2Sql.exe -shp = & quotD: SSIS DataWarehouseIn OSData CodePoint MK.shp & quot -connstr = & quotData Source = .Initial Catalog = XXX_StagingIntegrated Security = SSPI & quot -table = & quotSTG_PostcodePolygons & quots6 = & quotID & quot -geomname = & quotgeography & quot -append = & quottrue & quot -geography = true

Teď jsem to všechno potřeboval vytáhnout do balíčku SSIS, který by smyčkoval všechny soubory MIF v adresáři, a pomocí OGR2OGR převést na .shp, pak Shape2SQL načíst .shp do tabulky dB.

To vyžadovalo provést procesní úlohu a nebudete překvapeni, když víte, že s tím byly různé problémy. Je to docela dobře známý trik SSIS, když používáte Execute Process Tasks k volání cmd.exe a předání skutečného spustitelného souboru, který chcete spustit spolu s přepínačem / c a všemi argumenty. Nakonec jsem to udělal.

V úkolu Execute Process je třeba nastavit pouze 2 věci: Executable a EXPRESSION v Argumentech

N.B. @ [Uživatel :: název souboru] je soubor, na kterém je SSIS aktuálně připraven

VYJÁDŘENÍ k argumentům:

& quot / c C: OGR2OGR bin ogr2ogr.exe -s_srs EPSG: 27700 -t_srs EPSG: 4326 -f & quotESRI Shapefile & quot & quotD: SSIS DataWarehouseIn OSData CodePoint & quot & # 43 @ [Uživatel :: Název souboru] & # 43 & quot.shp & quot & quotD: SSIS DataWarehouseIn OSData CodePoint & quot & # 43 @ [Uživatel :: Název souboru] & # 43 & quot.mif & quot-přepsat & quot

Všimněte si, že se děje spousta dvojitých uvozovek - to je před každým & quot. Všimněte si také dvojitého v cestách k souborům - to uniká z .

Totéž platí pro provádění Shape2SQL v úkolu Provést proces

VYJÁDŘENÍ k argumentům:

& quot / c C: Shape2SQL Shape2Sql.exe -shp = & quotD: SSIS DataWarehouseIn OSData CodePoint & quot & # 43 @ [Uživatel :: Název souboru] & # 43 & quot.shp & quot -connstr = & quotData Source = .Initial Catalog = XXX_StagingIntegrated Security = SSPI & quot -table = & quotSTG_PostcodePolygons & quot -srid = & quot4326 & quot -oidname = & quotID & quot -geomname = & quotgeography & quot-aptend = & quot -geography = true & quot

Omlouváme se za délku tohoto příspěvku, jen doufám, že to někomu může pomoci. Špička klobouku Alistairovi pro všechny jeho eso informace.


Porovnání prostorových datových typů (geometrie až geografie)

Jsem nový v prostorových datových sadách v rámci SQL a mám požadavek zkontrolovat, zda existuje určitá zeměpisná délka a šířka v souboru tvaru vyjádřeném jako sloupec geometrie sql. Může mi někdo ukázat správným směrem, kde s tím začít?

Pokud máte přístup k vytváření objektů na serveru sql, podívejte se na import souboru tvaru pomocí něčeho jako ogr2ogr. Pak můžete při psaní dotazu použít vestavěné metody serveru sql k protnutí (stintersects) nebo contains (stcontains) nebo k čemukoli, co je vhodné pro geometrie, které porovnáváte.

Je toho hodně co rozbalit, protože prostorová data jsou svět sám o sobě. Pokusím se zde vysvětlit některé základní informace.

Země je kulatá (ano, opravdu). Takže můžete určit jakékoli místo s zeměpisnou šířkou a délkou, a to je použití typu zeměpisu. Až na to, že to není dokonale tvarované. Takže v závislosti na přesnosti, kterou pro svou aplikaci potřebujete, budete možná muset použít alternativní a přesnější souřadnicový systém. Nejčastěji používaným (Google Maps, Bing Maps.) Je WGS84 (kód 4326) a vypadá skoro jako to, co byste očekávali.

Ale protože obvykle používáme ploché mapy místo sféry zvláštních důvodů, musíte vzít v úvahu projekci. Tady vstupuje do hry typ geometrie a podle požadované přesnosti budete opět používat různé souřadnicové systémy. Ve Francii jsme mohli použít RGF93 (kód 2154).

První a nejdůležitější pravidlo tedy je, že musíte vědět, jaký souřadný systém se používá, protože:

nemá smysl přímo porovnávat objekty v různých systémech.

typy serveru SQL vám nedovolí:

referenční kód souřadnicového systému je vložen do dat (viz STSrid).

SQL Server nemůže transformovat data ze systému do jiného (to je komplikované).

Jak jsem řekl, nejběžnějším používáním by byly souřadnice WGS84, takže v ideálním případě by byla data uložena s zeměpis typ s STSrid = 4326. Ale kvůli nedostatku znalostí vývojáře by to mohlo být také uloženo jako geometrie s STSrid = 0. Budete se muset zeptat.

Pak budete muset provést operaci na těchto typech. Jak již bylo řečeno, zdá se, že STContains je to, co hledáte. S těmito operacemi však můžete porovnávat pouze geometrie, takže musíte být schopni postavit jednu.

Instancí prostorových dat může být buď a směřovat, a čára nebo a polygon (existují i ​​jiné typy, ale na tom by nemělo záležet). Ve vašem případě budete muset zkonstruovat instanci bodu a zkontrolovat, zda je obsažen ve vaší geometrii. Mnoho příkladů používá dobře známou textovou reprezentaci bodu, ale můžete také použít statickou metodu Point. Ale pak budete muset pochopit, za čím X, Y (a SRID) stojí, a proto je tento komentář tak dlouhý.


Dotazování hvězd pomocí BigQuery GIS

Začněte stavět na Google Cloud s kredity 300 $ a 20+ vždy bezplatnými produkty.

Mnoho organizací udržuje velké datové sklady plné analytik, čísel prodejů, metrik výkonu a dalších. Ale příroda nám dává další masivní datové sady, včetně noční oblohy plné hvězd. Zatímco BigQuery GIS byl výslovně navržen tak, aby sloužil potřebám geoprostorových uživatelů zde na Zemi, jeho sférické souřadnicové systémy a vestavěné transformační funkce jsou stejně dobře vhodné pro jinou doménu sférických souřadnic: astronomii.

Co dělá BigQuery skvělou platformou pro analýzu astronomických datových souborů?

BigQuery je určen pro online analýzu (OLAP) a je optimalizován pro práci s masivními datovými soubory, které nejsou transakční. To platí pro většinu prací s astronomickými katalogy, které jsou vydávány přibližně každý rok, v závislosti na projektu.

BigQuery podporuje dotazy na sférickou geometrii pomocí BigQuery GIS. Umístění objektů na nebeské sféře vyžaduje sférickou geometrii.

BigQuery GIS dokáže dotazovat astronomická data téměř stejně rychle jako specializovanější databázové platformy a může být rychlejší, když se použije k provedení úplného skenování tabulky.

A nechybí ani astronomická data k prozkoumání. Například katalogová data organizují pozorování projektu dalekohledu do obrovských tabulek. Některé z větších katalogových datových sad obsahují zhruba miliardu objektů s mnoha pozorovanými funkcemi a u některých funkcí tyto datové sady zahrnují pozorování, která trvají hodiny nebo roky. WISE a Gaia jsou satelitní dalekohledy, které nám poskytují obrazová data ve vysokém rozlišení. LSST, hlavní nový pozemský dalekohled, bude brzy online. Je pověřeno vydávat katalogy pozorovaných objektů po dobu 10 let trvání projektu. Později v tomto příspěvku prozkoumáme, jak používat BigQuery GIS s tímto druhem katalogových dat.

Pochopení nebeského souřadnicového systému

Ale dříve, než vám ukážeme příklady dotazování na data astronomického katalogu pomocí nástroje BigQuery, pojďme udělat krok zpět a probrat širokou škálu funkcí implementovaných v BigQuery GIS, abychom podpořili vaše potřeby GIS.

Podívej se na okamžik dolů

Zvažte, že Země je koule a že se ocitnete na dvourozměrném povrchu naší planety se zeměpisnou šířkou a délkou, snadno získatelnou z globálního pozičního systému (GPS), který vás lokalizuje a navede vás tam, kam chcete jít pomocí souřadnice „lat a long“.

Pokud chcete zjistit, jak dlouhá je cesta, pamatujte si geometrii střední školy, možná si myslíte, že můžete zjistit celkovou vzdálenost pomocí Pythagorovy věty. V některých případech se to může na první pohled zdát, ale čím dál cestujete, vaše situace se rychle stává složitější. Nejprve musíte převést svůj zdroj a cíl, lat a long, na kartézské souřadnice v euklidovské rovině a převést úhly na metry nebo míle. A co je horší, euklidovská vzdálenost je především o rovinné geometrii, ale povrch nebo Země nejsou ploché (spíše sférické), takže Pythagorova věta nefunguje. Starověcí Řekové a islámští matematici měli většinu matematiky vypracovanou před 1000 lety, ale to to nijak neusnadňuje. Dobrou zprávou je, že BigQuery GIS využívá knihovnu geometrie S2 společnosti Google, která vám může pomoci tyto výpočty provést, takže ke všem výše uvedeným chaotickým geometriím máte přístup v mnohem jednodušším standardním SQL. Můžete vypočítat vzdálenost mezi body na Zemi a dosáhnout toho, aby chovatel stále pracoval s regiony, polygony atd. Je velmi výkonný a snadno se používá.

Nyní, když rozumíte pozemské geometrii, pojďme se podívat zpět ke hvězdám! BigQuery GIS používá ke sledování nebeských těles stejné základní koncepty jako ke sledování věcí na Zemi. Jinými slovy, k vyhledání hvězdy na obloze přiřadíte souřadnici, například lat a long, která vás nasměruje přesně tam, kde hvězdu ve vesmíru najdete. Ale vydržte, vesmír není koule! Vesmír je doslova plně trojrozměrný druh nekonečné rozlohy hvězd, galaxií, černých děr, planet, kvasarů, pulzarů a mlhovin. Všichni jsou rozprostřeni, vzdálené světelné roky, nic podobného povrchu Země, kam se pomocí GPS souřadnic snažím dostat z mého domu do nejbližší kanceláře Google.

Tady to začíná být zajímavé: všechny nebeské objekty, které popisuji výše, jsou tak vzdálené, že nemůžeme snadno poznat rozdíl mezi bližším a vzdálenějším objektem. Mohly by to být také světelné body na obří černé sféře se Zemí uprostřed, což je něco, jak to vypadá v noci, když se díváte na oblohu. (I když tu nejsme proto, abychom diskutovali o historii astronomie, vášniví historici vědy si budou pamatovat, že toto je přesně ten model, který dávní Řekové - a donedávna všichni jejich intelektuální potomci - popisovali nebesa. , Doporučuji Struktura vědeckých revolucí, Thomas S Kuhn.)

Takže zpět do nebeské sféry. If the night sky and all the celestial bodies are indistinguishable from a giant sphere with the Earth at its center, my earlier proposal to assign a latitude and longitude to locate objects seems reasonable. In fact, astronomers do exactly that. They assign what they call the coordinates right ascension (ra) and declination (dec). These coordinates work exactly like latitude and longitude. Sometimes, right ascension is written in more historical notation using hours, minutes, and seconds.

Let's look at an example. Vega (a star famous from the movie Kontakt) can be found at RA 18h 36m 56s, Dec +38° 47′ 1″. Fortunately, modern astronomical data typically uses degrees and decimal points to store coordinates, just like modern geographers do. In modern notation, Vega has the same declination (+39°) as the latitude (39° N) of Kansas City. This means once a day people in Kansas city can look straight up to see Vega (if it's night time). This daily rotation clearly hints at the historical use of the 24 hour system for right ascension.


Podívejte se na video: Dytron Catia Macros CATTableHoles