sur le forum english, il y a un code d' idle pour dessiner sur Google Earth et aller à un endroit précis sur la terre....
seulement chez moi..... cela ne fonctionnait pas. Alors je me suis pris la tête avec la syntaxe et le passage des paramètres vers ce script
avec l'option Unicode oui et non etc.... enfin après plusieurs heures de recherche avec les bouquins sur java html etc...
je suis arrivé à le faire fonctionner seulement sans l'option Unicode.
voilà le code d' idle que j'ai légèrement modifié pour ma bécane, j'espère qu'il fonctionnera pour vous aussi..
avec le code UTM Mercator que j'ai déjà posté ici... On va pouvoir faire de la géométrie sur la terre avec les distances au mètre près...
Je vous laisse imaginer les possibilités de ces codes.. et j'ai posté également sur le forum anglais la petite modification à ce code génial.
qui fonctionne avec ma config...
il vous faudra pour cela installer le plugin Google Earth, si ce n'est déjà fait.
Cordialement
Code : Tout sélectionner
#DISPATCH_METHOD = $1
#DISPATCH_PROPERTYGET = $2
#DISPATCH_PROPERTYPUT = $4
#DISPATCH_PROPERTYPUTREF = $8
DataSection
IID_IHTMLDocument: ; {626FC520-A41E-11CF-A731-00A0C9082637}
Data.l $626FC520
Data.w $A41E, $11CF
Data.b $A7, $31, $00, $A0, $C9, $08, $26, $37
IID_NULL: ; {00000000-0000-0000-0000-000000000000}
Data.l $00000000
Data.w $0000, $0000
Data.b $00, $00, $00, $00, $00, $00, $00, $00
EndDataSection
Procedure MakeBSTR(String$)
Unicode$ = Space(Len(String$)*2+2)
MultiByteToWideChar_(#CP_ACP, 0, @String$, -1, @Unicode$, Len(String$)*2+2)
ProcedureReturn SysAllocString_(@Unicode$)
EndProcedure
Procedure.s ReadBSTR(bstr)
length = WideCharToMultiByte_(#CP_ACP, 0, bstr, -1, 0, 0, 0, 0)
Text$ = Space(length)
WideCharToMultiByte_(#CP_ACP, 0, bstr, -1, @Text$, length, 0, 0)
ProcedureReturn Text$
EndProcedure
Procedure.s StringFromVARIANT(*var.VARIANT)
If VariantChangeType_(*var, *var, $2, #VT_BSTR) = #S_OK
Result$ = ReadBSTR(*var\bstrVal)
SysFreeString_(*var\bstrVal)
Else
Result$ = "ERROR : Cannot convert VARIANT to String!"
EndIf
ProcedureReturn Result$
EndProcedure
Procedure.s ExecuteJavaScript(Gadget, Function$, Arguments$, Separator$)
Result$ = "ERROR"
Browser.IWebBrowser2 = GetWindowLong_(GadgetID(Gadget), #GWL_USERDATA)
If Browser\get_Document(@DocumentDispatch.IDispatch) = #S_OK
If DocumentDispatch\QueryInterface(?IID_IHTMLDocument, @Document.IHTMLDocument) = #S_OK
If Document\get_Script(@Script.IDispatch) = #S_OK
bstr_command = MakeBSTR(Function$)
result = Script\GetIDsOfNames(?IID_NULL, @bstr_command, 1, 0, @dispID.l)
If result = #S_OK
; parse the arguments
;
If Trim(Arguments$) = ""
Count = 0
*Arguments = 0
Else
Count = CountString(Arguments$, Separator$)+1
*Arguments = AllocateMemory(SizeOf(VARIANT)*Count)
*Arg.VARIANT = *Arguments
For i = 1 To Count
*Arg\vt = #VT_BSTR
*Arg\bstrVal = MakeBSTR(StringField(Arguments$, i, Separator$))
*Arg + SizeOf(VARIANT)
Next i
EndIf
params.DISPPARAMS\cArgs = Count
params\cNamedArgs = 0
params\rgvarg = *Arguments
result = Script\Invoke(dispID, ?IID_NULL, 0, #DISPATCH_METHOD, @params, @varResult.VARIANT, 0, 0)
If result = #S_OK
Result$ = StringFromVARIANT(@varResult)
Else
Message$ = Space(3000)
FormatMessage_(#FORMAT_MESSAGE_IGNORE_INSERTS|#FORMAT_MESSAGE_FROM_SYSTEM, 0, result, 0, @Message$, 3000, 0)
Result$ = "ERROR: Invoke() "+Message$
EndIf
If *Arguments
*Arg.VARIANT = *Arguments
For i = 1 To Count
SysFreeString_(*Arg\bstrVal)
*Arg + SizeOf(VARIANT)
Next i
FreeMemory(*Arguments)
EndIf
Else
Message$ = Space(3000)
FormatMessage_(#FORMAT_MESSAGE_IGNORE_INSERTS|#FORMAT_MESSAGE_FROM_SYSTEM, 0, result, 0, @Message$, 3000, 0)
Result$ = "ERROR: GetIDsOfNames() "+Message$
EndIf
SysFreeString_(bstr_command)
Script\Release()
EndIf
Document\Release()
EndIf
DocumentDispatch\Release()
EndIf
ProcedureReturn Result$
EndProcedure
#web_1 = 1
strfile$ = "file:///" + GetCurrentDirectory() + "google.html"
If OpenWindow(0,0,0,850,700,"test",#PB_Window_SizeGadget | #PB_Window_SystemMenu | #PB_Window_MinimizeGadget |#PB_Window_MaximizeGadget | #PB_Window_ScreenCentered)
WebGadget(#Web_1, 0, 0, 850, 650, strfile$) ;,#PB_Web_Mozilla )
ButtonGadget(2,20,650,60,20,"PlaceMark")
ButtonGadget(3,80,650,60,20,"ZigZag")
ButtonGadget(4,140,650,60,20,"Idles Beach")
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget
Select EventGadget()
Case 2
executejavascript(#web_1,"CreatePlaceMark","Purebasic","")
Case 3
executejavascript(#web_1,"CreateZigZag","","")
Case 4
executejavascript(#web_1,"LookAt","300,0;174,8128;-36,8255",";")
;executejavascript(#web_1,"LookAt","300,0;-0,363;49,1872",";") ; kernadec lives in the city of Caen City Or Is castle of William the Conqueror of Normandy Duke ancestor of the Queen of England (the Year 1027 and 1087)
Delay(1500)
executejavascript(#web_1,"CreatePlaceMark","idles Beach","")
EndSelect
EndIf
Until Event = #PB_Event_CloseWindow
EndIf
[code]
Script: "google.html"
[code]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<head>
<title>Hello Google Earth!</title>
<!-- *** Replace the key below below With your own API key, available at http://code.google.com/apis/maps/signup.html *** -->
<script src="http://www.google.com/jsapi?key=ABQIAAAAwbkbZLyhsmTCWXbTcjbgbRSzHs7K5SvaUdm8ua-Xxy_-2dYwMxQMhnagaawTo7L1FE1-amhuQxIlXw"></script>
<script>
google.load("earth", "1");
var ge = null;
function init() {
google.earth.createInstance("map3d", initCallback, failureCallback);
}
function initCallback(object) {
ge = object;
ge.getWindow().setVisibility(true);
}
function failureCallback(object) {
}
</script>
</head>
<body onload='init()' id='body'>
<center>
<div id='map3d_container'
style='border: 1px solid silver; height: 600px; width: 800px;'>
<div id='map3d' style='height: 100%;'></div>
</div>
</center>
<script type="text/javascript">
var counter;
function addToLineString(lineString, lat, lng, latOffset, lngOffset) {
lineString.getCoordinates().pushLatLngAlt(lat + latOffset, lng + lngOffset, 0);
}
function CreateZigZag() {
var lookAt = ge.getView().copyAsLookAt(ge.ALTITUDE_RELATIVE_TO_GROUND);
var lat = lookAt.getLatitude();
var lng = lookAt.getLongitude();
var lineStringPlacemark = ge.createPlacemark('');
var lineString = ge.createLineString('');
lineStringPlacemark.setGeometry(lineString);
lineString.setTessellate(true);
addToLineString(lineString, lat, lng, 0, 0, 0);
addToLineString(lineString, lat, lng, 1.5, .5, 0);
addToLineString(lineString, lat, lng, 0, 1.0, 0);
addToLineString(lineString, lat, lng, 1.5, 1.5, 0);
addToLineString(lineString, lat, lng, 0, 2.0, 0);
addToLineString(lineString, lat, lng, 1.5, 2.5, 0);
addToLineString(lineString, lat, lng, 0, 3.0, 0);
addToLineString(lineString, lat, lng, 1.5, 3.5, 0);
addToLineString(lineString, lat, lng, 0, 4.0, 0);
addToLineString(lineString, lat, lng, 1.5, 4.5, 0);
ge.getFeatures().appendChild(lineStringPlacemark);
}
function CreatePlaceMark(strname) {
var placemark = ge.createPlacemark('');
placemark.setName(strname);
ge.getFeatures().appendChild(placemark);
// Create style Map For placemark
var normal = ge.createIcon('');
normal.setHref('http://maps.google.com/mapfiles/kml/paddle/red-circle.png');
var iconNormal = ge.createStyle('');
iconNormal.getIconStyle().setIcon(normal);
var highlight = ge.createIcon('');
//highlight.setHref('http://maps.google.com/mapfiles/kml/paddle/red-circle.png');
highlight.setHref('http://gregcookland.com/journal/uploaded_images/picHasselHoff-747711.jpg');
var iconHighlight = ge.createStyle('');
iconHighlight.getIconStyle().setIcon(highlight);
var styleMap = ge.createStyleMap('');
styleMap.setNormalStyle(iconNormal);
styleMap.setHighlightStyle(iconHighlight);
placemark.setStyleSelector(styleMap);
// Create point
var la = ge.getView().copyAsLookAt(ge.ALTITUDE_RELATIVE_TO_GROUND);
var point = ge.createPoint('');
point.setLatitude(la.getLatitude());
point.setLongitude(la.getLongitude());
placemark.setGeometry(point);
counter++;
}
function LookAt(lat, long, alt) {
var lookAt = ge.getView().copyAsCamera(ge.ALTITUDE_RELATIVE_TO_GROUND);
lookAt.setLatitude(lat);
lookAt.setLongitude(long);
lookAt.setAltitude(alt);
ge.getView().setAbstractView(lookAt);
Return = (lat+" "+long+" "+alt);
}
</script>
</body>
</html>