Бештар

Вақте ки ба сатҳи шаҳр наздик карда мешавад, GeoTiff -и хурди ҷаҳон хеле суст аст

Вақте ки ба сатҳи шаҳр наздик карда мешавад, GeoTiff -и хурди ҷаҳон хеле суст аст


Ман дар GeoTools нав ҳастам ва ҳамчун оғоз ман кӯшиш мекунам як файли хурди GeoTiff -ро дар харита нишон диҳам.

Файлҳои GeoTiff, ки ман истифода мебарам, камтар аз 10МБ аст (масалан, файли 1МБ дар 720x360 пиксел) ва тамоми дунёро фаро мегирад (он ҳарорати миёна нишон медиҳад). Нуқтаҳои маълумоте, ки ман мехоҳам дар харита нишон диҳам, дар сатҳи хеле пасттаранд (масалан ҷойгиршавии дарахтон дар боғи шаҳр), бинобар ин ман бояд масофаи зиёдро васеъ кунам.

Ман истифода мебарамGeoTiffReaderхондан тиф файле, ки ман сипас ба a илова мекунамGridReaderLayer. Харита бо ёрии намоиш дода мешавадJMapFrame.showMap (харита).

синфи ҷамъиятии QuickStart {public static void main (String [] args) истисно меандозад {Файли парванда = Файли нав ("C: temp.tif"); Хонандаи GeoTiffReader = GeoTiffReader нав (файл); MapContent map = MapContent нав (); map.setTitle ("Санҷиши GeoTiff"); Қабати қабат = GridReaderLayer нав (хонанда, createRGBStyle (хонанда)); map.addLayer (қабат); JMapFrame.showMap (харита); } Стили хусусии статикӣ createRGBStyle (AbstractGridCoverage2DReader хонанда) {GridCoverage2D cov = null; кӯшиш кунед {cov = reader.read (null); } сайд (IOException giveUp) {партофтани RuntimeException нав (giveUp); } int numBands = cov.getNumSampleDimensions (); if (numBands <3) {return null; } Сатр [] sampleDimensionNames = Сатри нав [numBands]; барои (int i = 0; i

Вақте ки барномаи Swing кушода мешавад, ман метавонам харитаро бинам ва бе таъхири асосӣ бо он муошират кунам. Аммо, вақте ки ман ҳарчи бештар масштаб медиҳам, харита оҳиста -оҳиста сусттар мешавад, то он ки корношоям шавад (дар ниҳоят JVM ба истифодаи бисёр CPU ва хотира шурӯъ мекунад ва суқут мекунад), аммо вақте ки ман боз масофа мекунам, харита боз зудтар мешавад.

Ман интизор будам, ки иҷрои кор беҳтар мешавад, зеро ман бо қисмҳои хурдтар ва хурдтари тасвир кор мекунам, зеро система танҳо бояд бо як маҷмӯи хурди додаҳо / пикселҳо кор кунад. Бо вуҷуди ин, чунин мешуморад, ки китобхонаи GeoTools пеш аз буридани он барои мувофиқ кардани минтақаи намоишшуда, тамоми тасвирро миқёс медиҳад, на ин ки аввал "зироат" -и минтақаи намоишшударо (аз рӯи лот/лон) гирифта, сипас миқёсро то мувофиқ кардани намоиши харита васеъ кунад .

Чаро масштаб дар GeoTiff дар GeoTools хеле суст аст ва чӣ гуна ман метавонам харитаро ҷавобгӯтар кунам?

PS. Вақте ки ман як файли GeoTiffро дар як қатор асбобҳои гуногуни GIS QGIS, ArcGIS Explorer, MapWindows ва ғайра бор мекунам, ман ягон таъсирро намебинам. Бо истифода аз ин абзорҳои дигар ман ҳатто метавонам танҳо 4 пикселро аз GeoTiff -и аслӣ ҳамчун 4 қуттии азим дар харита нишон диҳам, чизе GeoTools ҳатто ба кор наздик шуда наметавонад.

Ин аст як намунаи файли TIF ки дар натиҷа А.java.lang.OutOfMemoryError: Фазои тӯдаи Javaвақте ки ман масштаб мекунам (масалан, танҳо як ҷазираи Бритониёро нишон медиҳам). UPDATE: Мутаассифона, чунин ба назар мерасад, ки файл ҳангоми боргузорӣ ба PNG табдил дода мешавад, аммо он андозаи файли аслиро нишон медиҳад.

Навсозӣ: Натиҷа аз gdalinfo.

Ронанда: Файлҳои GTiff/GeoTIFF: Андозаи temp.tif 720, 360 Системаи ҳамоҳангсозӣ ин аст: GEOGCS ["WGS 84", DATUM ["WGS_1984", SPHEROID ["WGS 84", 6378137,298.257223563, ҲУҚУҚИ ["EPSG", " 7030 "]], ОРГАН [[EPSG", "6326"]], PRIMEM ["Greenwich", 0], UNIT ["дараҷа", 0.0174532925199433], ОРГАН [[EPSG "," 4326 "]] Пайдоиш = (- 179.9999999999970,90.000000000000000) Андозаи пиксел = (0.499999999999950, -0.499999999999950) Метамаълумот: AREA_OR_POINT = Метаодайи сохтори тасвири минтақа: INTERLEAVE = ПИКСЕЛ Координатаҳои кунҷӣ: Болои чапи боло (-100.0000.00 ") ) Чапи поён (-180.0000000, -90.0000000) (180d 0 '0.00 "W, 90d 0' 0.00" S) Рости боло (180.0000000, 90.0000000) (180d 0 '0.00 "E, 90d 0' 0.00" N) рости поён ( 180.0000000, -90.0000000) (180d 0 '0.00 "E, 90d 0' 0.00" S) Center (-0.0000000, 0.0000000) (0d 0 '0.00 "W, 0d 0' 0.00" N) Band 1 Block = 720x2 Type = Byte , ColorInterp = Парчамҳои ниқоби сурх: PER_DATASET ALPHA Band 2 Block = 720x2 Type = Byte, ColorInterp = Парчамҳои ниқоби сабз: PER_DATASET ALPHA Band 3 Block = 7 Навъи 20х2 = Байт, ColorInterp = Парчамҳои ниқоби кабуд: PER_DATASET ALPHA Band 4 Block = 720x2 Type = Byte, ColorInterp = Alpha

Навсозӣ: Ман барномаро профил кардам ва натиҷаҳои зерро гирифтам. Агар ин як мушкилот / иштибоҳ бо GeoTools бошад, роҳи беҳтарини гузориш додани он чӣ хоҳад буд?


Ташаккур ба корбароне, ки дар шарҳҳои дар боло овардашуда роҳнамоӣ кардаанд. Ман ба саволи худам дар ин ҷо ҷавоб медиҳам, то умедворам, ки он дар оянда ба ягон каси дигар кумак мекунад. Пас аз он ки аз интизорӣ хеле зиёдтар мубориза бурдам, дар ниҳоят ба назарам чунин мерасад, ки як дастгоҳе ҳаст, ки метавонад барои пешрафти ман кор кунад.

Ман ҳоло истифода мебарам GeoTools 11.5 (ба назар чунин мерасад, ки ҳама гуна версияи олии олӣ мушкилоти хотира дорад, ки ман бо онҳо дучор шуда истодаам - мутаассифона, ман то ҳол намедонам, ки чаро, аммо ман ҳоло дар ин бора вақти бештар сарф намекунам).

Барои халос шудан азcom.sun.media.jai.mlib.MediaLibAccessorпаёми хато ҳангоми кор дар Java 8 Ман коди зеринро ба болои синф илова кардам.

статикӣ {System.setProperty ("com.sun.media.jai.disableMediaLib", "ҳақиқӣ"); }

Ман инчунин маҷбур шудам услуби истифодашударо тағир диҳамContrastMethod.NONE, вагарна он вақте ки ман масштаб мекунам ва панел мекардам, он рангҳоро тағир медод.

Пас аз ҳамаи ин тағиротҳо, харита ҳоло қобили қабул аст, метавонад ба ҳама сатҳ паноҳ диҳад ва масштаб кунад, JVM -ро бо мушкилоти OOM вайрон накунад ва ранги харитаро ба таври тасодуфӣ тағир надиҳад.