I've found the problem and updated the issue. I've got a proposed solution
out for review on the Google-Web-Toolkit-Contributors mailing list.

On Fri, Sep 26, 2008 at 7:52 AM, Eric Ayers <[EMAIL PROTECTED]> wrote:

> Tim,
> I couldn't find anything obviously wrong in your projection implementation,
> so I created an issue for this problem:
>
> http://code.google.com/p/gwt-google-apis/issues/detail?id=180
>
> Let me know if you have made any progress on the issue - I'll keep looking
> at it today.
>
> -Eric.
>
> On Thu, Sep 25, 2008 at 6:45 PM, Eric Ayers <[EMAIL PROTECTED]> wrote:
>
>> OK, I've copied your code into a project and I see the same problem.  The
>> next step to debug this would be to set break points in each of the
>> customized methods for NorthmoorMapProjection and step through in hosted
>> mode.
>>
>>
>> On Thu, Sep 25, 2008 at 12:47 AM, Tim White <[EMAIL PROTECTED]> wrote:
>>
>>>
>>> Hi -
>>>
>>>  When defining a custom Projection using GWT 1.5.2 and gwt-maps-1.0
>>> RC1, I can't seem to get around this:
>>>
>>>  com.google.gwt.dev.shell.HostedModeException: Expected primitive type
>>> boolean; actual value was undefined
>>>        at com.google.gwt.dev.shell.JsValueGlue.get(JsValueGlue.java:51)
>>>        at
>>>
>>> com.google.gwt.dev.shell.ie.SwtOleGlue.convertVariantsToObjects(SwtOleGlue.java:
>>> 57)
>>>        at
>>> com.google.gwt.dev.shell.ie.IDispatchImpl.callMethod(IDispatchImpl.java:
>>> 119)
>>>        at
>>> com.google.gwt.dev.shell.ie.IDispatchProxy.invoke(IDispatchProxy.java:
>>> 155)
>>>        at
>>> com.google.gwt.dev.shell.ie.IDispatchImpl.Invoke(IDispatchImpl.java:
>>> 294)
>>>        at
>>> com.google.gwt.dev.shell.ie.IDispatchImpl.method6(IDispatchImpl.java:
>>> 194)
>>>        at
>>> org.eclipse.swt.internal.ole.win32.COMObject.callback6(COMObject.java:
>>> 117)
>>>        at org.eclipse.swt.internal.ole.win32.COM.VtblCall(Native Method)
>>>        at
>>> org.eclipse.swt.internal.ole.win32.IDispatch.Invoke(IDispatch.java:
>>> 64)
>>>        at
>>> org.eclipse.swt.ole.win32.OleAutomation.invoke(OleAutomation.java:
>>> 493)
>>>        at
>>> org.eclipse.swt.ole.win32.OleAutomation.invoke(OleAutomation.java:
>>> 417)
>>>        at
>>>
>>> com.google.gwt.dev.shell.ie.ModuleSpaceIE6.doInvokeOnWindow(ModuleSpaceIE6.java:
>>> 67)
>>>        at
>>> com.google.gwt.dev.shell.ie.ModuleSpaceIE6.doInvoke(ModuleSpaceIE6.java:
>>> 152)
>>>        at
>>> com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:
>>> 447)
>>>        at
>>> com.google.gwt.dev.shell.ModuleSpace.invokeNativeVoid(ModuleSpace.java:
>>> 248)
>>>        at
>>>
>>> com.google.gwt.dev.shell.JavaScriptHost.invokeNativeVoid(JavaScriptHost.java:
>>> 107)
>>>        at
>>> com.google.gwt.maps.client.impl.__MapImplImpl.checkResize(transient
>>> source for com.google.gwt.maps.client.impl.__MapImplImpl)
>>>        at
>>> com.google.gwt.maps.client.MapWidget.checkResize(MapWidget.java:
>>> 729)
>>>        at
>>> com.google.gwt.maps.client.MapWidget.onAttach(MapWidget.java:1507)
>>>        at com.google.gwt.user.client.ui.Widget.setParent(Widget.java:231)
>>>        at com.google.gwt.user.client.ui.Panel.adopt(Panel.java:119)
>>>        at
>>> com.google.gwt.user.client.ui.ComplexPanel.add(ComplexPanel.java:
>>> 86)
>>>        at
>>> com.google.gwt.user.client.ui.AbsolutePanel.add(AbsolutePanel.java:
>>> 80)
>>>        at
>>>
>>> com.cyface.northmoor.map.client.NorthmoorMap.onModuleLoad(NorthmoorMap.java:
>>> 64)
>>>        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>        at
>>>
>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
>>> 39)
>>>        at
>>>
>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
>>> 25)
>>>        at java.lang.reflect.Method.invoke(Method.java:597)
>>>        at
>>> com.google.gwt.dev.shell.ModuleSpace.onLoad(ModuleSpace.java:320)
>>>        at
>>>
>>> com.google.gwt.dev.shell.BrowserWidget.attachModuleSpace(BrowserWidget.java:
>>> 329)
>>>        at com.google.gwt.dev.shell.ie.BrowserWidgetIE6.access
>>> $300(BrowserWidgetIE6.java:37)
>>>        at
>>>
>>> com.google.gwt.dev.shell.ie.BrowserWidgetIE6$External.gwtOnLoad(BrowserWidgetIE6.java:
>>> 76)
>>>        at
>>>
>>> com.google.gwt.dev.shell.ie.BrowserWidgetIE6$External.invoke(BrowserWidgetIE6.java:
>>> 139)
>>>        at
>>> com.google.gwt.dev.shell.ie.IDispatchImpl.Invoke(IDispatchImpl.java:
>>> 294)
>>>        at
>>> com.google.gwt.dev.shell.ie.IDispatchImpl.method6(IDispatchImpl.java:
>>> 194)
>>>        at
>>> org.eclipse.swt.internal.ole.win32.COMObject.callback6(COMObject.java:
>>> 117)
>>>        at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native
>>> Method)
>>>        at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:1925)
>>>        at
>>> org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2966)
>>>        at com.google.gwt.dev.GWTShell.pumpEventLoop(GWTShell.java:720)
>>>        at com.google.gwt.dev.GWTShell.run(GWTShell.java:593)
>>>        at com.google.gwt.dev.GWTShell.main(GWTShell.java:357)
>>>
>>> My projection class:
>>>
>>> public class NorthmoorMapProjection extends Projection {
>>>        int imageDimension = 65536;
>>>        int maxZoom = 5;
>>>        int tileSize = 256;
>>>        Point[] pixelOrigin = new Point[maxZoom];
>>>        int[] pixelsPerLonDegree = new int[maxZoom];
>>>        int[] tileBounds = new int[maxZoom];
>>>        boolean isWrapped = false;
>>>
>>>        public NorthmoorMapProjection() {
>>>                int currentTileSize = this.tileSize;
>>>                int currentTileBounds = 1;
>>>                for (int zoomLevel = 0; zoomLevel < this.maxZoom;
>>> zoomLevel++) {
>>>                        int tileCenter = currentTileSize / 2;
>>>                        this.pixelsPerLonDegree[zoomLevel] =
>>> currentTileSize / 360;
>>>                        this.pixelOrigin[zoomLevel] =
>>> Point.newInstance(tileCenter,
>>> tileCenter);
>>>                        this.tileBounds[zoomLevel] = currentTileBounds;
>>>                        currentTileSize *= 2;
>>>                        currentTileBounds *= 2;
>>>                }
>>>        }
>>>
>>>        @Override
>>>        public Point fromLatLngToPixel(LatLng latLng, int zoomLevel) {
>>>                Point pixelOrigin = this.pixelOrigin[zoomLevel];
>>>                int pixelOriginX = pixelOrigin.getX();
>>>                int pixelOriginY = pixelOrigin.getY();
>>>                int pixelsPerLonDegreeForCurrentZoom =
>>> this.pixelsPerLonDegree[zoomLevel];
>>>                double currentLongitude = latLng.getLongitude();
>>>                double currentLatitude = latLng.getLatitude();
>>>                long newX = Math.round(pixelOriginX + currentLongitude *
>>> pixelsPerLonDegreeForCurrentZoom);
>>>                long newY = Math.round(pixelOriginY + (-2 *
>>> currentLatitude) *
>>> pixelsPerLonDegreeForCurrentZoom);
>>>                int newXint = new Long(newX).intValue();
>>>                int newYint = new Long(newY).intValue();
>>>                return Point.newInstance(newXint, newYint);
>>>        }
>>>
>>>        @Override
>>>        public LatLng fromPixelToLatLng(Point point, int zoomLevel,
>>> boolean
>>> unbounded) {
>>>                Point pixelOrigin = this.pixelOrigin[zoomLevel];
>>>                int pixelOriginX = pixelOrigin.getX();
>>>                int pixelOriginY = pixelOrigin.getY();
>>>                int pixelsPerLonDegreeForCurrentZoom =
>>> this.pixelsPerLonDegree[zoomLevel];
>>>                int currentX = point.getX();
>>>                int currentY = point.getY();
>>>                double d = currentX - pixelOriginX /
>>> pixelsPerLonDegreeForCurrentZoom;
>>>                double e = -0.5 * (currentY - pixelOriginY) /
>>> pixelsPerLonDegreeForCurrentZoom;
>>>                return LatLng.newInstance(e, d, unbounded);
>>>
>>>        }
>>>
>>>        @Override
>>>        public double getWrapWidth(int zoomLevel) {
>>>                return this.tileBounds[zoomLevel] * this.tileSize;
>>>        }
>>>
>>>        @Override
>>>        public boolean tileCheckRange(TileIndex index, int zoomLevel, int
>>> tileSize) {
>>>                int tileBounds = this.tileBounds[zoomLevel];
>>>                int newX = index.getX();
>>>                if (index.getY() < 0 || index.getY() >= tileBounds) {
>>>                        return false;
>>>                }
>>>                if (this.isWrapped) {
>>>                        if (index.getX() < 0 || index.getX() >=
>>> tileBounds) {
>>>                                newX = index.getX() % tileBounds;
>>>                                if (index.getX() < 0) {
>>>                                        newX += tileBounds;
>>>                                }
>>>                        }
>>>                } else {
>>>                        if (index.getX() < 0 || index.getX() >=
>>> tileBounds) {
>>>                                return false;
>>>                        }
>>>                }
>>>                return true;
>>>        }
>>>
>>>
>>> Any thoughts?  Thanks!
>>>
>>> Tim
>>>
>>> >>>
>>>
>>
>>
>> --
>> Eric Z. Ayers - GWT Team - Atlanta, GA USA
>> http://code.google.com/webtoolkit/
>>
>
>
>
> --
> Eric Z. Ayers - GWT Team - Atlanta, GA USA
> http://code.google.com/webtoolkit/
>



-- 
Eric Z. Ayers - GWT Team - Atlanta, GA USA
http://code.google.com/webtoolkit/

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To post to this group, send email to Google-Web-Toolkit@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/Google-Web-Toolkit?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to