question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

iOS getTile function throws incorrect Coordinate

See original GitHub issue

#1565 で修正していただいたバージョンで検証を行ったところ、 iOS 端末では getTile: function(x, y, zoom)で設定する x, y に不正な値が指定されることを確認しています。 なお、Android 端末では正常な動作を確認しています。

ソースコードは以下になります。 プロジェクトは #1565 で共有したリポジトリ、 map_sample を更新しています。

    var mapDiv = document.getElementById("map_canvas");
    var map = plugin.google.maps.Map.getMap(mapDiv, {
        'mapType' : plugin.google.maps.MapTypeId.NONE,
        'preferences': {
            'zoom': {
                'minZoom': 15,
                'maxZoom': 16
            }
        },
        'camera': {
            target: new plugin.google.maps.LatLng(33.734529, 134.535423),
              zoom: 15
        }
    });

    map.one(plugin.google.maps.event.MAP_READY, function() {
        console.log("Map is ready!");

        map.addTileOverlay({
            getTile: function(x, y, zoom) {
                console.log("./image/tiles/" + zoom + "/" + x + "/" + y + ".png");
                return "./image/tiles/" + zoom + "/" + x + "/" + y + ".png";
            }
        }, function(tileOverlay) {
        });
    });`

iOS デバイス上で実行した際、getTile ファンクションのリターン直前に実行される console.log では、以下が出力されます。

 ./image/tiles/15/57256/26234.png
 ./image/tiles/15/57257/26234.png
 ./image/tiles/15/57257/26235.png
(省略)

plugin.google.maps.LatLng で指定した座標位置に合わせて以下の範囲が設定されることを想定していましたが、iOS 端末ではそのように動作しないようです。ご確認いただけないでしょうか。 ./image/tiles/15/28625~28634/13117~13122.png

  • 利用環境
    • Cordova version
      • 6.2.0
    • cordova-plugin-googlemaps
      • 2.0.0-beta2-20170718-1602
    • using Monaca

また、16027a3 以降のコミットを Monaca からビルドするとエラーになってしまうため、最新のプラグインは適用できておりません。

これが意図しない変更によるものであった場合は、対応をご検討いただけたらと存じます。

Build log:
Start building 59719d72ff2af25702017c24
Setup working directories...
Download project archive...
Extract project archive...
Fetch project info...
cordova version: 6.2.0


- preBuild -
Change Xcode Version to 7
codesign: iPhone Developer: (削除)
provisioningPath: /tmp/monaca/59719d72ff2af25702017c24/output/etc/debugger.mobileprovision
Prepare keychain...

- Cordova create -
$ /data/build-server/cordova/6.2.0/bin/cordova create /tmp/monaca/59719d72ff2af25702017c24/project
Creating a new cordova project.


- Create build.json -
build.json {
    "ios": {
        "debug": {
            "codeSignIdentity": "iPhone Developer: (削除)
            "provisioningProfile": (削除)
        }
    }
}

- Copy config.xml -

- Copy external plugin setting files -

- Copy .monaca-res directory -

- Cordova platform add -
$ /data/build-server/cordova/6.2.0/bin/cordova platform add /data/build-server/cordova/platforms/ios/4.2.1
Adding ios project...
Creating Cordova project for the iOS platform:
	Path: platforms/ios
	Package: com.example.monaca1
	Name: offline_map_sample
iOS project created with cordova-ios@4.2.1


- Copy www files -

- Cordova plugin add -
$ /data/build-server/cordova/6.2.0/bin/cordova plugin add mobi.monaca.plugins.Monaca
$ /data/build-server/cordova/6.2.0/bin/cordova plugin add cordova-plugin-whitelist@1.2.2
$ /data/build-server/cordova/6.2.0/bin/cordova plugin add cordova-plugin-splashscreen@3.2.2
$ /data/build-server/cordova/6.2.0/bin/cordova plugin add cordova-custom-config@2.0.3
$ /data/build-server/cordova/6.2.0/bin/cordova plugin add /tmp/monaca/59719d72ff2af25702017c24/output/plugins/cordova-plugin-googlemaps --variable API_KEY_FOR_ANDROID=AIzaSyARNicpApOfv7eEgTeomaIM_OBbKYQQTrI --variable API_KEY_FOR_IOS=AIzaSyAPN22DAi7oOGhexOFwV_YLQ3FzsTmd6Hw
$ /data/build-server/cordova/6.2.0/bin/cordova plugin add /Data/build-server/debugger/ios

- Cordova prepare -
$ /data/build-server/cordova/6.2.0/bin/cordova prepare ios
cordova-custom-config: Skipping auto-restore of config file backup(s)
cordova-custom-config: Applied custom config from config.xml to /private/tmp/monaca/59719d72ff2af25702017c24/project/platforms/ios/offline_map_sample.xcodeproj/project.pbxproj
cordova-custom-config: Applied custom config from config.xml to /private/tmp/monaca/59719d72ff2af25702017c24/project/platforms/ios/cordova/build.xcconfig
cordova-custom-config: Applied custom config from config.xml to /private/tmp/monaca/59719d72ff2af25702017c24/project/platforms/ios/offline_map_sample/offline_map_sample-Info.plist
The module "ConfigParser" has been factored into "cordova-common". Consider update your plugin hooks.


- Cordova compile -
$ /data/build-server/cordova/6.2.0/bin/cordova compile --debug --device
Reading build config file:
Building project: /private/tmp/monaca/59719d72ff2af25702017c24/project/platforms/ios/offline_map_sample.xcodeproj
	Configuration: Debug
	Platform: device
Build settings from command line:
    CONFIGURATION_BUILD_DIR = /private/tmp/monaca/59719d72ff2af25702017c24/project/platforms/ios/build/device
    SHARED_PRECOMPS_DIR = /private/tmp/monaca/59719d72ff2af25702017c24/project/platforms/ios/build/sharedpch

Build settings from configuration file '/private/tmp/monaca/59719d72ff2af25702017c24/project/platforms/ios/cordova/build-debug.xcconfig':
    CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES
    CODE_SIGN_IDENTITY = iPhone Developer: (削除)
    ENABLE_BITCODE = NO
    GCC_PREPROCESSOR_DEFINITIONS = DEBUG=1
    HEADER_SEARCH_PATHS = "$(TARGET_BUILD_DIR)/usr/local/lib/include" "$(OBJROOT)/UninstalledProducts/include" "$(OBJROOT)/UninstalledProducts/$(PLATFORM_NAME)/include" "$(BUILT_PRODUCTS_DIR)"
    IPHONEOS_DEPLOYMENT_TARGET = 8.0
    OTHER_LDFLAGS = -ObjC
    PROVISIONING_PROFILE =(削除)
    SWIFT_OBJC_BRIDGING_HEADER = $(PROJECT_DIR)/$(PROJECT_NAME)/Bridging-Header.h
    TARGETED_DEVICE_FAMILY = 1,2

=== BUILD TARGET CordovaLib OF PROJECT CordovaLib WITH CONFIGURATION Debug ===
Check dependencies
(中略)

- postBuild -
Remove working directories...
Build Error: Error: Sandbox Exec Error: [ ** BUILD FAILED **


The following build commands failed:
	CompileC build/offline_map_sample.build/Debug-iphoneos/offline_map_sample.build/Objects-normal/armv7/PluginMarker.o offline_map_sample/Plugins/cordova-plugin-googlemaps/PluginMarker.m normal armv7 objective-c com.apple.compilers.llvm.clang.1_0.compiler
(1 failure)
Error: Error code 65 for command: xcodebuild with args: -xcconfig,/private/tmp/monaca/59719d72ff2af25702017c24/project/platforms/ios/cordova/build-debug.xcconfig,-project,offline_map_sample.xcodeproj,-target,offline_map_sample,-configuration,Debug,-destination,platform=iOS,build,CONFIGURATION_BUILD_DIR=/private/tmp/monaca/59719d72ff2af25702017c24/project/platforms/ios/build/device,SHARED_PRECOMPS_DIR=/private/tmp/monaca/59719d72ff2af25702017c24/project/platforms/ios/build/sharedpch
 ]
</details>

Issue Analytics

  • State:closed
  • Created 6 years ago
  • Comments:21 (14 by maintainers)

github_iconTop GitHub Comments

1reaction
wf9a5m75commented, Jul 26, 2017

ご期待に添えて良かったです。

プラグインのバグを検証したり、新しいデバイスに対応したりするのに色々と経費がかかります。 無理強いはしておりませんが、いつか自分に返ってくると思って応援していただけると幸いです。 よろしくお願いします。

0reactions
fujiokayucommented, Jul 26, 2017

修正後のプラグインを確認しました。全て問題なく、期待通りに動作しています。

  • mapTypeId = NONE でも MAP_READY イベントが発火し、後続処理が動作すること
  • opacity = 0.0 の透過度で addTileOverlay が実行できること
  • タイルサイズを指定しなくても、iOS の zoom レベルが正しい値をリクエストすること

また、情報もいただきありがとうございます。

Androidだと、最初必ず1度はオンラインでないとgetTile()が呼び出されないです。

はい。その対策として、初回起動時を含めたオンライン環境での起動時に opacity = 0.0 で addTileOverlay を実行することを考えていました。


動作確認の結果、全て期待通りに動作していますので、この Issue はクローズいたします。 tileSize の対応で iOS の x, y, zoom は正常に取得できるようになりましたので、Label の wontfix は外しても良いかと思います。


あとよかったらビール🍺 をご馳走していただけると幸いです。

貧乏なもので出せても発泡酒程度・・・になりますが、検討させてくださいませ。

では、本当に色々とご対応いただき、ありがとうございました。 今後とも、よろしくお願いいたします。

Read more comments on GitHub >

github_iconTop Results From Across the Web

openlayers - forEachTileCoord() returning wrong y coordinate
I'm using this function to get all the coordinates in the tiles of my view, with my current zoom. I'm doing this way:...
Read more >
Using metatables to remove strictness of tile retrieval
Using the __index metamethod, we can construct the stored tilemap data to avoid throwing an error for trying to retrieve nonexistent tiles ...
Read more >
Is Tilemap.HasTile() only compatible with Vector3Int ... - Reddit
I need to check whether a tile exists at some coordinates, but converting from floating point to integer coordinates is throwing me off....
Read more >
ModPE API
Documentation for the ModPE API.
Read more >
TileMap — Godot Engine (3.0) documentation in English
Default value: TILE_ORIGIN_TOP_LEFT. bool cell_y_sort - If true the TileMap's children will be drawn in order of their Y coordinate. Default value: false...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found