Více

Jak určím CRS pro fiktivní herní mapu v QGIS?

Jak určím CRS pro fiktivní herní mapu v QGIS?


Chystám se začít hrát steampunkovou RPG hru s názvem The Iron Realm, která využívá fiktivní mapu světa. Nedávno jsem začal používat QGIS v1.7 a nemám žádné skutečné zkušenosti s GIS systémy. Mapu jsem importoval jako rastrovou vrstvu do nového projektu QGIS a vytvořil jsem z ní několik vektorových vrstev, včetně polygonové vrstvy pro regiony, bodové vrstvy pro města a liniové vrstvy pro některé přidané železniční tratě a silnice.

Herní mistr právě přidal měřítko a některé lat / long informace na herní mapu:

Z toho předpokládám, že nyní mohu do svého projektu QGIS přidat CRS. Netuším, jak to udělat, a opravdu bych ocenil nějakou pomoc, abych mohl efektivně využít svůj projekt QGIS s hrou. Předpokládám, že budu muset vytvořit vlastní CRS, ale jsem úplně nevědomý, jak to udělat. Myslím, že to má něco společného s proj.4, ale nemám ponětí, jak to použít.


K mapě je třeba poznamenat několik věcí. Nejprve jsou čáry zeměpisné šířky ve stejné vzdálenosti od sebe, což znamená, že je v ekvirektangulární projekci. Výsledkem toho je, že nejsou zachovány ani vzdálenosti ani úhly, takže to není tak užitečné pro navigaci. Druhým bodem je, že má měřítko v lineárních jednotkách. Protože vzdálenosti na zemi se při zobrazení na této mapě liší podle jejich zeměpisné šířky, měřítko je většinou bezvýznamné.

Jelikož se však jedná o herní svět, máte možnost si s ním hrát do sytosti. První věc, kterou můžete udělat, je rozhodnout, jaký velký je svět, za předpokladu, že scalebar představuje vodorovné vzdálenosti na rovníku. Vypadá to, že je asi 32 stupňů na 1000 km, což vám dává rovníkový obvod 11 250 000 ma poloměr 17 90 493 11 m, což je zhruba o velikosti měsíce. Další věc je, že Země je přibližně elipsoid, která je plošší u pólů. Pro Zemi je inverzní poměr poloměru pólu k pólu a rovníkového přibližně 298,25, měsíc je téměř sférický při 800.

Vyzbrojeni těmito informacemi můžete vytvořit definici proj4:

+ proj = eqc + a = 1790493.11 + lat_ts = 0 + lon_0 = 0 + rf = 800 + jednotek = m + no_defs

+ lat_tsnení nezbytně nutné, ale je užitečné pro referenci. Je to „zeměpisná šířka skutečného měřítka“, z čehož jsme odvodili náš rovníkový obvod.+ lon_0představuje zeměpisnou délku středu mapy, což je v tomto případě nultý poledník.

Otevření QGIS a výběr Custom CRS… vložil jsem naše parametry do testovacího pole a vstoupil na sever 0, východ 32, což mi dává 1 000 000 m, což je našich 1 000 km, které jsme očekávali pro tolik stupňů na rovníku. Takže do toho a vytvořte si svůj vlastní CRS se zapamatovatelným názvem.

Nyní stačí mapu georeferencovat pomocí pluginu georeferencer a výběrem tří známých bodů. Když jsem to udělal, dal jsem jeden na rovník / nultý poledník, jeden 32 stupňů (ish) na východ na rovníku, jeden 32 stupňů (ish) na sever na nultý poledník. Oba tyto poslední body mají hodnoty x a y 10 000 000.

A to je vše! Jak jsem již řekl dříve, v této projekci budou vaše vzdálenosti mezi východem a západem od nepřímého rovníku stále nepřesnější, takže by stálo za to vytvořit několik dalších „místních“ projekcí pro různé země, stejně jako lat / long CRS, ale to se v této fázi trochu prohlubuje. Možná vám bude užitečné přečíst si mapové projekce (stačí Google) a přečíst si vstup Wikipedie pro mapové projekce, který by vám měl poskytnout lepší představu o tom, jak to všechno funguje.

Mimochodem, long / lat CRS pro váš svět bude jednoduše:

+ proj = lonlat + a = 1790493.11 + rf = 800 + no_defs

Pokud vám dal lat longs (v závislosti na formátu), existují pouze dvě místa, která by mohla být celosvětová. Pokud máte - symbol před longitutde, je pouze jedno místo.

Na druhou stranu by se mohlo stát, že hra má mnohem menší elipsoid než ten náš. Zajistit obejití celého světa za kratší dobu. Pokud ano, stačí upravit výšku elipsoidu wgs84.


Jak mohu předat externí proměnnou do dávkového Apexu?

Mám proměnnou mapy, kterou se snažím předat do dávkové třídy. Tato proměnná byla vytvořena a naplněna v jiné dávkové třídě (což je důvod, proč ji nemohu jen vytvořit v metodě Start () druhé dávkové třídy).

První dávková třída implementuje Database.Stateful, aby se zachovaly hodnoty, které ukládám do proměnné mapy. Pak v metodě Finish () zavolám druhou dávkovou třídu a předám proměnnou mapy, například:

Problém, do kterého narazím, spočívá v tom, že nemohu přimět druhou dávkovou třídu, aby rozpoznala, že jsem jí tuto mapu předal. Zkoušel jsem použít přiřazení this.variable ve třídě konstruktoru, aniž by bylo jasné jeho účel, bezvýsledně. Tady je představa o tom, jak druhá dávka vypadá teď:

V tomto formátu dávková třída nerozpozná mapVariable (říká, že neexistuje). Také jsem se pokusil udělat tuto dávkovou třídu stavovou, stejně jako deklarovat mapVariable samostatně před metodou start (), podobně jako proměnná dotazu, o které jsem si myslel, že může být nutné provést přiřazení this.mapVariable.

Jak to mohu udělat, aby tato třída Batch mohla používat proměnnou mapy, kterou se jí snažím předat? Děkujeme za vaši pomoc a veselé Vánoce / šťastné svátky!

Takže jsem to dostal do práce (nebo alespoň uložil bez chyby) deklarováním proměnné mapy před metodou start () a poté k ní přiřadil předanou proměnnou, například:

Zajímavostí je, že to nefungovalo, dokud jsem specificky neudělal deklarovanou proměnnou statickou proměnnou. Chápu, že i když jsem tuto dávkovou třídu vytvořil stavovou, statické proměnné se resetují s každou dávkou. Nevím, jestli to znamená, že po první dávce ztratím hodnoty mapy, ale chystám se to zjistit!

Pokud někdo ví, proč jsem to mohl dostat do práce pouze prohlášením mapy za statickou, rád bych se dozvěděl důvod!

Nejprve se zdá, že moje 'řešení' z EDIT 1 nefunguje (myslím, že mapa, kterou používám ve své druhé dávkové třídě, je ve skutečnosti prázdná mapa, ne to, co jsem se snažil předat z první dávkové třídy).

V každém případě, v reakci na žádost od Crop1645, je zde první část kódu pro moji dávkovou třídu bez jakéhokoli zjednodušení nebo abstrakce (což jsem udělal v mém prvním příkladu kódu):

Oříznutí, máte pravdu, že se mi chyba zobrazuje v době kompilace (tj. Když se pokouším uložit svůj kód), kromě případů, kdy používám kód, který zde zobrazuji, který používá statickou deklaraci mapy a nezdá se, že stejně pracovat. Chyba jednoduše uvádí, že „variable: totalLaunchCountMap neexistuje“.


Myslím, že místo použití gluLookAt byste měli místo toho jednoduše přeložit kameru. Nejsem si jistý, jak kreslíte své 2D obrázky, ale obvykle budete kreslit své obrázky pomocí souřadnic X a Y a ponechat Z na 0. Pokud se vydáte touto cestou, doporučuji místo glPerspective použít gluOrtho.

Doporučuji najít dobrou knihu o transformacích prohlížení OpenGL. Ačkoli je tato kniha zastaralá, koncepty v této kapitole zůstávají užitečné: http://www.glprogramming.com/red/chapter03.html

Nejprve pochopte rozdíl mezi zásobníky matic GL_MODELVIEW a GL_PROJECTION.

Matice GL_MODELVIEW slouží k umístění a orientaci objektů ve světě s ohledem na kameru. To posune vaše objekty přes následující souřadnicové prostory:

V prostoru objektů je objekt středem všeho. Zatím neví, kde na světě je. Potom použijete transformaci modelu na objekt a umístí jej do světa. Když je to provedeno u každého objektu, máte je všechny ve světovém prostoru. V tomto okamžiku je souřadnice (0,0,0) jen libovolným počátečním bodem na světě.

Váš fotoaparát má určitou pozici a orientaci ve světovém prostoru. Transformace pohledu otáčí a překládá světový prostor tak, že kamera je v počátku (0,0,0) a dívá se podél záporné osy Z. To je oční prostor. V očním prostoru je kamera středem všeho.

Tyto dvě transformace jsou sloučeny do jedné, transformace modelového pohledu, protože ve skutečnosti jen obě společně spolupracují na pohybu objektů po celém světě s ohledem na kameru.

Matice GL_PROJECTION transformuje vaše objekty v následujících prostorech:

To může být obtížné si koncepčně představit transformaci. Pokud si představíte komolicí kameru jako objem o 6 tvářích (který je velmi blízký původu v očním prostoru), tato transformace ji posune a pokřiví tak, aby měla tvar krychle se středem krychle v (0,0,0).

První problém, který máte, je, že se snažíte použít Pohled transformace na matici GL_PROJECTION. To je špatně. The Pohled transformace by měla být součástí matice GL_MODELVIEW. Transformace pohledu, které používáte, jsou glTranslatef a gluLookAt. Ty by se měly použít na matici GL_MODELVIEW.

Druhým problémem je, že nepochopíte gluLookAt - zejména 4. až 6. argument. Pokoušíte se dát jí směr, ve kterém by měla kamera vypadat (0,0, -1), podél záporné osy z. Za prvé, pokud by to bylo to, co gluLookAt očekával, bylo by to stále špatné, protože chcete, aby se váš fotoaparát díval podél osy y. Ve skutečnosti však očekává pozici ve světě, na kterou se bude dívat. Bez ohledu na to, kam kameru umístíte, bude se dívat na bod (0,0, -1), který se stane hned vedle rohu vaší mapy, který je na (0,0,0).

Neměli byste používat gluLookAt vůbec, protože se nechcete dívat na konkrétní bod. To je mnohem snazší udělat s rotací, aby se fotoaparát díval podél záporné osy Y, v kombinaci s překladem, takže kamera je ve výšce od mapy. Mějte na paměti, že byste měli použít inverzní transformace, než očekáváte, protože skutečně posouváte mapu od fotoaparátu, a nikoli kameru od mapy. Něco takového:

Ujistěte se, že se jedná o první transformace v matici GL_MODELVIEW.


1 Odpověď 1

Ve svém diagramu máte několik mylných představ.

Nejdůležitější je, že obojí vaše šifrovací pole jsou špatná, měla by říkat znaménko . Z toho vyplývá, že CSR zaslaná CA zahrnuje různá pole (včetně Předmětu) a veřejný klíč subjektu, není zahrnut žádný šifrový text, pouze obyčejná data a podpis.

Veřejný klíč subjektu (ve vašem případě: žadatel) je doslovně zahrnut v CSR, stejně jako informace o předmětu. To je podepsáno pomocí veřejného klíče subjektu a všeho zaslaného CA.

Ne ve formě diagramu, ale zde jsou kroky k vytvoření CSR a která data jsou zahrnuta: Správné kroky k vytvoření CSR (ne ve formě diagramu) jsou:

  • Vytvořte CertificationRequestInfo pomocí:
    • Významné jméno subjektu
    • Veřejný klíč subjektu
    • Další atributy
    • CertificationRequestInfo
    • Podpis
    • Algoritmus podpisu

    Všimněte si, že CSR stále obsahuje prostý text CertificationRequestInfo a veřejný klíč subjektu .

    Po obdržení CSR provede CA víceméně následující:

    • analyzovat CSR
    • pomocí veřejného klíče subjektu ověřte, zda se podpis shoduje s poli v CSR
    • ověřte, zda různá pole odpovídají jeho požadavkům (např .: nemůžete požádat o CN = google.com, aniž byste prokázali, že doménu vlastníte)
    • vytvořte certifikát pomocí některých polí z CSR, některých ze sebe
    • podepište certifikát pomocí jeho (emitenta) soukromého klíče

    Konečný certifikát stále obsahuje pole předmětu a veřejný klíč subjektu.

    Chcete-li konkrétněji odpovědět na vaše dvě otázky:

    1. the Veřejný klíč subjektu je jedním z polí v CSR. Nic není šifrováno, pouze podepsáno.
    2. The pole předmětu jsou zkopírována do výsledného certifikátu, jsou k dispozici každému klientovi.

    Seznam polí certifikátů je uveden v RFC5280. Neexistuje žádný hash CSR protože to není potřeba, všechny relevantní informace byly zkopírovány do vlastních polí certifikátu.


    1 Odpověď 1

    Chcete-li podpořit kreslení dlaždice na základě libovolně velkých hranic, chcete použít přístup nevykresluje se každou dlaždici pořád. Musíte se jen pokusit nakreslit to, co hráč viděl, jakékoli další pokusy o remízu jsou ztrátou času a zdrojů na zpracování. Jedná se o agnostický přístup API a nezáleží na tom, zda používáte Pygame, cocos2d nebo jiné API.

    Abyste toho dosáhli, potřebujete znát nějaké informace, které jsou v podstatě rozšířením toho, co byste potřebovali pro manipulaci s rolováním v platformě s bočním rolováním.

    • pozice v rámci globální mapy dlaždic, na kterou se hráč dívá,
    • velikost (v dlaždicích) viditelného okolí soustředěného kolem této polohy pohledu

    Každou aktualizaci jednoduše spočítáte ohraničující obdélník, který popisuje, které dlaždice jsou viditelné na základě těchto dvou informací a odeslat jen ty dlaždice pro vykreslení. Chcete-li znovu použít fragment kódu z mé odpovědi ve výše uvedené otázce, spočítejte to

    a nakreslete pouze dlaždice ohraničené výše uvedenými čtyřmi proměnnými.

    Pokud vaše hra podporuje plynulé posouvání mapy dlaždic, můžete místo posouvání po jednotlivých dlaždicích chtít mírně rozšířit šířku a výšku výřezu, abyste zohlednili potenciální překrytí.

    Chcete-li efektivně vykreslit sadu dlaždic, o kterých víte, chcete minimalizovat změny stavu a kreslit volání. V ideálním případě jsou vaši skuteční skřítci dlaždic uloženi v obrazu textury, konkrétním typu atlasu textury, kde se všechny obrázky v atlasu vejdou na mřížku. To vám umožní mít vázanou pouze tu jednu texturu a související shader, čímž se tyto změny stavu minimalizují.

    Chcete-li omezit volání kreslení, chcete mít veškerou geometrii všech dlaždic, které chcete vykreslit, v co nejméně vertexových vyrovnávacích pamětí. Pokud používáte funkci 2D sprite rendering vašeho rozhraní API na vyšší úrovni, většina z nich bude podporovat dávkování geometrie (a změn stavu) v jejich třídách stylu „sprite batch“, pokud mají členy typu začátku a konce typu . Pokud ne, možná to budete muset udělat ručně, obvykle pomocí dynamické vrcholové vyrovnávací paměti, kterou znovu naplníte vrcholy dlaždic, souřadnicemi textury a tak u všech příslušných dlaždic každý snímek.


    2 odpovědi 2

    Máte záznam v registru správný. Nemusíte ani restartovat.

    Pokud je LogLevel nastaven na cokoli nenulového, pak všechny Kerberos chyby bude přihlášen do Systém záznam událostí. „Úspěchy“ protokolu Kerberos nejsou protokolovány stejným způsobem. (Chyby protokolu Kerberos jsou věci jako AP_ERR_MODIFIED, PRINCIPAL_UNKNOWN atd.)

    Nastavení LogLevel nemá žádný vliv na to, co se zobrazí v Bezpečnostní protokol událostí však.

    Vždy to tak fungovalo. Server 2012 R2 se v tomto ohledu neliší.

    Na druhou stranu, pokud očekáváte, že se v protokolu událostí zabezpečení zobrazí více podrobných událostí „Úspěch auditu“ a „Selhání auditu“ v protokolu událostí zabezpečení, které právě nevidíte, musíte nastavit pokročilé zásady auditu . ale Věřím, že většina z těchto událostí se přihlásí pouze na KDC / řadičích domény. (Například.)


    Chcete-li nastavit přívodní potrubí, musíte mít výhodu Local Leader a náhradního osadníka. Vstupte do režimu Workshop a vyberte náhradní usazovač a stiskněte zvýrazněné tlačítko pro Supply Line:

    To vám poskytne seznam vašich způsobilých vypořádání pro zřízení zásobovací linky s:

    Na mapě jsou viditelná všechna přívodní vedení:

    Musíte mít srovnatelné charisma alespoň na úroveň 6, to lze provést přechodem na výhody

    Přejděte dolů na úroveň 6 a vložte jednu úroveň do místního vůdce. Místní vedoucí výhoda vám umožní zřídit zásobovací vedení mezi vašimi dílnami.

    Přejít na libovolného osadníka z jiného sídla v režimu dílny a nyní uvidíte dostupné tlačítko (Supply Line)

    Stisknutím tlačítka se zobrazí výzva k výběru, do jaké osady chcete osadníka cestovat.

    Chcete-li zkontrolovat, která osady jsou navzájem propojeny, můžete otevřít mapu a stisknout (Zobrazit zásobovací čáry)


    Jak správně nastavit správnou výchozí položku nabídky GRUB 2?

    Ručně kompiluji svá jádra a poté je instaluji do / boot s make install. V tuto chvíli mám v / boot následující jádra:

    Spuštění grub2-mkconfig má za následek následující výstup:

    Pokud nyní čtu výsledný soubor /boot/grub2/grub.cfg, všiml jsem si, že byly vytvořeny následující položky:

    • Hlavní výchozí položka, která začíná vmlinuz-3.7.4-gentoo-third
    • Podnabídka se všemi ostatními položkami (včetně obnovovacích) ve stejném pořadí jako příkaz grub2-mkconfig

    Problém je v tom, že v době bootování bych chtěl načíst implicitně pátou revizi mého jádra (vmlinuz-3.7.4-gentoo-5), ne třetí (vmlinuz-3.7.4-gentoo-third). Také nejraději nemám přístup do podnabídky pro výběr správného jádra, které se má načíst.

    Jak mohu změnit toto chování? Jak mohu GRUBu říct, že chci ve výchozím nastavení spustit pátou revizi mého jádra a ne starší třetí revizi? Jak mohu obecně změnit výchozí vstupní řádek tak, aby odpovídal jádru, které chci, a nikoli zdánlivě náhodnému, který vybral GRUB?

    Také jsem se pokusil vložit následující řádky do / etc / default / grub:

    To nevyřeší problém tak, jak si přeji. Ale zdá se, že si GRUB alespoň pamatuje nejnovější jádro, ze kterého jsem bootoval, a automaticky jej vybere z podnabídky. Je to jen to, že nemám rád přístup do podnabídky.


    Metody evoluce Leafeona a Glaceona byly změněny. Leafeon se nyní vyvíjí podle Leaf Stone a Glaceon se nyní vyvíjí podle Ice Stone.

    Umbreon a Espeon se vyvíjejí nocí a dnem stejně jako dříve, ale stojí za zmínku, že se vyvíjejí v závislosti na tom, co dělá obloha skutečného místa - některá města mají pevnou denní dobu a vývoj to bude odrážet, i když to bude neodpovídá reálnému času na samotné konzole Switch.

    Pokud chcete Sylveon, potřebuje alespoň 160 přátelství / náklonnosti a znát pohádkový tah. Pokud chcete Espeona nebo Umbreona, potřebuje alespoň 220 přátelství / náklonnosti a nesmí znát pohádkový tah. V této odpovědi najdete další informace o změnách přátelství / náklonnosti.


    Jak nakonfiguruji IIS tak, aby umožňoval přístup k síťovým prostředkům pro skripty PHP?

    V současné době pracuji na front-endu PHP, který spojuje řadu aplikací běžících na samostatných serverech, mnoho z těchto aplikací generuje soubory, ke kterým potřebuji přístup, ale tyto soubory (z různých důvodů) jsou umístěny na jejich nadřazených serverech.

    Pokud z příkazového řádku vydám trochu skriptu, například:

    Dostanu celý obsah tohoto adresáře, což dokazuje, že programově není problém s tím, že PHP přečte obsah sdílené složky UNC. Pokud se však pokusím spustit stejný skript z webového serveru, zobrazí se mi prázdné pole - konkrétněji, pokud použiji explicitněji funkce určené k „otevření“ adresáře, jako by to byl soubor, dostanu chyby přístupu.

    Věřím, že se jedná o problém s oprávněními, ale nejsem typ správce serveru / sítě, takže si nejsem jistý, co musím udělat, abych to napravil a spustil svůj skript, a odkazy, které jsem zkontroloval, nebyly bylo strašně velké množství pomoci, snad kvůli mému pozadí nebo jeho nedostatku, pokud jde o IIS, ve spojení se skutečností, že k tomu vlastně nepoužíváme .NET.

    Relevantní statistiky: Windows Server 2008 Standard SP2 IIS 7.0 PHP 5.2.9

    Budu se připojovat ke dvěma typům serverů: několika dalším téměř identickým strojům Server 2008 a stroji s vestavěným XP.

    Odkazy, které nebyly nijak zvlášť užitečné, ale možná jen špatně čtu:


    6 odpovědí 6

    Džungle v Minecraftu byly v aktualizaci 1.7 mnohem vzácnější, takže pokud ji používáte, bude mnohem obtížnější ji najít. Biomy se však nyní budou umisťovat vedle dalších biomů se stejným podnebím, a protože jsou džungle teplé, měli byste se podívat do blízkosti pouští, Mézy a Savan. Chrámy uvnitř těchto džunglí se těžko hledají a ne všechny džungle je mají. Může pomoci spálit některé stromy, protože chrám je postaven z kamene, a proto bude v bezpečí před spálením. Kromě používání modů nebo semen je to opravdu to nejlepší, co můžete udělat.

    Světová struktura není něco, co zjistíte se 100% bezpečností bez použití nástroje. V práci funguje matematická funkce, která používá semeno k výpočtu toho, jak bude svět vypadat.

    Chcete-li zjistit, jaký biom bude na určitém místě se 100% zabezpečením, budete muset provést stejný výpočet, jaký dělá světový generátor v minecraft. Jde o to, že nebudete schopni říci „dej mi nejbližší džungli“. Budete muset vygenerovat svět kolem sebe a poté se podívat, zda existuje džungle. Ale v každém případě budete muset k výpočtu použít externí nástroj, protože je to docela komplikované a protože minecraft nemá žádný vestavěný nástroj, který by vám tam mohl pomoci.

    To, co na konci potřebujete, je něco, co buď používá seed a generační engine vaší aktuální verze minecraft a snaží se zobrazit náhled určité oblasti (například AMIDST), nebo nástroj, který se dívá na již vygenerované mapy, jako je mapovací nástroj.


    Podívejte se na video: QGIS Quick Tip - Projections