SvgMapDocumentGetter loadSVG 要検討・・・ createXMLHttpRequest getAjaxFilter SvgMapParser parseSVG 要検討・・・ SymbolParser ImageParser getImageProps ImgElementManager 要検討・・・ getImgElement setImgElement setImgViewport handleLoadSuccess timeoutLoadingImg buildPixelatedImages4Edge 非線形ビットイメージ変換 ImageTransformer imageTransform 要検討・・・ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SvgMapViewer これがルートのクラスとする #svgImages = {}; // svg文書群(XML) arrayのハッシュキーはimageId("root"以外は"i"+連番) #svgImagesProps = {}; // 同svg文書群の .Path,.CRS,.script,.editable,.editing,.isClickable,.parentDocId,.childImages,.controller,.metaSchema #dynamicLoad( docId , parentElem ){ // アップデートループのルート:ほとんど機能がなくなっている感じがする・・ #removeUnusedDocs(){ #loadingImgs = new Array(); // 読み込み途上のimgのリストが入る 2021/1/26 通常booleanだがビットイメージの場合非線形変換用の情報が入る #hideAllTileImgs(){ // 2014.6.10 setGeoCenter,setGeoViewPortのちらつき改善 ResourceAnalyzer #loadErrorStatistics={}; #clearLoadErrorStatistics(){ #getLoadErrorStatistics(){ ResourceLoadingObserver #loadCompleted = true; // このグローバル変数はcheckLoadCompleted以外では本来セットしてはいけない(mapTicker.pathHitTester.getVectorObjectsAtPointと、refreshScreenが例外的処理してる・・) #setLoadCompleted = function(stat){ #checkLoadCompleted=function( forceDel ){ // 読み込み完了をチェックし、必要な処理を起動する。 #startRefreshTimeout(){ #refreshLayer( layerId ){ #getHashLength(arr){ // Arrayの個数を調べる( hashのため ) screenReefresher?? #retryingRefreshScreen = false; #refreshScreen=function(noRetry, parentCaller, isRetryCall){ #reLoadLayer(layerID_Numb_Title){ viewboxChangeChecker #prevRootViewBox={}; // ワンステップ前のrootViewBoxが設定される。 #viewBoxChanged=function(docId){ // 2020/6/8 修正 ただ、この関数、あまり筋が良いとは言えないので改修すべき・・ SvgMapContentParser // https://teratail.com/questions/279165 でconst化するのが良いかも #setLayerDivProps( id, parentElem, parentSvgDocId ){ // parseSVGから切り出した関数 2017.9.29 #parseSVG( svgElem , docId , parentElem , eraseAll , symbols , inCanvas , pStyle , dontChildResLoading ){ #updateMetaSchema(docId){ #parseSVGwhenLoadCompleted(svgImages , imageId , imgElem , ct){ #removeChildDocs( imageId ){ #delContainerId = 0; #requestRemoveTransition( imgElem , parentElem2 ){ // 2013.7.31 debug まだバグがあると思う・・ Renderer ImgRendererとPathRendererを束ねる #summarizeCanvas = true; // added 2014.5.27 レイヤ単位でcanvas2dを統合 #loadingTransitionTimeout = 7000; // LODの読み込み遷移中のホワイトアウト防止処理や。XMLロード処理のタイムアウト[msec](この時間を超えたらbitImageもSVGdoc(2020/2/13)もスキップする #ignoreMapAspect = false; // 地図のアスペクト比を、rootSVGのvireBox( or hashのviewBox)そのものにする場合true #usedImages=[]; // DOM操作によるsvgmapドキュメントやそのプロパティのメモリリークのチェック用 2019.5.22 #existNodes = new Object();; // 存在するノードのidをハッシュキーとしたテーブル #checkDeletedNodes( parentNode ){ #removeEmptyTiles( parentNode ){ // カラのcanvasを削除する[summarizedのときには効かない?] #resetSummarizedCanvas(){ #checkEmptySpans( parentNode ){ #imageSeqNumber = 0; // SVGのimage要素に通し番でidを振っておく #isLoadedImage( id ){ // HTMLのimg要素をサーチして、該当idがあるかどうかを確認する。(これが非効率な部分かも・・) #getIntValue( p0 , span0 ){ // y側でも使えます #getSpanTextElement( x, y, cdx, cdy, text , id , opacity , transform , style , areaHeight , nonScaling){ // 2014.7.22 DynamicContentHandler 要検討・・・getLayerStatusのdocIdのみ呼び出しケースがうまくない #preRenderSuperControllerFunction = null; #handlePreRenderControllerScript(docId , zoom , child2root, isSuperController){ // 2020/6/8 svg要素内のscriptをevalで実行するのをやめる前準備 #getLayerStatus(docId, zoom, child2root){ // 2022/03/11 開発中 この関数をLayerUIに渡すことで、.scriptの初期化処理(onloadFunc)を機能させることをもくろむ #setController( svgDoc , docPath , svgImageProps){ SvgMapDocumentLoader #loadSVG( path , id , parentElem , parentSvgDocId) { #handleErrorResult( docId , docPath, httpRes, isTimeout){ #handleResult( docId , docPath , parentElem , httpRes , parentSvgDocId ){ MapViewManager #commonDevicePixelRatio = 1.0; // zoom計算時のみに用いる たとえば2にするとzoom値が本来の2分の1になる(2014/07/16) #layerDevicePixelRatio = []; // 2020/5/13 レイヤーIDの連想配列 レイヤーごとの値(commonDevicePixelRatioにさらに掛け算で効く) #mapx=138; #mapy=37; #mapCanvas; // 地図キャンバスとなる、おおもとのdiv要素 #mapCanvasSize={}; // そのサイズ (このメンバーはconst扱いにするべきです) #rootViewBox; // aspectを加味し実際に開いているルートSVGのviewBox #rootCrs; // ルートSVGのCRS ( geo->rootのsvg ) 2020/3/17 matrixだけでなく関数(当初はメルカトル変換)(transform(geo->mercatorRoot),inverse(その逆))になるケースがある #root2Geo; //上の逆 ( rootのsvg - > geo ) 2020/3/17 transform関数が入るケースがある #geoViewBox = { x:0, y:0, width:1, height:1}; // と、それを使って出したgeoのviewBox #centerPos #refreshWindowSize(){ #setMapCanvasCSS(mc){ // 2012/12/19 firefoxに対応 スクロールバーとか出なくした #prevRootViewBox={}; // ワンステップ前のrootViewBoxが設定される。 #viewBoxChanged(docId){ // 2020/6/8 修正 ただ、この関数、あまり筋が良いとは言えないので改修すべき・・ #getRootSvg2Canvas = function( rootViewBox , mapCanvasSize_ ){ #getViewBox( svgDoc ){ これは単なるパーサーな感じがする・・・・・・・・・・・・・・ #getZoom( s2c , docId){ // 2020/5/13 docId(というよりレイヤーID)によって、演算パラメータを変化させる機能を実装 #setDevicePixelRatio( dpr , layerId ){ #getDevicePixelRatio(docId){ #getCanvasSize(){ // 画面サイズを得る #setMapCanvasSize( size ){ // this.#mapCanvasSizeをconst扱いにする #setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh){ #getrootViewBoxFromGeoArea( lat, lng, latSpan , lngSpan , ignoreMapAspect ){ EssentialUIs #centerPos #vScale; // 中心緯度経度表示用font要素 #spButtonSize = 50; #setLayerListSize(){ #initNavigationUIs( isSP ){ #setPointerEvents(){ #testWheel( evt ){ #setCenterUI(){ #updateCenterPos() { #setUpdateCenterPos(func){ #getVerticalScreenScale( screenLength ){ #getCentralGeoCoorinates(){ #screen2Geo( screenX , screenY ){ // 画面上の座標(px)を指定すると、その地理座標を返す #geo2Screen( lat ,lng ){ #setGeoCenter( lat , lng , radius){ #setGeoViewPort( lat, lng, latSpan , lngSpan , norefresh){ #getrootViewBoxFromGeoArea( lat, lng, latSpan , lngSpan , ignoreMapAspect ){ #showPage( hyperLink ){ #zoomPanManager #setLayerUI; #updateLayerListUIint; Utils #addEvent(elm,listener,fn){ #getCrs( svgDoc ,docId){ #createXMLHttpRequest(cbFunc, timeoutFunc){ #getSvgTarget( htmlImg ){ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ CRSManager getCrs GeoViewportManager setGeoCenter setGeoViewPort getrootViewBoxFromGeoArea GPS setGps gps EssentialUIs ?? setLayerListSize initNavigationUIs updateCenterPos showPage svgMapDomUtil--SVGMapコンテンツDOMのいろいろをやる、staticな関数群 getDocumentId getMetaSchema updateMetaSchema getRootSvg2Canvas はtransformLibに入れたほうが良いと思うが・・少し微妙な状況がある(constructorでなく、"load"のinitLoadで使ってる) isIntersect getCentralGeoCoorinates screen2Geo geo2Screen