我在用mapobjects组件开发GIS程序时发现该组件只提供了ToMapPoint方法将当前鼠标点转换为普通坐标的,而没有提供将当前鼠标点转换为经纬度坐标的方法。请各位高手帮忙解决,谢谢!!
解决方案 »
- 文件改名同时也改变其扩展名,方法好分可加
- 关于打开窗体的问题
- 一个诡异的问题,在线程中进行Synchronize 后,不动鼠标,不进行任何操作就会不能执行下去!
- 怎样改变要打印的表中某一字段值(FieldValue),表是数据库中的;
- Delphi书的问题
- 加分,重发,各位高手看过来,是不是Delphi的 bug?
- Access到底能支持多少个字段呢?
- 如何从并口输出我想要的中、高频信号?
- 老问题,在delphibbs.com里没有人能解决。设置了access2000用户权限与密码用ado怎么连
- 如何将光标在几个编辑框中改变焦点?
- 能不能打印panel控件中的内容,高分请高手指教!
- 异常问题,返回结果问题,,
然后在interface部分写:function StartSQLServer(szErrorMsg:string):Boolean;
在implementation部分写:const
SERVICE_UNKNOWN =0;type
enumSQLSCMCommands=(SQLSCMCmd_STOP,SQLSCMCmd_PAUSE,SQLSCMCmd_START,SQLSCMCmd_CONTINUE);
const
wn95scm='w95scm.dll';
// Function prototypes
function SQLSCMLocalServiceControlA(lpszSvc:LPSTR;iCommand:integer;
pdwErr:LPDWORD;iCount:integer;lpStartParameter:Pointer):BOOL;stdcall
external wn95scm name 'SQLSCMLocalServiceControlA';
function SQLSCMLocalServiceControlW(lpszSvc:LPWSTR;iCommand:integer;
pdwErr:LPDWORD;iCount:integer;lpStartParameter:Pointer):BOOL;stdcall
external wn95scm name 'SQLSCMLocalServiceControlW';
function SQLSCMGetLocalServiceStateA(lpszSvc:LPSTR;pdwErr:LPDWORD):DWORD;stdcall
external wn95scm name 'SQLSCMGetLocalServiceStateA';
function SQLSCMGetLocalServiceStateW(pwszSvc:LPWSTR;pdwErr:LPDWORD):DWORD;stdcall
external wn95scm name 'SQLSCMGetLocalServiceStateW';
{$ifdef UNICODE}
function SQLSCMLocalServiceControl(lpszSvc:LPSTR;iCommand:integer;
pdwErr:LPDWORD;iCount:integer;lpStartParameter:Pointer):BOOL;stdcall
external wn95scm name 'SQLSCMLocalServiceControlW';
function SQLSCMGetLocalServiceState(pwszSvc:LPWSTR;pdwErr:LPDWORD):DWORD;stdcall
external wn95scm name 'SQLSCMGetLocalServiceStateW';
{$else}
function SQLSCMLocalServiceControl(lpszSvc:LPSTR;iCommand:integer;
pdwErr:LPDWORD;iCount:integer;lpStartParameter:Pointer):BOOL;stdcall
external wn95scm name 'SQLSCMLocalServiceControlA';
function SQLSCMGetLocalServiceState(lpszSvc:LPSTR;pdwErr:LPDWORD):DWORD;stdcall
external wn95scm name 'SQLSCMGetLocalServiceStateA';
{$endif} // !UNICODEfunction StartSQLServer(szErrorMsg:string):Boolean;
var
szService:LPSTR;
dwErr:PDWORD;
dwServiceState:DWORD;
bControlSuccessful:BOOL;
lsStr:string;
begin
result:=false; szService := 'MSSQLServer'; bControlSuccessful:=TRUE;
dwServiceState := SQLSCMGetLocalServiceState(szService, dwErr);
while ((dwServiceState <>0) and (bControlSuccessful = TRUE))do
begin
if (dwServiceState = SERVICE_RUNNING) then
break;
case dwServiceState of
SERVICE_PAUSED:begin // Paused, so continue.
bControlSuccessful := SQLSCMLocalServiceControl(szService,
Ord(SQLSCMCmd_CONTINUE),dwErr, 0, nil);
end;
SERVICE_STOPPED:begin // Stopped, start service.
bControlSuccessful := SQLSCMLocalServiceControl(szService,
Ord(SQLSCMCmd_START), dwErr, 0, nil);
end;
else // Error if state is 0 otherwise state is changing.
begin
if (dwServiceState = 0) then
begin // Error. Return failure.
StrPCopy(PChar(dwErr),lsStr);
szErrorMsg:='Error '+lsStr+' on attempt to determine service state.';
exit;
end;
end;
end;
Sleep(5);
dwServiceState := SQLSCMGetLocalServiceState(szService, dwErr);
end;
if (bControlSuccessful) then
begin
StrPCopy(PChar(dwErr),lsStr);
szErrorMsg:='Error '+lsStr+' returned on attempt to change service state.';
end;
result:=bControlSuccessful;
end;
以上是启动SQL Server 的服务,至于停止服务可以根据以上代码自己编写,很容易实现的。
begin
if FZoom <= 0 then begin
Result := GisPoint(0, 0 ) ;
SysUtils.Abort ;
end ; Result.x := Extent.XMin +
( (_ptg.x - ( Margin.X + ViewportOffset.X ) ) / Zoom +
Viewport.X
) ;
Result.y := FExtent.Ymax -
( (_ptg.y - ( Margin.Y + ViewportOffset.Y ) ) / Zoom +
Viewport.Y
) ;
end ;
GIS里面算坐標需要如下幾個參數:Extent 屏幕表示經偉度的範圍 也就是LeftTop and BottomRight 這兩點所表示的經偉度! 還有就是Zoom 地圖的比例,這兩個參數是不能少的.
在小的地理範圍里(如:一個城市),經偉度坐標可以把它當做為平面直角坐標來處里.如果是這樣的話那你的問題也就是一般高中生能解決的問題了! 如果你的地理範圍很大,如全中國,那你就得費點心思了!
我以上的那些代碼是把它當做是小的地理範圍