GPSMap程序源代码

1. 界面

第一次打开时选择工程文件

MainActivity.java

Tools.OpenDialog(new ICallback(){
public void OnClick(String paramAnonymousString, Object paramAnonymousObject)
{
PubVar.m_DoEvent.DoCommand("工程_选择");
}
});

DoEvent.java

public void DoCommand(String paramString)
{
        //this.C = C;
        Param paramString2 = null;
        Object localObject = paramString.split("_");
        //如果是工程
        if ((((String[])localObject).length == 2) && (((String[])localObject)[0].equals("工程"))) { //比如""工程_选择"
              Log.d("DoEvent", "工程_选择");
              this.m_DoEvent_Project.DoCommand(paramString);
        }
......
}

DoEvent_Project.java

public void DoCommand(String paramString)
{
      DoCommand(paramString, null);
}
    
public void DoCommand(String paramString, final ICallback paramICallback)
{
        if(paramString.equals("工程_选择")){
            //new v1_project_select().ShowDialog();
            Log.d("DoEvent_Project", "Into DoEvent Project");
            //new v1_project_select();
            //new v1_project_select().ShowDialog();
            //new v1_FormTemplate(PubVar.m_DoEvent.m_Context).show();
            //new v1_FormTemplate(MainActivity).show();
            Log.d("DoEvent_Project", "ShowDialog?");
        }
...... }

 加载prj_List工程列表()

 v1_project_select.java

this._Dialog.setOnShowListener(new DialogInterface.OnShowListener() { //显示监听
            
            @Override
            public void onShow(final DialogInterface paramAnonymousDialogInterface) { //每当显示时
                // TODO Auto-generated method stub
                v1_project_select.this.LoadProjectListInfo(); //加载工程列表
                int i = 0;
                Object localObject = null;
                HashMap<String, String> paramAnonymousDialogInterface2 = null;
                
                if(PubVar.m_HashMap.GetValueObject("Tag_BeforeOpenProject")==null)
                {
                    PubVar.m_HashMap.GetValueObject("Tag_BeforeOpenProject", true);
                    paramAnonymousDialogInterface2 = PubVar.m_DoEvent.m_UserConfigDB.GetUserParam().GetUserPara("Tag_BeforeOpenProject");
                    paramAnonymousDialogInterface3 = paramAnonymousDialogInterface2.get("F2");
                    if(paramAnonymousDialogInterface2 == null){
                        return;
                    }
                    i = 0;
                    localObject = v1_project_select.this.m_HeaderListViewDataItemList.iterator();
                }
                for(;;)
                {
                    if(!((Iterator)localObject).hasNext())
                    {
                        if(i != 0)
                        {
                            localObject = String.format("是否打开上次工程?

工程名称:%1$
上次时间:%2$s", new Object[]{
                                    paramAnonymousDialogInterface2.get("F3")
                            });
                            Tools.ShowYesNoMessage(v1_project_select.this._Dialog.getContext(), (String)localObject,
                                    new ICallback(){

                                        @Override
                                        public void OnClick(String paramAnonymous2String,
                                                Object paramAnonymous2Object) {
                                            // TODO Auto-generated method stub
                                            Tools.OpenDialog("正在打开工程...", new ICallback(){

                                                @Override
                                                public void OnClick(
                                                        String paramAnonymous3String,
                                                        Object paramAnonymous3Object) {
                                                    // TODO Auto-generated method stub
                                                    //v1_project_select.this.OpenProject((String)this.val$beforeOpenPrjInfo.get("F2"));
                                                    v1_project_select.this.OpenProject(paramAnonymousDialogInterface3);
                                                    v1_project_select.this._Dialog.dismiss();
                                                }
                                                
                                            });
                                        }
                                
                            });
                        }
                    if((v1_project_select.this.m_HeaderListViewDataItemList.size()!=0)||(PubVar.m_DoEvent.m_ProjectDB.AlwaysOpenProject())){
                        break;
                    }
                    Tools.ShowYesNoMessage(v1_project_select.this._Dialog.getContext(), "当前没有创建任何工程,是否需要创建工程?", new ICallback(){

                        @Override
                        public void OnClick(String paramAnonymous2String,
                                Object paramAnonymous2Object) {
                            // TODO Auto-generated method stub
                            if(paramAnonymous2String.equals("YES")){
                                v1_project_select.this.pCallback.OnClick("新建工程", "");
                            }
                        }
                        
                    });
                    return;
                    }
                    if(((HashMap)((Iterator)localObject).next()).get("D2").equals(paramAnonymousDialogInterface2.get("F2"))){
                      i = 1;
                    }
                }
            }
        });
View Code

 v1_project_select.java中的LoadProjectListInfo()函数

protected void LoadProjectListInfo() {
        // TODO Auto-generated method stub
        v1_HeaderListViewFactory localv1_HeaderListViewFactory = new v1_HeaderListViewFactory();
        localv1_HeaderListViewFactory.SetHeaderListView(this._Dialog.findViewById(R.id.ll_projectlist), "工程列表"
                , new ICallback(){

                    @Override
                    public void OnClick(String paramAnonymousString, Object paramAnonymousObject) {
                        // TODO Auto-generated method stub
                        if(paramAnonymousString.equals("列表选项"))
                        {
                            v1_project_select.this._Dialog.GetButton("1").setEnabled(true); //formtemp_4
                            v1_project_select.this.ShowDataPreview((HashMap)paramAnonymousObject);
                        }
                    }
            
        }); //设置头列表视图
        Object localObject1 = Tools.GetProjectList();
        String str1 = "";
        Object localObject2 = PubVar.m_HashMap.GetValueObject("Project");
        if(localObject2 != null){
            str1 = ((HashValueObject)localObject2).Value;
        }
        this.m_HeaderListViewDataItemList = new ArrayList();
        localObject1 = ((List)localObject1).iterator();
        ///*
        for(;;)
        {
            if(!((Iterator)localObject1).hasNext())
            {
                localv1_HeaderListViewFactory.BindDataToListView(this.m_HeaderListViewDataItemList, new ICallback(){

                    @Override
                    public void OnClick(String paramAnonymousString, Object paramAnonymousObject) {
                        // TODO Auto-generated method stub
                        v1_project_select.this.OpenDetailProjectInfo((HashMap)paramAnonymousObject);
                        v1_project_select.this.ShowDataPreview((HashMap)paramAnonymousObject); //显示数据预览
                    }
                    
                }); //绑定数据到ListView
                return;
            }
            String localObject3 = (String)((Iterator)localObject1).next();
            if(!str1.equals(localObject3.split(",")[0]))
            {
                String str2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(Long.parseLong(localObject3.split(",")[1])));
                HashMap localHashMap = new HashMap();
                localHashMap.put("D1", Boolean.valueOf(false));
                localHashMap.put("D2", localObject3.split(",")[0]);
                localHashMap.put("D3", str2);
                localHashMap.put("D4", BitmapFactory.decodeResource(PubVar.m_DoEvent.m_Context.getResources(), R.drawable.v1_rightmore));
                this.m_HeaderListViewDataItemList.add(localHashMap);
            }
            Log.d("v1_project_select", "After Project List");
        }
        //*/
        
    }
View Code

 v1_HeaderListViewFactory.java中的SetHeaderListView(View paramView, String paramString, final ICallback paramICallback)

public void SetHeaderListView(View paramView, String paramString, final ICallback paramICallback)
  {
      this.m_HeaderView_Scroll = (RelativeLayout)paramView.findViewById(R.id.rt_header_scroll); //RelativeLayout
      Log.d("v1_HeaderListView", "Into v1_HeaderListView");
      ViewGroup.LayoutParams localLayoutParams = this.m_HeaderView_Scroll.getLayoutParams();
      localLayoutParams.width = paramView.getMeasuredWidth();
      this.m_HeaderView_Scroll.setLayoutParams(localLayoutParams);
      this.m_ListView_Scroll = (ListView)paramView.findViewById(R.id.rt_listview_scroll); //ListView
      this.m_ListView_Scroll.setOnItemClickListener(new AdapterView.OnItemClickListener(){

        @Override
        public void onItemClick(AdapterView<?> paramAnonymousAdapterView, View paramAnonymousView, int paramAnonymousInt,
                long paramAnonymousLong) {
            // TODO Auto-generated method stub
            v1_HeaderListViewAdpter paramAnonymousAdapterView2 = (v1_HeaderListViewAdpter)((ListView)paramAnonymousAdapterView).getAdapter();
            paramAnonymousAdapterView2.SetSelectItemIndex(paramAnonymousInt);
            paramAnonymousAdapterView2.notifyDataSetInvalidated();
            if(paramICallback != null){
                paramICallback.OnClick("列表选项", paramAnonymousAdapterView.getItemAtPosition(paramAnonymousInt));
            }
        }
          
      });
      if(this.m_HeaderListViewTemplate == null){
         this.m_HeaderListViewTemplate = new v1_HeaderListViewTemplate(); 
      }
      Log.d("v1_HeaderListViewFactory", "Before Report");
      this.m_HeaderListViewTemplate.CreateReport(this.m_HeaderView_Scroll, paramString); //传参“工程列表”,在HeaderView_Scroll中创建表头
      Log.d("v1_HeaderListViewFactory", "After Report");
  }
View Code

 v1_HeaderListViewTemplate.java的CreateReport(RelativeLayout paramRelativeLayout, String paramString)

public void CreateReport(RelativeLayout paramRelativeLayout, String paramString) { //创建报告列表
// TODO Auto-generated method stub
this.m_ReportHeader = new ReportHeader();
Object localObject1 = new ArrayList();
List localList = null;
if (paramString.equals("我的坐标系"))
{
((List)localObject1).add(new ReportHeaderInfo("名称", 1, 1, 1, 1, false, lkHeaderListViewItemType.enText));
((List)localObject1).add(new ReportHeaderInfo("坐标系统", 1, 1, 2, 2, false, lkHeaderListViewItemType.enText));
((List)localObject1).add(new ReportHeaderInfo("中央经线", 1, 1, 3, 3, false, lkHeaderListViewItemType.enText));
((List)localObject1).add(new ReportHeaderInfo("转换方法", 1, 1, 4, 4, false, lkHeaderListViewItemType.enText));
localList = ConverDipToPix(paramRelativeLayout, new int[]{-30, -30, -20, -20}); 
}
if (paramString.equals("工程列表"))
{
((List)localObject1).add(new ReportHeaderInfo("选择", 1, 1, 1, 1, false, lkHeaderListViewItemType.enCheckBox));
((List)localObject1).add(new ReportHeaderInfo("工程名称", 1, 1, 2, 2, false, lkHeaderListViewItemType.enText));
((List)localObject1).add(new ReportHeaderInfo("创建时间", 1, 1, 3, 3, false, lkHeaderListViewItemType.enText));
((List)localObject1).add(new ReportHeaderInfo("详细", 1, 1, 4, 4, false, lkHeaderListViewItemType.enImage));
localList = ConverDipToPix(paramRelativeLayout, new int[] { -15, -40, -30, -15 });
}
if (paramString.equals("图层列表"))
{
((List)localObject1).add(new ReportHeaderInfo("显示", 1, 1, 1, 1, false, lkHeaderListViewItemType.enCheckBox));
((List)localObject1).add(new ReportHeaderInfo("名称", 1, 1, 2, 2, false, lkHeaderListViewItemType.enText));
((List)localObject1).add(new ReportHeaderInfo("类型", 1, 1, 3, 3, false, lkHeaderListViewItemType.enText));
((List)localObject1).add(new ReportHeaderInfo("符号", 1, 1, 4, 4, false, lkHeaderListViewItemType.enImage));
localList = ConverDipToPix(paramRelativeLayout, new int[] { -15, -50, -15, -20 });
}
if (paramString.equals("导出图层列表"))
{
((List)localObject1).add(new ReportHeaderInfo("导出", 1, 1, 1, 1, false, lkHeaderListViewItemType.enCheckBox));
((List)localObject1).add(new ReportHeaderInfo("名称", 1, 1, 2, 2, false, lkHeaderListViewItemType.enText));
((List)localObject1).add(new ReportHeaderInfo("类型", 1, 1, 3, 3, false, lkHeaderListViewItemType.enText));
((List)localObject1).add(new ReportHeaderInfo("数量", 1, 1, 4, 4, false, lkHeaderListViewItemType.enText));
localList = ConverDipToPix(paramRelativeLayout, new int[] { -15, -50, -15, -20 });
}
if (paramString.equals("图层模板列表"))
{
((List)localObject1).add(new ReportHeaderInfo("图层名称", 1, 1, 1, 1, false, lkHeaderListViewItemType.enText));
((List)localObject1).add(new ReportHeaderInfo("图层类型", 1, 1, 2, 2, false, lkHeaderListViewItemType.enText));
((List)localObject1).add(new ReportHeaderInfo("数据量", 1, 1, 3, 3, false, lkHeaderListViewItemType.enText));
localList = ConverDipToPix(paramRelativeLayout, new int[] { -40, -25, -35 });
}
if (paramString.equals("加载图层模板列表"))
{
((List)localObject1).add(new ReportHeaderInfo("图层名称", 1, 1, 1, 1, false, lkHeaderListViewItemType.enText));
((List)localObject1).add(new ReportHeaderInfo("图层类型", 1, 1, 2, 2, false, lkHeaderListViewItemType.enText));
localList = ConverDipToPix(paramRelativeLayout, new int[] { -50, -50 });
}
if (paramString.equals("统计_点图层"))
{
((List)localObject1).add(new ReportHeaderInfo("图层名称", 1, 1, 1, 1, false, lkHeaderListViewItemType.enText));
((List)localObject1).add(new ReportHeaderInfo("数据量", 1, 1, 2, 2, false, lkHeaderListViewItemType.enText));
localList = ConverDipToPix(paramRelativeLayout, new int[] { -50, -50 });
}
if (paramString.equals("统计_线图层"))
{
((List)localObject1).add(new ReportHeaderInfo("图层名称", 1, 1, 1, 1, false, lkHeaderListViewItemType.enText));
((List)localObject1).add(new ReportHeaderInfo("数据量", 1, 1, 2, 2, false, lkHeaderListViewItemType.enText));
((List)localObject1).add(new ReportHeaderInfo("长度(米)", 1, 1, 3, 3, false, lkHeaderListViewItemType.enText));
localList = ConverDipToPix(paramRelativeLayout, new int[] { -40, -20, -40 });
}
if (paramString.equals("统计_面图层"))
{
((List)localObject1).add(new ReportHeaderInfo("图层名称", 1, 1, 1, 1, false, lkHeaderListViewItemType.enText));
((List)localObject1).add(new ReportHeaderInfo("数据量", 1, 1, 2, 2, false, lkHeaderListViewItemType.enText));
((List)localObject1).add(new ReportHeaderInfo("面积(平方米)", 1, 1, 3, 3, false, lkHeaderListViewItemType.enText));
localList = ConverDipToPix(paramRelativeLayout, new int[] { -40, -20, -40 });
}
if (paramString.equals("符号列表"))
{
((List)localObject1).add(new ReportHeaderInfo("名称", 1, 1, 1, 1, false, lkHeaderListViewItemType.enText));
((List)localObject1).add(new ReportHeaderInfo("符号", 1, 1, 2, 2, false, lkHeaderListViewItemType.enImage));
localList = ConverDipToPix(paramRelativeLayout, new int[] { -50, -50 });
}
if (paramString.equals("字段列表"))
{
((List)localObject1).add(new ReportHeaderInfo("名称", 1, 1, 1, 1, false, lkHeaderListViewItemType.enText));
((List)localObject1).add(new ReportHeaderInfo("类型", 1, 1, 2, 2, false, lkHeaderListViewItemType.enText));
((List)localObject1).add(new ReportHeaderInfo("大小", 1, 1, 3, 3, false, lkHeaderListViewItemType.enText));
((List)localObject1).add(new ReportHeaderInfo("精度", 1, 1, 4, 4, false, lkHeaderListViewItemType.enText));
((List)localObject1).add(new ReportHeaderInfo("数据字典", 1, 1, 5, 5, false, lkHeaderListViewItemType.enText));
localList = ConverDipToPix(paramRelativeLayout, new int[] { -40, -20, -10, -10, -20 });
}
if (paramString.equals("底图文件列表"))
{
((List)localObject1).add(new ReportHeaderInfo("文件名称", 1, 1, 1, 1, false, lkHeaderListViewItemType.enText));
((List)localObject1).add(new ReportHeaderInfo("创建时间", 1, 1, 2, 2, false, lkHeaderListViewItemType.enText));
localList = ConverDipToPix(paramRelativeLayout, new int[] { -50, -50 });
}
if (paramString.equals("当前图层"))
{
((List)localObject1).add(new ReportHeaderInfo("图层名称", 1, 1, 1, 1, false, lkHeaderListViewItemType.enText));
((List)localObject1).add(new ReportHeaderInfo("采集数量", 1, 1, 2, 2, false, lkHeaderListViewItemType.enText));
localList = ConverDipToPix(paramRelativeLayout, new int[] { -50, -50 });
}
if (paramString.equals("字典类别列表"))
{
((List)localObject1).add(new ReportHeaderInfo("字典类别", 1, 1, 1, 1, false, lkHeaderListViewItemType.enText));
localList = ConverDipToPix(paramRelativeLayout, new int[] { -100 });
}
if (paramString.equals("条目大类列表"))
{
((List)localObject1).add(new ReportHeaderInfo("条目大类", 1, 1, 1, 1, false, lkHeaderListViewItemType.enText));
localList = ConverDipToPix(paramRelativeLayout, new int[] { -100 });
}
if (paramString.equals("条目细类列表"))
{
((List)localObject1).add(new ReportHeaderInfo("条目细类", 1, 1, 1, 1, false, lkHeaderListViewItemType.enText));
localList = ConverDipToPix(paramRelativeLayout, new int[] { -100 });
}
if (paramString.equals("多实体属性列表"))
{
((List)localObject1).add(new ReportHeaderInfo("图层", 1, 1, 1, 1, false, lkHeaderListViewItemType.enText));
((List)localObject1).add(new ReportHeaderInfo("类型", 1, 1, 2, 2, false, lkHeaderListViewItemType.enText));
((List)localObject1).add(new ReportHeaderInfo("属性", 1, 1, 3, 3, false, lkHeaderListViewItemType.enText));
localList = ConverDipToPix(paramRelativeLayout, new int[] { -30, -20, -50 });
}
Log.d("v1_HeaderListViewTemplate", "CreateReport1");
Object localObject2;
int m;
int i = 0;
i = 0;
int k = 0;
int j = 0;
Iterator paramString2 = localList.iterator(); //宽度数列
if(!paramString2.hasNext())
{
k = paramRelativeLayout.getLayoutParams().width; //Layout宽度值
j = 0;
if(j < localList.size()){
//break;
return;
}
}
View paramString3;
for(;;)
{
if(!paramString2.hasNext())
{
paramString3 = ((LinearLayout)paramRelativeLayout.getParent()).getChildAt(1);
localObject2 = paramString3.getLayoutParams();
((ViewGroup.LayoutParams)localObject2).width = i; //宽度设置
paramString3.setLayoutParams((ViewGroup.LayoutParams)localObject2);
this.m_ReportHeader.SetHeaderInfoList((List)localObject1); //头信息数列
this.m_ReportHeader.SetHeaderWidthList(localList); //宽度数列
m = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 40.0F, paramRelativeLayout.getResources().getDisplayMetrics());
paramString2 = ((List)localObject1).iterator();
if(!paramString2.hasNext()){
break;
}
return;
}
//j = ((Integer)paramString2.next()).intValue();
/*
if(j <= 0){
Log.d("v1_HeaderListViewTemplate", String.valueOf(j));
break;
}*/
//i += j;
m = ((Integer)localList.get(j)).intValue();
if(m < 0){
localList.set(j, Integer.valueOf((int)(Math.abs(Double.parseDouble(String.valueOf(m))) / 100.0D * Double.parseDouble(String.valueOf(k - i)))));
}
j += 1;
i += ((Integer)paramString2.next()).intValue();
}
//paramString2 = localList.iterator();
localObject1 = (ReportHeaderInfo)paramString2.next();
i = 0;
k = 0;
j = 0;
if(j >= ((ReportHeaderInfo)localObject1).StartCol - 1){
j = 0;
}
for(;;)
{
if(j >= ((ReportHeaderInfo)localObject1).EndCol)
{
localObject2 = new TextView(paramRelativeLayout.getContext());
((TextView)localObject2).setText(((ReportHeaderInfo)localObject1).Text);
((TextView)localObject2).setBackgroundResource(R.layout.v1_bk_table_header);
((TextView)localObject2).setGravity(Gravity.CENTER);
//((TextView)localObject2).setTextAppearance(paramRelativeLayout.getContext(), R.style)
((TextView)localObject2).setTextColor(Color.GRAY);
RelativeLayout.LayoutParams localLayoutParams = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
localLayoutParams.leftMargin = i;
localLayoutParams.topMargin = ((((ReportHeaderInfo)localObject1).StartRow - 1) * m);
localLayoutParams.width = (k - i);
localLayoutParams.height = ((((ReportHeaderInfo)localObject1).EndRow - ((ReportHeaderInfo)localObject1).StartRow + 1)*m);
paramRelativeLayout.addView((View)localObject2, localLayoutParams);
i += ((Integer)localList.get(j)).intValue();
j += 1;
break;
}

k += ((Integer)localList.get(j)).intValue();
j += 1;
}
Log.d("v1_HeaderListViewTemplate", "AfterCreateReport");

}
View Code

 v1_HeaderListViewFactory.java的BindDataToListView(List<HashMap<String, Object>> paramList, ICallback paramICallback) 绑定数据到ListView中

 public void BindDataToListView(List<HashMap<String, Object>> paramList, ICallback paramICallback) //绑定数据到ListView中
  {
      List localList = this.m_HeaderListViewTemplate.GetReportHeader().m_HeaderInfoList;
      String[] arrayOfString = new String[localList.size()];
      int[] arrayOfInt = new int[localList.size()]; //TextView的id
      Log.d("v1_HeaderListViewFactory", "localList size:" + String.valueOf(localList.size()));
      int i = 0;
      for(;;)
      {
          if(i >= localList.size())
          {
              v1_HeaderListViewAdpter paramList2 = new v1_HeaderListViewAdpter(this.m_ListView_Scroll.getContext(), paramList,
                      R.layout.v1_reporttableitem, arrayOfString, arrayOfInt, this.m_HeaderListViewTemplate.GetReportHeader());
              paramList2.SetCallback(paramICallback);
              this.m_ListView_Scroll.setAdapter(paramList2);
              this.m_ListView_Scroll.setDivider(null);
              return;
          }
          v1_HeaderListViewTemplate.ReportHeaderInfo localReportHeaderInfo = (v1_HeaderListViewTemplate.ReportHeaderInfo)
                  this.m_HeaderListViewTemplate.GetReportHeader().m_HeaderInfoList.get(i);
          arrayOfString[i] = ("D" + (i+1));
          if(localReportHeaderInfo.ItemType == lkHeaderListViewItemType.enImage){
              arrayOfInt[i] = R.id.rp_itemimage1;
          }
          if(localReportHeaderInfo.ItemType == lkHeaderListViewItemType.enText){
              arrayOfInt[i] = new int[]{R.id.rp_itemtext1, R.id.rp_itemtext2, R.id.rp_itemtext3, R.id.rp_itemtext4,
                      R.id.rp_itemtext5, R.id.rp_itemtext6, R.id.rp_itemtext7, R.id.rp_itemtext8, R.id.rp_itemtext9,
                      R.id.rp_itemtext10, R.id.rp_itemtext11, R.id.rp_itemtext12}[i];
          }
          Log.d("v1_HeaderListViewFactory", localReportHeaderInfo.Text);
          if(localReportHeaderInfo.ItemType == lkHeaderListViewItemType.enCheckBox){
              arrayOfInt[i] = R.id.rp_itemlayout;
          }
          i += 1;
      }
  }
View Code

 v1_myScrollView.java控件ScrollView

public class v1_myScrollView extends ScrollView {
  private GestureDetector mGesture;
  private GestureDetector.OnGestureListener mOnGesture = new GestureDetector.SimpleOnGestureListener(){
      public boolean onDown(MotionEvent paramAnonymousMotionEvent)
      {
          return true;
      }
  };
  
  private v1_myScrollView m_bindScrollView = null;
  
  public v1_myScrollView(Context paramContext)
  {
      super(paramContext);
      this.mGesture = new GestureDetector(paramContext, this.mOnGesture);
  }
  
  public v1_myScrollView(Context paramContext, AttributeSet paramAttributeSet)
  {
      super(paramContext, paramAttributeSet);
      this.mGesture = new GestureDetector(paramContext, this.mOnGesture);
  }
  
  public v1_myScrollView(Context paramContext, AttributeSet paramAttributeSet, int paramInt)
  {
      super(paramContext, paramAttributeSet, paramInt);
  }
  
  public void SetBindScrollView(v1_myScrollView paramv1_myScrollView)
  {
      this.m_bindScrollView = paramv1_myScrollView;
  }
  
  public boolean dispatchTouchEvent(MotionEvent paramMotionEvent)
  {
      super.dispatchTouchEvent(paramMotionEvent);
      return this.mGesture.onTouchEvent(paramMotionEvent);
  }
  
  protected void onScrollChanged(int paramInt1, int paramInt2, int paramInt3, int paramInt4) //滚动事件
  {
      super.onScrollChanged(paramInt1, paramInt2, paramInt3, paramInt4);
      if(this.m_bindScrollView != null){
          this.m_bindScrollView.scrollTo(0, paramInt2);
      }
  }
}
View Code

v1_ProjectDB.java 打开工程 OpenProject(String paramString, boolean paramBoolean)

    public boolean OpenProject(String paramString, boolean paramBoolean)
    {
        boolean bool = true;
        Object localObject = PubVar.m_SysAbsolutePath + "/Data/" + paramString + "/Project.dbx";
        if(!Tools.ExistFile((String)localObject)){
            bool = false;
        }
        if(!paramBoolean)
        {
            OpenDatabase((String)localObject);
            if(this.m_ProjectExplorer == null){
                this.m_ProjectExplorer = new v1_ProjectExplorer();
            }
            this.m_ProjectExplorer.SetBindProjectDB(this);
            this.m_ProjectExplorer.SetProjectName(paramString);
            this.m_ProjectExplorer.LoadProjectInfo();
            if(this.m_LayerExplorer == null){
                this.m_LayerExplorer = new v1_LayerExplorer();
            }
            this.m_LayerExplorer.SetBindProjectDB(this);
            this.m_LayerExplorer.LoadLayer();
            if(this.m_BKLayerExplorer == null){
                this.m_BKLayerExplorer = new v1_BKLayerExplorer();
            }
            this.m_BKLayerExplorer.SetBindProjectDB(this);
            this.m_BKLayerExplorer.LoadBKLayer();
            this.m_AlwaysOpenProject = true;
            return true;
        }
            
        //}while(!paramBoolean);
        ((HashMap)localObject).put("F2", paramString);
        ((HashMap)localObject).put("F3", Tools.GetSystemDate());
        PubVar.m_DoEvent.m_UserConfigDB.GetUserParam().SaveUserPara("Tag_BeforeOpenProject", (HashMap)localObject);
        return true;
    }

v1_ProjectExplorer工程管理

public class v1_ProjectExplorer {
    private CoorSystem m_CoorSystem = null;
    private v1_ProjectDB m_ProjectDB = null;
    private String m_ProjectName = "";
    private String m_Project_CreateTime = "";

    public void SetBindProjectDB(v1_ProjectDB paramv1_ProjectDB) {
        // TODO Auto-generated method stub
        this.m_ProjectDB = paramv1_ProjectDB;
    }

    public void SetProjectName(String paramString) {
        // TODO Auto-generated method stub
        this.m_ProjectName = paramString;
    }

    public void LoadProjectInfo() {
        // TODO Auto-generated method stub
        if(this.m_CoorSystem == null){
            this.m_CoorSystem = new CoorSystem();
        }
        SQLiteDataReader localSQLiteDataReader = this.m_ProjectDB.GetSQLiteDatabase().Query("select * from T_Project where SYS_ID=2");
        if(localSQLiteDataReader.Read())
        {
            this.m_Project_CreateTime = localSQLiteDataReader.GetString("CreateTime");
            this.m_CoorSystem.SetName(localSQLiteDataReader.GetString("CoorSystem"));
            this.m_CoorSystem.SetCenterMeridian(Integer.parseInt(localSQLiteDataReader.GetString("CenterMeridian")));
            this.m_CoorSystem.SetCoorTransMethodName(localSQLiteDataReader.GetString("TransMethod"));
            this.m_CoorSystem.SetTransToP31(localSQLiteDataReader.GetString("P31"));
            this.m_CoorSystem.SetTransToP32(localSQLiteDataReader.GetString("P32"));
            this.m_CoorSystem.SetTransToP33(localSQLiteDataReader.GetString("P33"));
            this.m_CoorSystem.SetTransToP41(localSQLiteDataReader.GetString("P41"));
            this.m_CoorSystem.SetTransToP42(localSQLiteDataReader.GetString("P42"));
            this.m_CoorSystem.SetTransToP43(localSQLiteDataReader.GetString("P43"));
            this.m_CoorSystem.SetTransToP44(localSQLiteDataReader.GetString("P44"));
            this.m_CoorSystem.SetTransToP71(localSQLiteDataReader.GetString("P71"));
            this.m_CoorSystem.SetTransToP72(localSQLiteDataReader.GetString("P72"));
            this.m_CoorSystem.SetTransToP73(localSQLiteDataReader.GetString("P73"));
            this.m_CoorSystem.SetTransToP74(localSQLiteDataReader.GetString("P74"));
            this.m_CoorSystem.SetTransToP75(localSQLiteDataReader.GetString("P75"));
            this.m_CoorSystem.SetTransToP76(localSQLiteDataReader.GetString("P76"));
            this.m_CoorSystem.SetTransToP77(localSQLiteDataReader.GetString("P77"));
        }
        localSQLiteDataReader.Close();
        localSQLiteDataReader = PubVar.m_DoEvent.m_ConfigDB.GetSQLiteDatabase().Query("select * from T_CoorSystem where name = '" + this.m_CoorSystem.GetName() + "'");
        if(localSQLiteDataReader.Read())
        {
            this.m_CoorSystem.SetA(Double.parseDouble(localSQLiteDataReader.GetString("a")));
            this.m_CoorSystem.SetB(Double.parseDouble(localSQLiteDataReader.GetString("b")));
            this.m_CoorSystem.SetEasting(Double.parseDouble(localSQLiteDataReader.GetString("Easting")));
        }
        localSQLiteDataReader.Close();
    }

    public CoorSystem GetCoorSystem() { //创建坐标系统
        // TODO Auto-generated method stub
        return this.m_CoorSystem;
    }
    
    public String GetProjectCreateTime()
    {
        return this.m_Project_CreateTime;
    }

    public String GetProjectDataFileName() {
        // TODO Auto-generated method stub
        return GetProjectFullName() + "/TAData.dbx";
    }
    
    public String GetProjectDataPreviewImageName()
    {
        return GetProjectFullName() + "/DataPreview.jpg";
    }

    public String GetProjectFullName() {
        // TODO Auto-generated method stub
        return PubVar.m_SysAbsolutePath + "/Data/" + this.m_ProjectName;
    }

}
View Code

v1_LayerExplorer图层管理

  public class v1_LayerExplorer {
    private List<v1_Layer> m_LayerList = new ArrayList();
    private v1_ProjectDB m_ProjectDB = null;

    public void SetBindProjectDB(v1_ProjectDB paramv1_ProjectDB) {
        // TODO Auto-generated method stub
        this.m_ProjectDB = paramv1_ProjectDB;
    }

    public void LoadLayer() {
        // TODO Auto-generated method stub
        this.m_LayerList.clear();
        SQLiteDataReader localSQLiteDataReader = this.m_ProjectDB.GetSQLiteDatabase().Query("select * from T_Layer order by SortID");
        if(localSQLiteDataReader == null){
            return;
        }
        while(localSQLiteDataReader.Read())
        {
            v1_Layer localv1_Layer = new v1_Layer();
            localv1_Layer.SetLayerID(localSQLiteDataReader.GetString("ID"));
            localv1_Layer.SetLayerName(localSQLiteDataReader.GetString("Name"));
            localv1_Layer.SetLayerTypeName(localSQLiteDataReader.GetString("Type"));
            localv1_Layer.SetVisible(Boolean.parseBoolean(localSQLiteDataReader.GetString("Visible")));
            localv1_Layer.SetSymbolName(localSQLiteDataReader.GetString("Symbol"));
            localv1_Layer.SetFieldList(localSQLiteDataReader.GetString("FieldList"));
            localv1_Layer.SetIfLabel(Boolean.parseBoolean(localSQLiteDataReader.GetString("IfLabel")));
            localv1_Layer.SetLabelField(localSQLiteDataReader.GetString("LabelField"));
            localv1_Layer.SetLabelFont(localSQLiteDataReader.GetString("LabelFont"));
            this.m_LayerList.add(localv1_Layer);
        }
        localSQLiteDataReader.Close();
    }
    
    public boolean SaveLayerFormLayerList(List<v1_Layer> paramList)
    {
        this.m_LayerList.clear();
        Iterator paramList2 = paramList.iterator();
        for(;;)
        {
            if(!paramList2.hasNext()){
                return true;
            }
            v1_Layer localv1_Layer = (v1_Layer)paramList2.next();
            this.m_LayerList.add(localv1_Layer);
        }
    }

    public List<v1_Layer> GetLayerList() {
        // TODO Auto-generated method stub
        return this.m_LayerList;
    }

    public boolean CheckLayerValid(String paramString) {
        // TODO Auto-generated method stub
        if(GetLayerByID(paramString) == null)
        {
            Tools.ShowMessageBox(PubVar.m_DoEvent.m_Context, "请选择有效的数据图层!");
            return false;
        }
        return true;
    }
    
    public List<v1_Layer> CopyLayerList()
    {
        ArrayList localArrayList = new ArrayList();
        Iterator localIterator = this.m_LayerList.iterator();
        for(;;)
        {
            if(!localIterator.hasNext()){
                return localArrayList;
            }
            localArrayList.add(((v1_Layer)localIterator.next()).Clone());
        }
    }

    public v1_Layer GetLayerByID(String paramString) {
        // TODO Auto-generated method stub
        Iterator localIterator = this.m_LayerList.iterator();
        v1_Layer localv1_Layer = null;
        do
        {
            if(!localIterator.hasNext()){
                return null;
            }
            localv1_Layer = (v1_Layer)localIterator.next();
        }while(!localv1_Layer.GetLayerID().equals(paramString));
        return null;
    }

    public String GetLayerIDByName(String paramString) {
        // TODO Auto-generated method stub
        Iterator localIterator = this.m_LayerList.iterator();
        v1_Layer localv1_Layer = null;
        do
        {
            if(!localIterator.hasNext()){
                return "";
            }
            localv1_Layer = (v1_Layer)localIterator.next();
        }while(!localv1_Layer.GetLayerName().equals(paramString));
        return localv1_Layer.GetLayerID();
    }

}
View Code

v1_BKLayerExplorer背景图层管理

public class v1_BKLayerExplorer {
    private String m_BKLayerFileName = "无底图";
    private List<v1_Layer> m_LayerList = new ArrayList();
    private v1_ProjectDB m_ProjectDB = null;
    private boolean m_Visible = true;
    
    private void ClearBKLayer()
    {
        this.m_LayerList.clear();
        PubVar.m_Map.getBKGeoLayers().ClearSelection();
        if(PubVar.m_Workspace.GetDataSourceByUnEditing() != null){ //Workspace.GetDataSourceByUnEditing()
            PubVar.m_Workspace.GetDataSourceByUnEditing().getDatasets().clear();
        }
        PubVar.m_Map.getGridLayer().SetGridDataFile("");
    }
    
    private void LoadLayerForBKDataSource(DataSource paramDataSource)
    {
        this.m_LayerList.clear();
        SQLiteDataReader paramDataSource2 = paramDataSource.Query("select * from T_Layer order by SortID");
        if(paramDataSource2 == null){
            return;
        }
        while(paramDataSource2.Read())
        {
            v1_Layer localv1_Layer = new v1_Layer();
            localv1_Layer.SetLayerID(paramDataSource2.GetString("ID"));
            localv1_Layer.SetLayerName(paramDataSource2.GetString("Name"));
            localv1_Layer.SetLayerTypeName(paramDataSource2.GetString("Type"));
            localv1_Layer.SetVisible(Boolean.parseBoolean(paramDataSource2.GetString("Visible")));
            localv1_Layer.SetSymbolName(paramDataSource2.GetString("Symbol"));
            localv1_Layer.SetLabelField(paramDataSource2.GetString("LabelField"));
            localv1_Layer.SetLabelFont(paramDataSource2.GetString("LabelFont"));
            localv1_Layer.SetFieldList(paramDataSource2.GetString("FieldList"));
            this.m_LayerList.add(localv1_Layer);
        }
        paramDataSource2.Close();
    }
    
    public String GetBKLayerFileName()
    {
        return this.m_BKLayerFileName;
    }
    
    public boolean GetBKLayerVisible()
    {
        return this.m_Visible;
    }
    
    

    public void SetBindProjectDB(v1_ProjectDB paramv1_ProjectDB) {
        // TODO Auto-generated method stub
        this.m_ProjectDB = paramv1_ProjectDB;
        
    } //背景图层

    public void LoadBKLayer() {
        // TODO Auto-generated method stub
        this.m_BKLayerFileName = "无底图";
        SQLiteDataReader localSQLiteDataReader = this.m_ProjectDB.GetSQLiteDatabase().Query("select * from T_BKLayer");
        if(localSQLiteDataReader == null){
            return;
        }
        while(localSQLiteDataReader.Read()){
            this.m_BKLayerFileName = localSQLiteDataReader.GetString("Name");
        }
        localSQLiteDataReader.Close();
    }

    public void OpenBKDataSource() {
        // TODO Auto-generated method stub
        if(PubVar.m_Workspace.OpenBKDataSource(PubVar.m_SysAbsolutePath + "/Map/" + GetBKLayerFileName())){
            LoadLayerForBKDataSource(PubVar.m_Workspace.GetDataSourceByUnEditing());
        }
    }

    public List<v1_Layer> GetLayerList() {
        // TODO Auto-generated method stub
        return this.m_LayerList;
    }

    public boolean SaveBKLayer(String paramString)
    {
        if(this.m_BKLayerFileName.equals(paramString)){
            return true;
        }
        if(this.m_ProjectDB.GetSQLiteDatabase().ExecuteSQL("delete from T_BKLayer"))
        {
            String str = "insert into T_BKLayer (Name) values ('" + paramString + "')";
            if(this.m_ProjectDB.GetSQLiteDatabase().ExecuteSQL(str))
            {
                this.m_BKLayerFileName = paramString;
                if(this.m_BKLayerFileName.equals("无底图"))
                {
                    ClearBKLayer();
                    return true;
                }
                OpenBKDataSource();
                return true;
            }
        }
        return false;
    }
    
    public void SetBKLayerVisible(boolean paramBoolean)
    {
        this.m_Visible = paramBoolean;
        int i = 0;
        if(this.m_ProjectDB.GetProjectExplorer().GetCoorSystem().GetName().equals("WGS-84坐标"))
        {
            PubVar.m_Map.getOverMapLayer().SetShowGrid(paramBoolean);
            i = 0;
        }
        for(;;)
        {
            if(i >= this.m_LayerList.size())
            {
                PubVar.m_Map.getGridLayer().SetShowGrid(paramBoolean);
                break;
                //return;
            }
            v1_Layer localv1_Layer = (v1_Layer)this.m_LayerList.get(i);
            PubVar.m_Map.getBKGeoLayers().GetLayerByName(localv1_Layer.GetLayerID()).setVisible(this.m_Visible);
            i += 1;
        }
    }
    
    
}
View Code

 DoEvent_Project.java中的“工程_打开”代码

                Object localObject2 = null;
                Object localObject3 = null;
                Object localObject1 = null;
                if(paramString.equals("工程_打开"))
                {
                  localObject2 = PubVar.m_DoEvent.m_ProjectDB.GetBKLayerExplorer();
                  localObject3 = PubVar.m_DoEvent.m_ProjectDB.GetLayerExplorer();
                  localObject1 = PubVar.m_DoEvent.m_ProjectDB.GetLayerRenderExplorer();
                  Object localObject4 = PubVar.m_DoEvent.m_ProjectDB.GetProjectExplorer();
                  Workspace localWorkspace = new Workspace();
                  PubVar.m_Workspace = localWorkspace;
                }

v1_LayerRenderExplorer.java 图层渲染类

    public class v1_LayerRenderExplorer {
    
    private boolean RenderLayer(v1_Layer paramv1_Layer, lkEditMode paramlkEditMode)
    {
        if(paramlkEditMode == lkEditMode.enNew)
        {
            Object localObject = PubVar.m_Workspace.GetDataSourceByEditing();
            Dataset localDataset = new Dataset((DataSource)localObject);
            localDataset.setName(paramv1_Layer.GetLayerID());
            localDataset.setType(paramv1_Layer.GetLayerType());
            ((DataSource)localObject).getDatasets().add(localDataset);
            localObject = new GeoLayer(PubVar.m_Map);
            ((GeoLayer)localObject).setDataset(localDataset);
            ((GeoLayer)localObject).setName(localDataset.getName());
            ((GeoLayer)localObject).setType(localDataset.getType());
            localDataset.setBindGeoLayer((GeoLayer)localObject);
            PubVar.m_Map.getGeoLayers().AddLayer((GeoLayer)localObject);
            RenderLayer(paramv1_Layer, lkEditMode.enEdit);
        }
        if(paramlkEditMode == lkEditMode.enEdit){
            RenderLayerForGeoLayer(PubVar.m_Map.getGeoLayers().GetLayerByName(paramv1_Layer.GetLayerID()), paramv1_Layer);
        }
        return true;
    }
    
    private void RenderLayerForGeoLayer(GeoLayer paramGeoLayer, v1_Layer paramv1_Layer)
    {
        paramGeoLayer.setVisible(paramv1_Layer.GetVisible());
        if(paramGeoLayer.getRender() == null){
            paramGeoLayer.setRender(new SimpleRender(paramGeoLayer));
        }
        paramGeoLayer.getRender().setIfLabel(paramv1_Layer.GetIfLabel());
        paramGeoLayer.getRender().setLabelField(paramv1_Layer.GetLabelDataField());
        paramGeoLayer.getRender().setLabelFont(paramv1_Layer.GetLabelFont());
        ((SimpleRender)paramGeoLayer.getRender()).setSymbolName(paramv1_Layer.GetSymbolName());
        ((SimpleRender)paramGeoLayer.getRender()).SetSymbolTransparent(paramv1_Layer.GetTransparet());
        paramGeoLayer.getRender().LoadSymbol();
        int i = 0;
        for(;;)
        {
            if(i >= paramGeoLayer.getDataset().getRecordCount()){
                return;
            }
            Geometry paramv1_Layer2 = paramGeoLayer.getDataset().GetGeometry(i);
            paramGeoLayer.getRender().UpdateSymbol(paramv1_Layer2);
            i += 1;
        }
    }

    public boolean RenderLayerForAdd(v1_Layer paramv1_Layer) {
        // TODO Auto-generated method stub
        return RenderLayer(paramv1_Layer, lkEditMode.enNew);
    }
    
    public boolean RenderLayerForUpdate(v1_Layer paramv1_Layer)
    {
        return RenderLayer(paramv1_Layer, lkEditMode.enEdit);
    }
    
    public void RenderLayerForUpdateAllLabel(v1_Layer paramv1_Layer)
    {
        Object localObject = PubVar.m_Workspace.GetDataSourceByEditing();
        Dataset localDataset = ((DataSource)localObject).GetDatasetByName(paramv1_Layer.GetLayerID());
        localObject = ((DataSource)localObject).Query("select SYS_ID," + paramv1_Layer.GetLabelDataField() + " from " +
        paramv1_Layer.GetLayerID());
        if(localObject == null){
            return;
        }
        while(((SQLiteDataReader)localObject).Read())
        {
            String str1 = ((SQLiteDataReader)localObject).GetString("SYS_ID");
            String str2 = ((SQLiteDataReader)localObject).GetString(paramv1_Layer.GetLabelDataField());
            localDataset.GetGeometryFromDIndex(Integer.parseInt(str1)).setTag(str2);
        }
        ((SQLiteDataReader)localObject).Close();
    }

    public boolean RenderBKLayerForAdd(v1_Layer paramv1_Layer) {
        // TODO Auto-generated method stub
        Dataset localDataset = PubVar.m_Workspace.GetDataSourceByUnEditing().GetDatasetByName(paramv1_Layer.GetLayerID());
        GeoLayer localGeoLayer = new GeoLayer(PubVar.m_Map);
        localGeoLayer.setDataset(localDataset);
        localGeoLayer.setName(localDataset.getName());
        localGeoLayer.setType(localDataset.getType());
        localDataset.setBindGeoLayer(localGeoLayer);
        PubVar.m_Map.getBKGeoLayers().AddLayer(localGeoLayer);
        RenderLayerForGeoLayer(localGeoLayer, paramv1_Layer);
        return true;
    }

}
View Code

 Workspace.java 工作空间类

    public class Workspace {
    private List<DataSource> _DataSourceList = new ArrayList();
    
    public boolean CloseDataSource(DataSource paramDataSource, boolean paramBoolean)
    {
        paramDataSource.Dispose();
        getDataSourceList().remove(paramDataSource);
        return true;
    }

    public void FreeWorkspace() {
        // TODO Auto-generated method stub
        Iterator localIterator = this._DataSourceList.iterator();
        for(;;)
        {
            if(!localIterator.hasNext())
            {
                this._DataSourceList.clear();
                return;
            }
            ((DataSource)localIterator.next()).Dispose();
        }
    }

    public DataSource GetDataSourceByEditing() {
        // TODO Auto-generated method stub
        Iterator localIterator = getDataSourceList().iterator();
        DataSource localDataSource;
        do
        {
            if(!localIterator.hasNext()){
                return null;
            }
            localDataSource = (DataSource)localIterator.next();
        }while(!localDataSource.getEditing());
        return localDataSource;
    }

    public DataSource GetDataSourceByName(String paramString)
    {
        Iterator localIterator = getDataSourceList().iterator();
        DataSource localDataSource;
        int k;
        int i;
        do
        {
            if(!localIterator.hasNext()){
                return null;
            }
            localDataSource = (DataSource)localIterator.next();
            k = localDataSource.getName().lastIndexOf("/");
            int j = localDataSource.getName().lastIndexOf(".");
            i = j;
            if(j == -1){
                i = localDataSource.getName().length();
            }
        }while(!localDataSource.getName().substring(k+1, i).equals(paramString));
        return localDataSource;
    }
    
    public DataSource GetDataSourceByUnEditing()
    {
        Iterator localIterator = getDataSourceList().iterator();
        DataSource localDataSource;
        do
        {
            if(!localIterator.hasNext()){
                return null;
            }
            localDataSource = (DataSource)localIterator.next();
        }while(localDataSource.getEditing());
        return localDataSource;
    }
    
    public boolean OpenBKDataSource(String paramString)
    {
        boolean bool = false;
        DataSource paramString2;
        String str = paramString.substring(paramString.length() - 3, paramString.length()).toUpperCase();
        if(Tools.ExistFile(paramString)){
            if(str.equals("DBX"))
            {
                paramString2 = new DataSource(paramString);
                paramString2.setEditing(false);
                if(paramString2.OpenDatasetsIndex()){
                    this._DataSourceList.add(paramString2);
                }
                bool = true;
            }
        }
        if(str.equals("IMX"))
        {
            PubVar.m_Map.getGridLayer().SetGridDataFile(paramString);
            return false;
        }
        if(paramString.indexOf("天地图街区图") >= 0)
        {
            PubVar.m_Map.getOverMapLayer().SetOverMapType(lkOverMapType.enTianditu_Street);
            return true;
        }
        if(paramString.indexOf("Google卫星影像图")>=0){
            PubVar.m_Map.getOverMapLayer().SetOverMapType(lkOverMapType.enGoogle_Satellite);
            return true;
        }
        if(paramString.indexOf("Google地形图")>=0){
            PubVar.m_Map.getOverMapLayer().SetOverMapType(lkOverMapType.enGoogle_Terrain);
            return true;
        }
        if(paramString.indexOf("Google街区图")>=0){
            PubVar.m_Map.getOverMapLayer().SetOverMapType(lkOverMapType.enGoogle_Street);
            return true;
        }
        if(paramString.indexOf("天地图卫星影像图")>=0){
            PubVar.m_Map.getOverMapLayer().SetOverMapType(lkOverMapType.enTianditu_Satellite);
            return true;
        }
        return false;
        /*
        do
        {
            if(str.equals("IMX"))
            {
                PubVar.m_Map.getGridLayer().SetGridDataFile(paramString);
                return false;
            }
            if(paramString.indexOf("Google卫星影像图")>=0){
                PubVar.m_Map.getOverMapLayer().SetOverMapType(lkOverMapType.enGoogle_Satellite);
            }
            if(paramString.indexOf("Google地形图")>=0){
                PubVar.m_Map.getOverMapLayer().SetOverMapType(lkOverMapType.enGoogle_Terrain);
            }
            if(paramString.indexOf("Google街区图")>=0){
                PubVar.m_Map.getOverMapLayer().SetOverMapType(lkOverMapType.enGoogle_Street);
            }
            if(paramString.indexOf("天地图卫星影像图")>=0){
                PubVar.m_Map.getOverMapLayer().SetOverMapType(lkOverMapType.enTianditu_Satellite);
            }
            return bool;
        }while(paramString.indexOf("天地图街区图") < 0);
        PubVar.m_Map.getOverMapLayer().SetOverMapType(lkOverMapType.enTianditu_Street);
        return false;
        */
    }
    
    public boolean OpenEditDataSource(String paramString)
    {
        DataSource paramString2 = new DataSource(paramString);
        Coordinate localCoordinate1 = StaticObject.soProjectSystem.WGS84ToXY(73.0D, 53.0D, 0.0D);
        Coordinate localCoordinate2 = StaticObject.soProjectSystem.WGS84ToXY(135.0D, 3.0D, 0.0D);
        MapCellIndex localMapCellIndex = new MapCellIndex();
        localMapCellIndex.SetCellExtend(localCoordinate1, localCoordinate2);
        StaticObject.soMapCellIndex = localMapCellIndex;
        paramString2.SetMapCellIndex(localMapCellIndex);
        paramString2.setEditing(true);
        this._DataSourceList.add(paramString2);
        return true;
    }
    
    public boolean Save()
    {
        Iterator localIterator = getDataSourceList().iterator();
        for(;;)
        {
            if(!localIterator.hasNext()){
                return true;
            }
            DataSource localDataSource = (DataSource)localIterator.next();
            if(localDataSource.getEditing()){
                localDataSource.Save();
            }
        }
    }
    
    public void SetCoorSystemInfo(CoorSystem paramCoorSystem)
    {
        StaticObject.soProjectSystem.SetCoorSystem(paramCoorSystem);
    }
    
    public List<DataSource> getDataSourceList()
    {
        return this._DataSourceList;
    }
}
View Code

 DataSource.java 数据源类

public class DataSource {
  private List<Dataset> _DataSets = new ArrayList();
  public ASQLiteDatabase _EDatabase = null;
  private boolean _Editing = false;
  private String _Name = "";
  private MapCellIndex m_MapCellIndex = null;
  
  public DataSource(String paramString)
  {
      setName(paramString); //名字即TAData.dbx数据库的文件全名
      Open();
      this.m_MapCellIndex = new MapCellIndex(); //地图细胞索引
  }
  
  public boolean Close()
  {
      this._EDatabase.Close();
      return true;
  }
  
  public boolean CreateDataset(String paramString)
  {
      ArrayList localArrayList = new ArrayList();
      localArrayList.add("CREATE TABLE "+ paramString + " (");
      localArrayList.add("SYS_ID integer primary key autoincrement not null default (0),");
      localArrayList.add("SYS_GEO Blob,");
      localArrayList.add("SYS_STATUS int,");
      localArrayList.add("SYS_TYPE varchar(50),");
      localArrayList.add("SYS_OID varchar(50),");
      localArrayList.add("SYS_LABEL varchar(50),");
      localArrayList.add("SYS_DATE varchar(50),");
      localArrayList.add("SYS_PHOTO Text,");
      int i = 1;
      for(;;)
      {
          if(i > 50)
          {
              paramString = (String)localArrayList.get(localArrayList.size() - 1);
              localArrayList.remove(localArrayList.size() - 1);
              localArrayList.add(paramString.substring(0, paramString.length() - 1));
              localArrayList.add(")");
              return ExcuteSQL(Tools.JoinT("
", localArrayList));
          }
          localArrayList.add(new StringBuilder("F").append(i).toString() + " " + "varchar(255)" + ",");
          i += 1;
      }
  }
  
  public void Dispose()
  {
      Iterator localIterator = this._DataSets.iterator();
      for(;;)
      {
          if(!localIterator.hasNext())
          {
              this._EDatabase.Close();
              this._EDatabase = null;
              return;
          }
          ((Dataset)localIterator.next()).Dispose();
      }
  }
  
  public boolean ExcuteSQL(String paramString)
  {
      return this._EDatabase.ExecuteSQL(paramString);
  }
  
  public boolean ExcuteSQL(String paramString, Object[] paramArrayOfObject)
  {
      return this._EDatabase.ExecuteSQL(paramString, paramArrayOfObject);
  }
  
  public Dataset GetDatasetByName(String paramString)
  {
      Iterator localIterator = getDatasets().iterator();
      Dataset localDataset = null;
      //if()
      do
      {
          Object localObject;
          if(!localIterator.hasNext()){
              localObject = null;
              return localDataset;
          }
          localDataset = (Dataset)localIterator.next();
          if(localDataset.getName().toUpperCase().equals(paramString.toUpperCase()))
          {
              localObject = localDataset;
              return localDataset;
          }
          /*
          do
          {
              localDataset = (Dataset)localIterator.next();
              localObject = localDataset;
              return (Dataset)localObject;
          }while(localDataset.getName().toUpperCase().equals(paramString.toUpperCase()));
          */
      }while(!localDataset.getShortName().toUpperCase().equals(paramString.toUpperCase()));
      return localDataset;
  }
  
  public String GetFullDatasetName(String paramString)
  {
      Iterator localIterator = getDatasets().iterator();
      for(;;)
      {
          if(!localIterator.hasNext()){
              return "";
          }
          Dataset localDataset = (Dataset)localIterator.next();
          if(localDataset.getShortName() == paramString){
              switch(localDataset.getType())
              {
              case enPoint:
                  return paramString + "1";
              case enPolyline:
                  return paramString + "2";
              case enPolygon:
                  return paramString + "3";
              }
          }
      }
  }
  
  public MapCellIndex GetMapCellIndex()
  {
      return this.m_MapCellIndex;
  }
  
  public ASQLiteDatabase GetSQLiteDatabase()
  {
      return this._EDatabase;
  }
  
  public List<FieldInfo> GetTableStruct(String paramString)
  {
      ArrayList localArrayList = new ArrayList();
      SQLiteDataReader paramString2 = Query("select * from TableStruct where TableName='" + paramString + "'");
      if(paramString2 != null){}
      for(;;)
      {
          if(!paramString2.Read()){
              return localArrayList;
          }
          FieldInfo localFieldInfo = new FieldInfo();
          localFieldInfo.setName(paramString2.GetString("FieldName"));
          localFieldInfo.setCaption(paramString2.GetString("FieldCaption"));
          localArrayList.add(localFieldInfo);
      }
  }
  
  public boolean Open()
  {
      this._EDatabase = new ASQLiteDatabase();
      this._EDatabase.setDatabaseName(getName());
      return true;
  }
  
  public boolean OpenDatasets()
  {
      Object localObject1 = new ArrayList();
      Object localObject2 = this._EDatabase.Query("select name from sqlite_master where type='table' "
             + "and substr(name,length(name),1) in ('0','1','2') order by substr(name,length(name),1) desc");
      if(!((SQLiteDataReader)localObject2).Read())
      {
          ((SQLiteDataReader)localObject2).Close();
          localObject1 = ((List)localObject1).iterator();
      }
      
      for(;;)
      {
          if(!((Iterator)localObject1).hasNext())
          {
              ((List)localObject1).add(((SQLiteDataReader)localObject2).GetString(0)); //获取第0个
              return true;
              //break;
          }
          localObject2 = (String)((Iterator)localObject1).next();
          Object localObject3 = "update " + (String)localObject2 + " set SYS_STATUS = 0";
          if(this._EDatabase.ExecuteSQL((String)localObject3))
          {
              localObject3 = new Dataset(this);
              getDatasets().add((Dataset)localObject3);
              ((Dataset)localObject3).setName((String)localObject2);
              localObject2 = ((String)localObject2).substring(((String)localObject2).length() - 1, ((String)localObject2).length());
              if (((String)localObject2).equals("0")) {
                  ((Dataset)localObject3).setType(lkGeoLayerType.enPoint);
              }
              if (((String)localObject2).equals("1")) {
                  ((Dataset)localObject3).setType(lkGeoLayerType.enPolyline);
              }
              if (((String)localObject2).equals("2")) {
                  ((Dataset)localObject3).setType(lkGeoLayerType.enPolygon);
              }
          }
      }
  }
  
  public boolean OpenDatasetsIndex()
  {
      Object localObject = this._EDatabase.Query("select LT_JD,LT_WD,RB_JD,RB_WD from TableExtend");
      for(;;)
      {
          if(!((SQLiteDataReader)localObject).Read())
          {
              ((SQLiteDataReader)localObject).Close();
              localObject = getName().substring(0, getName().lastIndexOf(".")) + ".idx";
              new LoadMapFileMT(this).ReadIndexData((String)localObject);
              return true;
          }
          double d1 = Double.valueOf(((SQLiteDataReader)localObject).GetString("LT_JD")).doubleValue();
          double d2 = Double.valueOf(((SQLiteDataReader)localObject).GetString("LT_WD")).doubleValue();
          double d3 = Double.valueOf(((SQLiteDataReader)localObject).GetString("RB_JD")).doubleValue();
          double d4 = Double.valueOf(((SQLiteDataReader)localObject).GetString("RB_WD")).doubleValue();
          this.m_MapCellIndex.SetCellExtend(new Coordinate(d1, d2), new Coordinate(d3, d4));
      }
  }
  
  public SQLiteDataReader Query(String paramString)
  {
      return this._EDatabase.Query(paramString);
  }
  
  public boolean RemoveDataset(String paramString)
  {
      return ExcuteSQL("drop table " + paramString);
  }
  
  public boolean Save()
  {
      new ArrayList();
      Iterator localIterator = getDatasets().iterator();
      if(!localIterator.hasNext()){
          return true;
      }
      Dataset localDataset = (Dataset)localIterator.next();
      if(ExcuteSQL(String.format("delete from %1$s where SYS_STATUS=1 or SYS_GEO is null", new Object[]{localDataset.getName()}))){
          localDataset.Purge();
      }
      int i = 0;
      Geometry localGeometry = null;
      if(i < localDataset.getRecordCount())
      {
          localGeometry = localDataset.GetGeometry(i);
          if(localGeometry.GetEdited())
          {
              if(UpdateGeometry(Tools.GeometryToByte(localGeometry.GetAllCoordinateList()), localDataset.getShortName(), i+1)){
                  //break;
              }
              Tools.ShowMessageBox("保存采集数据失败!");
          }
      }
      for(;;)
      {
          i += 1;
          localGeometry.SetEdited(false);
          break;
      }
    return true;
  }
  
  public void SetMapCellIndex(MapCellIndex paramMapCellIndex)
  {
      this.m_MapCellIndex = paramMapCellIndex;
  }
  
  public boolean UpdateGeometry(byte[] paramArrayOfByte, String paramString, int paramInt)
  {
      try
      {
          paramString = "update " + paramString + " set SYS_GEO=? where SYS_ID=" + paramInt;
          this._EDatabase.ExecuteSQL(paramString, new Object[]{paramArrayOfByte});
          return true;
      }
      catch(Error paramArrayOfByte1)
      {
          Tools.ShowMessageBox("采集图形数据更新失败!" + paramArrayOfByte1.getMessage());
      }
      return false;
  }
  
  public List<Dataset> getDatasets()
  {
      return this._DataSets;
  }
  
  public boolean getEdited()
  {
      Iterator localIterator = getDatasets().iterator();
      do
      {
          if(!localIterator.hasNext()){
              return false;
          }
      }while(!((Dataset)localIterator.next()).getEdited());
      return true;
  }
  
  public boolean getEditing()
  {
      return this._Editing;
  }
  
  public String getName()
  {
      return this._Name;
  }
  
  public void setEditing(boolean paramBoolean)
  {
      this._Editing = paramBoolean;
  }
  
  public void setName(String paramString)
  {
      this._Name = paramString;
  }
}
View Code

ASQLiteDatabase.java 一SQLite数据库类

public class ASQLiteDatabase {
    private String _DatabaseName = "";
    private SQLiteDatabase _SQLiteDatabase = null;
    
    public void Close()
    {
        this._SQLiteDatabase.close();
    }
    
    public boolean ExecuteSQL(String paramString)
    {
        try{
            this._SQLiteDatabase.execSQL(paramString);
            return true;
        }
        catch(SQLiteException paramString2){}
        return false;
    }
    
    public boolean ExecuteSQL(String paramString, Object[] paramArrayOfObject)
    {
        try
        {
            this._SQLiteDatabase.execSQL(paramString, paramArrayOfObject);
            return true;
        }catch(SQLiteException paramString2){}
        return false;
    }
    
    public SQLiteDataReader Query(String paramString)
    {
        Log.d("ASQLiteDatabase", "Query");
        return new SQLiteDataReader(this._SQLiteDatabase.rawQuery(paramString, null));
    }

    public void setDatabaseName(String paramString) {
        // TODO Auto-generated method stub
        try{
            this._DatabaseName = paramString;
            Log.d("ASQLiteDatabase", "setDatabaseName(paramString):" + this._DatabaseName);
            this._SQLiteDatabase = SQLiteDatabase.openDatabase(this._DatabaseName, null, SQLiteDatabase.CREATE_IF_NECESSARY); //SQLiteDatabase.CREATE_IF_NECESSARY
            Log.d("ASQLiteDatabase", "Try Open SQLiteDatabase");
            return;
        }catch(SQLiteException paramString2){
            paramString2.getMessage();
        }
    }

}
View Code

MapControl.java 地图控件类 (MapControl类继承自ImageView,在MainActivity.java中便将MapControl对象添加到RelativeLayout中

public class MapControl extends ImageView {
    boolean FirstLoad = true;
    public Envelope TrackingRectangle;
    private Tools _Activetool;
    private ICommand _ICommand; //命令接口
    private IOnPaint _IOnPaint; //绘图接口
    public IOnPaint _GPSMapPaint;
    private Map _Map;
    private MoveObject _MoveObject = null;
    public Pan _Pan;
    public Select _Select;
    private Vertex _Vertex = null;
    private ZoomIn _ZoomIn;
    private ZoomInOutPan _ZoomInOutPan;
    private ZoomOut _ZoomOut;
    public ICommand m_BeforeCommand;
    public IOnPaint m_BeforeIOnPaint;
    public MapTools m_BeforeTool;

    public MapControl(Context paramContext)
    {
        super(paramContext);
        InitMapControl(); //初始化地图控件
    }
    
    private void MapControl_MouseDown(MotionEvent paramMotionEvent)
    {
        if((this._Map == null)||(this._Activetool == Tools.None)){}
        while(this._ICommand == null){
            return;
        }
        this._ICommand.MouseDown(paramMotionEvent);
    }
    
    private void MapControl_MouseMove(MotionEvent paramMotionEvent)
    {
        if((this._Map == null)||(this._Activetool == Tools.None)){}
        while(this._ICommand == null){
            return;
        }
        this._ICommand.MouseMove(paramMotionEvent);
    }
    
    private void MapControl_MouseUp(MotionEvent paramMotionEvent)
    {
        if((this._Map == null)||(this._Activetool == Tools.None)){}
        while(this._ICommand == null){
            return;
        }
        this._ICommand.MouseUp(paramMotionEvent);
    }
    
    private void SetZoomInOut(float paramFloat)
    {
        this._Map.setExtend(this._Map.getExtend().Scale(paramFloat));
        this._Map.Refresh();
    }

    private void InitMapControl() { //初始化地图控件
        // TODO Auto-generated method stub
        this._ZoomIn = new ZoomIn(this);  //放大
        this._ZoomOut = new ZoomOut(this);  //缩小
        this._ZoomInOutPan = new ZoomInOutPan(this);  //缩放平移
        this._Pan = new Pan(this);  //平移
        this._Select = new Select(this, true);  //选择
        this._MoveObject = new MoveObject(this);  //移动实体
        this._Vertex = new Vertex(this);  //节点
        setActiveTool(Tools.None);  //设置当前工具
    }
    
    public void SetCommand(ICommand paramICommand)
    {
        this._ICommand = paramICommand;
    }
    
    public void SetOnPaint(IOnPaint paramIOnPaint)
    {
        this._IOnPaint = paramIOnPaint;
    }
    
    public void SetZoomIn()
    {
        SetZoomInOut(0.5F);
    }
    
    public void SetZoomOut()
    {
        SetZoomInOut(2.0F);
    }
    
    public Tools getActiveTool()
    {
        return this._Activetool;
    }
    
    protected void onDraw(Canvas paramCanvas)
    {
        if(this.FirstLoad){
            this.FirstLoad = false;
        }
        super.onDraw(paramCanvas);
        if(this._IOnPaint != null){
            this._IOnPaint.OnPaint(paramCanvas);
        }
        if(this._GPSMapPaint != null){
            this._GPSMapPaint.OnPaint(paramCanvas);
        }
    }
    
    public boolean onTouchEvent(MotionEvent paramMotionEvent)
    {
        paramMotionEvent.getActionMasked();
        paramMotionEvent.getPointerCount();
        switch(paramMotionEvent.getAction() & 0xFF)
        {
        case 1:
            paramMotionEvent.getPointerCount();
            return true;
        case 2:
            MapControl_MouseDown(paramMotionEvent);
            return true;
        case 3:
            MapControl_MouseUp(paramMotionEvent);
            return true;
        case 4:
            MapControl_MouseMove(paramMotionEvent);
            return true;
        default:
            if(this._Activetool == Tools.ZoomInOutPan)
            {
                MapControl_MouseDown(paramMotionEvent);
                return true;
            }
            else if(this._Activetool == Tools.ZoomInOutPan)
            {
                MapControl_MouseUp(paramMotionEvent);
            }
        }
        return false;
        
    }

    public void setActiveTool(Tools paramTools) { //设置动态工具
        // TODO Auto-generated method stub
        if((paramTools != Tools.FullScreen)&&(paramTools != Tools.FullScreenSize)){
            this._Activetool = paramTools;
        }
        switch(paramTools)
        {
        case EditLine: //如果设置工具为编辑线
            this._ICommand = null;
            return;
        case FullScreenSize: //如果设置工具为全屏尺寸
            this._ICommand = this._ZoomInOutPan;
            this._IOnPaint = this._ZoomInOutPan;
            return;
        case InsertVertex: //如果设置工具为插入节点
            this._ICommand = this._ZoomIn;
            this._IOnPaint = this._ZoomIn;
            return;
        case MeasureLength: //如果设置工具为丈量长度
            this._ICommand = this._ZoomOut;
            this._IOnPaint = this._ZoomIn;
            return;
        case Merge2: //如果设置工具为融合
            this._ICommand = this._Pan;
            this._IOnPaint = this._Pan;
            return;
        case None: //如果为None
            default:
            case FullScreen:
            case AddPolygon:
            case AddPolyline:
            case AddVertex:
            case AddPoint:
            case DelVertexInBox:
            case DelVertex:
                if(getMap() == null){
                if(this._Map == null)
                    return;
                int i = getWidth();
                int j = getHeight();
                if((i != this._Map.getSize().getWidth())||(j != this._Map.getSize().getHeight())){
                    this._Map.setSize(new Size(i, j));
                }
                this._Map.setExtend(this._Map.getFullExtendForView());
                this._ICommand = null;
                setActiveTool(Tools.FullScreenSize);
                return;
            };
            this._Map.Refresh();
            return;
        case CallMile:
            this._ICommand = this._Select;
              return;
        case Pan: //平移
              this._ICommand = this._MoveObject;
              this._IOnPaint = this._MoveObject;
              return;
        case Merge1: 
              this._ICommand = this._Vertex;
              this._IOnPaint = this._Vertex;
              this._Vertex.SetVertexEditType(lkVertexEditType.enMove);
              return;
        case MoveObject: 
              this._ICommand = this._Vertex;
              this._IOnPaint = this._Vertex;
              this._Vertex.SetVertexEditType(lkVertexEditType.enAdd);
              return;
        case MoveVertex: 
              this._ICommand = this._Vertex;
              this._IOnPaint = this._Vertex;
              this._Vertex.SetVertexEditType(lkVertexEditType.enDelete);
              return;
        }
    }
    
    public void setActiveTools(Tools paramTools, IOnPaint paramIOnPaint, ICommand paramICommand)
    {
        setActiveTool(paramTools);
        this._ICommand = paramICommand;
        this._IOnPaint = paramIOnPaint;
    }

    public Map getMap() {
        // TODO Auto-generated method stub
        return this._Map;
    }

    public void setMap(Map paramMap) {
        // TODO Auto-generated method stub
        this._Map = paramMap;
    }

}
View Code

 Map.java 地图类

public class Map {
    boolean LoadGoogleMap = false;
    public Bitmap MaskBitmap = null;
    private GeoLayers _BKGeoLayers = new GeoLayers();
    private ImageView _DrawPicture;
    private Envelope _ExtendForView = null;
    private GeoLayers _GeoLayers = new GeoLayers();
    private Canvas _Graphics;
    private GridLayer _GridLayer = new GridLayer(this);
    private boolean _InvalidMap = false;
    private OverLayer _OverLayer = new OverLayer();
    private OverMap _OverMapLayer = new OverMap(this);
    private v1_ScaleBar _ScaleBar = null;
    private String _SystemPath = "";
    private ViewConvert _ViewConvert = new ViewConvert();
    public Bitmap bp = null;

    public Map(MapControl paramMapControl) {
        // TODO Auto-generated constructor stub
        this._DrawPicture = paramMapControl;
        setSize(new Size(240, 240));
        setFullExtend(StaticObject.soMapCellIndex.GetCellExtend());
        paramMapControl.setMap(this);
    }


    public void Dispose() {
        // TODO Auto-generated method stub
        if(this.bp != null){
            this.bp.recycle();
        }
        this.bp = null;
        if(this.MaskBitmap != null){
            this.MaskBitmap.recycle();
        }
        this.MaskBitmap = null;
        this._Graphics = null;
        System.gc();
    }


    public void ClearSelection() {
        // TODO Auto-generated method stub
        Iterator localIterator = this._GeoLayers.getList().iterator();
        for(;;)
        {
            if(!localIterator.hasNext()){
                return;
            }
            ((GeoLayer)localIterator.next()).getSelSelection().RemoveAll();
        }
    }

    public void FastRefresh() {
        // TODO Auto-generated method stub
        this._Graphics.drawColor(Color.GREEN);
        this._OverMapLayer.FastRefresh();
        this._GridLayer.FastRefresh();
        GeoLayer localGeoLayer;
        Iterator localIterator = this._GeoLayers.getList().iterator();
        if(!localIterator.hasNext())
        {
            localIterator = this._GeoLayers.getList().iterator();
            if(localIterator.hasNext()){
                //break;
            }
            localIterator = this._GeoLayers.getList().iterator();
            if(localIterator.hasNext()){
                //break;
            }
            localIterator = this._GeoLayers.getList().iterator();
        }
        for(;;)
        {
            if(!localIterator.hasNext())
            {
                getOverLayer().Refresh();
                new Canvas(this.MaskBitmap).drawBitmap(this.bp, 0.0F, 0.0F, null);
                this._DrawPicture.invalidate();
                
                ((GeoLayer)localIterator.next()).FastRefresh();
                localGeoLayer = (GeoLayer)localIterator.next();
                if(!localGeoLayer.getRender().getIfLabel()){
                    break;
                }
                localGeoLayer.DrawSelectionLabel(localGeoLayer.getShowSelection(), this._Graphics, 0, 0);
                break;
                //return;
            }
            localGeoLayer = (GeoLayer)localIterator.next();
            if(localGeoLayer.getRender().getIfLabel()){
                localGeoLayer.DrawSelectionLabel(localGeoLayer.getSelSelection(), this._Graphics, 0, 0);
            }
        }
    }


    /*
    public void setExtend(Object fullExtendForView) {
        // TODO Auto-generated method stub
        
    }
    */

    public void Refresh() {
        // TODO Auto-generated method stub
        if(this._ScaleBar != null){
            this._ScaleBar.RefreshScalBar(this);
        }
        this._OverMapLayer.Refresh();
        this._GridLayer.Refresh();
        List localList = getMapCellIndex().CalCellIndex(getViewConvert().CalExtend());
        Object localObject1 = null;
        Iterator localIterator = this._GeoLayers.getList().iterator();
        for(;;)
        {
            if(!localIterator.hasNext())
            {
                FastRefresh();
                return;
            }
            GeoLayer localGeoLayer = (GeoLayer)localIterator.next();
            if((localGeoLayer.getVisibleScaleMax() >= localGeoLayer.getMap().getViewConvert().getZoom())&&
                    (localGeoLayer.getVisibleScaleMin() <= localGeoLayer.getMap().getViewConvert().getZoom())&&
                    (localGeoLayer.getVisible()))
            {
                localGeoLayer.getShowSelection().RemoveAll();
                Object localObject2 = localObject1;
                if(localObject1 == null)
                {
                    localObject2 = new ArrayList();
                    localObject1 = localGeoLayer.getDataset().getCellIndex().getCurrentCellIndex().iterator();
                }
                for(;;)
                {
                    if(!((Iterator)localObject1).hasNext())
                    {
                        localGeoLayer.getDataset().SetNewCellIndex(localList, (List)localObject2);
                        localGeoLayer.Refresh();
                        localObject1 = localObject2;
                        break;
                    }
                    int i = ((Integer)((Iterator)localObject1).next()).intValue();
                    if(localList.indexOf(Integer.valueOf(i))<0){
                        ((List)localObject2).add(Integer.valueOf(i));
                    }
                }
            }
            localGeoLayer.getShowSelection().RemoveAll();
        }
    }
    
    public int SetDPI(float paramFloat)
    {
        return (int)paramFloat;
    }
    
    public int SetDPI(int paramInt)
    {
        return SetDPI(paramInt);
    }
    
    public boolean SetDataSource(DataSource paramDataSource)
    {
        Iterator<Dataset> paramDataSource2 = paramDataSource.getDatasets().iterator();
        for(;;)
        {
            if(!paramDataSource2.hasNext()){
                return true;
            }
            Dataset localDataset = (Dataset)paramDataSource2.next();
            GeoLayer localGeoLayer = new GeoLayer(this);
            localGeoLayer.setDataset(localDataset);
            localGeoLayer.setName(localDataset.getName());
            localGeoLayer.setType(localDataset.getType());
            this._GeoLayers.AddLayer(localGeoLayer);
        }
    }
    
    public void SetScaleBar(v1_ScaleBar paramv1_ScaleBar)
    {
        this._ScaleBar = paramv1_ScaleBar;
    }

    public double ToMapDistance(double paramDouble) {
        // TODO Auto-generated method stub
        return getViewConvert().getZoomScale() * paramDouble;
    }

    public Envelope getExtend() {
        // TODO Auto-generated method stub
        return this._ViewConvert.getExtend();
    }

    public Canvas getDisplayGraphic() {
        // TODO Auto-generated method stub
        return this._Graphics;
    }

    public void UpdateExtendForView(Envelope paramEnvelope) {
        // TODO Auto-generated method stub
        if(this._ExtendForView == null){
            this._ExtendForView = new Envelope(paramEnvelope.getLeftTop().Clone(), paramEnvelope.getRightBottom().Clone());
        }
        this._ExtendForView = this._ExtendForView.MergeEnvelope(paramEnvelope);
    }


    public GeoLayers getBKGeoLayers()
    {
        return this._BKGeoLayers;
    }
    
    public Coordinate getCenter()
    {
        return this._ViewConvert.getCenter();
    }
    
    public ImageView getDrawPicture()
    {
        return this._DrawPicture;
    }
    
    public Envelope getFullExtend()
    {
        return getViewConvert().getFullExtend();
    }
    

    public Envelope getFullExtendForView() {
        // TODO Auto-generated method stub
        Envelope localEnvelope;
        Coordinate localCoordinate = null;
        double d2 = 0;
        double d1 = 0;
        if(this._ExtendForView == null)
        {
            localEnvelope = getGridLayer().GetExtend();
            if(localEnvelope != null)
            {
                localCoordinate = localEnvelope.getCenter();
                d2 = localEnvelope.getWidth() * 2.0D;
                d1 = localEnvelope.getHeight() * 2.0D;
                if(d2 < d2){
                    //break;
                }
                d1 = getViewConvert().getSize().getHeight() * d2 / getViewConvert().getSize().getWidth();
            }
        }
        for(;;)
        {
            localEnvelope = getFullExtend();
            localEnvelope = this._ExtendForView;
            d2 = getViewConvert().getSize().getWidth() * d1/getViewConvert().getSize().getHeight();
            return new Envelope(localCoordinate.getX() - d2/2.0D, localCoordinate.getY() + d1/2.0D, localCoordinate.getX() +
                    d2/2.0D, localCoordinate.getY() - d1/2.0D);
            
        }
        //return null;
    }
    
    public GeoLayers getGeoLayers()
    {
        return this._GeoLayers;
    }
    
    public GridLayer getGridLayer()
    {
        return this._GridLayer;
    }
    
    public boolean getInvalidMap()
    {
        return this._InvalidMap;
    }
    
    public MapCellIndex getMapCellIndex()
    {
        return StaticObject.soMapCellIndex;
    }
    
    public OverLayer getOverLayer()
    {
        return this._OverLayer;
    }
    
    public OverMap getOverMapLayer()
    {
        return this._OverMapLayer;
    }

    public Size getSize() {
        // TODO Auto-generated method stub
        return getViewConvert().getSize();
    }
    
    public String getSystemPath()
    {
        return this._SystemPath;
    }
    
    public ViewConvert getViewConvert()
    {
        return this._ViewConvert;
    }
    
    public void setCenter(Coordinate paramCoordinate)
    {
        this._ViewConvert.setCenter(paramCoordinate);
    }
    
    public void setExtend(Envelope paramEnvelope)
    {
        this._ViewConvert.setExtend(paramEnvelope);
    }
    
    public void setFullExtend(Envelope paramEnvelope)
    {
        getViewConvert().setFullExtend(paramEnvelope);
    }
    
    public void setInvalidMap(boolean paramBoolean)
    {
        this._InvalidMap = paramBoolean;
    }
    

    public void setSize(Size paramSize) {
        // TODO Auto-generated method stub
        Dispose();
        getViewConvert().setSize(paramSize);
        this.bp = Bitmap.createBitmap(this._ViewConvert.getSize().getWidth(), this._ViewConvert.getSize().getHeight(),
                Bitmap.Config.ARGB_8888);
        this.MaskBitmap = Bitmap.createBitmap(this.bp, 0, 0, this.bp.getWidth(), this.bp.getHeight());
        this._DrawPicture.setImageBitmap(this.bp);
        this._Graphics = new Canvas(this.bp);
    }
    

    public void setSystemPath(String paramString) {
        // TODO Auto-generated method stub
        this._SystemPath = paramString;
    }
}
View Code

 v1_ScaleBar.java 比例尺类

public class v1_ScaleBar {
    private Paint _BKFont = null; //文字体
    private Paint m_LinePen = null; //线笔
    private Paint m_TextPen = null; //文字笔
    private Bitmap m_bp = null; //点图
    private Canvas m_g = null; //画布
    
    private void DrawBar(float paramFloat1, float paramFloat2, String paramString) //绘制栏
    {
        String str2 = String.valueOf(paramFloat2);
        String str1 = str2;
        if(str2.substring(str2.length() - 2, str2.length()).equals(".0")){ //取后两位如果为.0
            str1 = str2.substring(0, str2.length() - 2); //去除后两位
        }
        paramFloat2 = this.m_g.getWidth() * paramFloat2/paramFloat1; //画布宽度*paramFloat2/paramFloat1
        float f = this.m_g.getHeight(); //画布高度
        paramFloat1 = 0.0F;
        int i = 1;
        for(;;)
        {
            if(i>2)
            {
                str2 = str1 + paramString;
                paramFloat1 = (paramFloat2 - this.m_TextPen.measureText(str1+paramString))/2.0F;
                paramFloat2 = this.m_g.getHeight() - 12;
                this.m_g.drawText(str2, paramFloat1-2.0F, paramFloat2, getBKFont());
                this.m_g.drawText(str2, 2.0F + paramFloat1, paramFloat2, getBKFont());
                this.m_g.drawText(str2, paramFloat1, paramFloat2 - 2.0F, getBKFont());
                this.m_g.drawText(str2, paramFloat1, 2.0F + paramFloat2, getBKFont());
                this.m_g.drawText(str2, 2.0F + paramFloat1, 2.0F + paramFloat2, getBKFont());
                this.m_g.drawText(str2, paramFloat1 - 2.0F, paramFloat2 - 2.0F, getBKFont());
                this.m_g.drawText(str2, 2.0F + paramFloat1, paramFloat2 - 2.0F, getBKFont());
                this.m_g.drawText(str2, paramFloat1 - 2.0F, 2.0F + paramFloat2, getBKFont());
                this.m_g.drawText(str2, paramFloat1, paramFloat2, this.m_TextPen);
                return;
            }
            if(i==1)
            {
                this.m_LinePen.setColor(Color.CYAN);
                this.m_LinePen.setStrokeWidth(6.0F);
                paramFloat1 = 2.0F;
            }
            if(i==2)
            {
                this.m_LinePen.setColor(Color.BLUE);
                this.m_LinePen.setStrokeWidth(4.0F);
            }
            this.m_g.drawLine(0.0F, f-5.0F, paramFloat2, f-5.0F, this.m_LinePen);
            this.m_g.drawLine(2.0F, f/2.0F, 2.0F, f, this.m_LinePen);
            this.m_g.drawLine(paramFloat2-paramFloat1, f/2.0F, paramFloat2-paramFloat1, f, this.m_LinePen);
            i+=1;
        }
    }
    
    private Paint getBKFont()
    {
        if(this._BKFont == null)
        {
            this._BKFont = new Paint();
            this._BKFont.setColor(Color.YELLOW);
            this._BKFont.setAntiAlias(true);
            Typeface localTypeface = Typeface.create("宋体", 0);
            this._BKFont.setTypeface(localTypeface);
            this._BKFont.setAntiAlias(true);
        }
        this._BKFont.setTextSize(this.m_TextPen.getTextSize());
        return this._BKFont;
    }
    
    public void RefreshScalBar(Map paramMap)
    {
        String paramMap2 = null;
        this.m_bp.eraseColor(Color.RED);
        String str = "米";
        double d = 1.0D;
        if(paramMap != null){
            d = paramMap.getViewConvert().getZoomScale();
        }
        int j=(int)(this.m_g.getWidth() * d);
        if(j==0)
        {
            float f = (float)Tools.Save3Point(this.m_g.getWidth() * d);
            DrawBar(f,f,"米");
        }
        int i = 0;
        if(str.length() < 4)
        {
            i=j;
            paramMap2 = str;
            if(j >= 1000)
            {
                i = j/1000;
                paramMap2 = "公里";
            }
            str = String.valueOf(i);
            if(str.length()==1)
            {
                DrawBar(i,i,paramMap2);
                return;
            }
            if(str.length() == 2)
            {
                j = Integer.parseInt(str.substring(1, 2));
                str = str.substring(0,1);
                if(j>=5){}
                for(str = str+"5";;str=str+"0")
                {
                    DrawBar(i, Integer.parseInt(str), paramMap2);
                    return;
                }
            }
            if(str.length()==3)
            {
                j = Integer.parseInt(str.substring(str.length()-2, str.length()));
                str = str.substring(0, str.length() - 2);
                if(j>=50){}
                for(str=str+"50";;str=str+"00")
                {
                    DrawBar(i, Integer.parseInt(str), paramMap2);
                    return;
                }
            }
            return;
        }
        DrawBar(i, Integer.parseInt(str), paramMap2);
    }

    public void SetImageView(ImageView paramImageView) {
        // TODO Auto-generated method stub
        Log.d("ScaleBar", "Into ScaleBar");
        this.m_bp = Bitmap.createBitmap(100, 30, Bitmap.Config.ARGB_4444); //初始化Bitmap
        this.m_g = new Canvas(this.m_bp); //为画布赋值
        Log.d("ScaleBar", "set canvas");
        paramImageView.setImageBitmap(this.m_bp); //为ScaleBar赋Bitmap值
        this.m_TextPen = new Paint();
        this.m_TextPen.setColor(Color.BLUE);
        this.m_TextPen.setAntiAlias(true);
        Typeface paramImageView2 = Typeface.create("宋体", Typeface.BOLD);
        this.m_TextPen.setTypeface(paramImageView2);
        this.m_TextPen.setTextSize(16.0F);
        this.m_LinePen = new Paint();
        this.m_LinePen.setColor(Color.BLUE);
        this.m_LinePen.setStyle(Paint.Style.STROKE);
        this.m_LinePen.setAntiAlias(true);
        this.m_LinePen.setStrokeWidth(3.0F);
    }

}
View Code

Dataset.java 数据集类

public class Dataset
{
  private GeoLayer _BindGeoLayer = null; //地理图层
  private LayerCellIndex _CellIndex  = null; //图层细胞索引
  private DataSource _DataSource = null; //数据源
  private boolean _Edited = false; //是否编辑
  private List<ExtraGeometry> _GeometryList = new ArrayList(); //附加地理数据列
  private String _Name = ""; //名称
  private List<Integer> _PurgeObjectIndexList = new ArrayList(); //清除对象索引列
  private String _ShortName  = ""; //短名称
  private List<FieldInfo> _TableStruct = null; //表结构
  private lkGeoLayerType _Type = lkGeoLayerType.enUnknow; //地理图层类型

  
}

 GeoLayer.java 地理图层类

public class GeoLayer {
    private Dataset _Dataset = null;
    private String _DisplayFilter = "";
    private boolean _Editable = true;
    private Map _Map = null;
    private String _Name = "";
    private IRender _Render = null;
    private Selection _SelSelection = new Selection();
    private boolean _Selectable = true;
    private Selection _ShowSelection = new Selection();
    private boolean _Snapable = true;
    private lkGeoLayerType _Type = lkGeoLayerType.enUnkown;
    private boolean _Visible = true;
    private double _VisibleScaleMax = 1.7976931348623157E+308D;
    private double _VisibleScaleMin = 0.0D;
    
    public GeoLayer(Map paramMap)
    {
        this._Map = paramMap;
        this._ShowSelection.setType(lkSelectionType.enShow);
        this._SelSelection.setType(lkSelectionType.enSelect);
    }
    
    private void AddIndex(Geometry paramGeometry){}
    
    private void RemoveIndex(Geometry paramGeometry){}
    
    public int AddGeometry(Geometry paramGeometry)
    {
        return AddGeometry(paramGeometry, false);
    }
    
    public int AddGeometry(Geometry paramGeometry, boolean paramBoolean)
    {
        return paramGeometry.getIndex();
    }
    
    public void AddIndex(Geometry paramGeometry, int paramInt){}
    
    public void Dispose()
    {
        this._ShowSelection.RemoveAll();
        this._SelSelection.RemoveAll();
        this._Dataset.Dispose();
    }
    
    public void DrawSelection(Selection paramSelection)
    {
        DrawSelection(paramSelection, this._Map.getDisplayGraphic(), 0, 0);
    }
    
    public void DrawSelection(Selection paramSelection, Canvas paramCanvas, int paramInt1, int paramInt2)
    {
        Iterator localIterator = paramSelection.getGeometryIndexList().iterator();
        for(;;)
        {
            if(!localIterator.hasNext()){
                return;
            }
            int i = ((Integer)localIterator.next()).intValue();
            Geometry localGeometry = this._Dataset.GetGeometry(i);
            if((localGeometry != null)&&(localGeometry.getStatus() != lkGeometryStatus.enDelete) && ((paramSelection.getType()!=lkSelectionType.enShow)
                    ||(this._SelSelection.getGeometryIndexList().indexOf(Integer.valueOf(i))<0))){
                if(paramSelection.getType() == lkSelectionType.enShow)
                {
                    if(localGeometry.getSymbol() == null)
                    {
                        Tools.ShowMessageBox(this._Name);
                        return;
                    }
                    localGeometry.getSymbol().Draw(this._Map, paramCanvas, localGeometry, paramInt1, paramInt2, lkDrawType.enNormal);
                }
                else if(paramSelection.getType() == lkSelectionType.enSelect)
                {
                    localGeometry.getSymbol().Draw(this._Map, paramCanvas, localGeometry, paramInt1, paramInt2, lkDrawType.enSelected_Editing);
                }
            }
        }
    }
    
    public void DrawSelectionLabel(Selection paramSelection, Canvas paramCanvas, int paramInt1, int paramInt2)
    {
        Iterator localIterator = paramSelection.getGeometryIndexList().iterator();
        for(;;)
        {
            if(!localIterator.hasNext()){
                return;
            }
            int i = ((Integer)localIterator.next()).intValue();
            Geometry localGeometry = this._Dataset.GetGeometry(i);
            if((localGeometry != null)&&(localGeometry.getStatus() != lkGeometryStatus.enDelete))
            {
                if(localGeometry.getSymbol() == null)
                {
                    Tools.ShowMessageBox(localGeometry.getTag());
                    return;
                }
                localGeometry.getSymbol().DrawLabel(this._Map, paramCanvas, localGeometry, paramInt1, paramInt2, paramSelection.getType());
            }
        }
    }
    
    public void FastRefresh()
    {
        DrawSelection(this._ShowSelection);
    }
    
    public int GetFieldIndex(String paramString)
    {
        return -1;
    }
    
    public Geometry GetObject(int paramInt)
    {
        return null;
    }
    
    public void Refresh()
    {
        this._Dataset.QueryWithExtend(this._Map.getExtend(), this._ShowSelection);
    }
    
    public void UpdateGeometry(Geometry paramGeometry){}
    
    public Dataset getDataset()
    {
        return this._Dataset;
    }
    
    public String getDisplayFilter()
    {
        return this._DisplayFilter;
    }
    
    public boolean getEditable()
    {
        return this._Editable;
    }
    
    public Map getMap()
    {
        return this._Map;
    }
    
    public String getName()
    {
        return this._Name;
    }
    
    public IRender getRender()
    {
        return this._Render;
    }

    public Selection getSelSelection() {
        // TODO Auto-generated method stub
        return this._SelSelection;
    }
    
    public boolean getSelectable()
    {
        return this._Selectable;
    }

    public Selection getShowSelection() {
        // TODO Auto-generated method stub
        return this._ShowSelection;
    }
    
    public lkGeoLayerType getType()
    {
        return this._Type;
    }
    
    public boolean getVisible()
    {
        return this._Visible;
    }
    
    public double getVisibleScaleMax()
    {
        return this._VisibleScaleMax;
    }
    
    public double getVisibleScaleMin()
    {
        return this._VisibleScaleMin;
    }

    public void setDataset(Dataset paramDataset)
    {
        this._Dataset = paramDataset;
        this._SelSelection.setDataset(this._Dataset);
        this._ShowSelection.setDataset(this._Dataset);
        this._Dataset.setBindGeoLayer(this);
    }
    
    public void setEditable(boolean paramBoolean)
    {
        this._Editable = paramBoolean;
    }
    
    public void setName(String paramString)
    {
        this._Name = paramString;
    }
    
    public void setRender(IRender paramIRender)
    {
        this._Render = paramIRender;
    }
    
    public void setSelectable(boolean paramBoolean)
    {
        this._Selectable = paramBoolean;
    }
    
    public void setSnapable(boolean paramBoolean)
    {
        this._Snapable = paramBoolean;
    }
    
    public void setType(lkGeoLayerType paramlkGeoLayerType)
    {
        this._Type = paramlkGeoLayerType;
    }
    
    public void setVisible(boolean paramBoolean)
    {
        this._Visible = paramBoolean;
    }
    
    public void setVisibleScaleMax(double paramDouble)
    {
        this._VisibleScaleMax = paramDouble;
    }
    
    public void setVisibleScaleMin(double paramDouble)
    {
        this._VisibleScaleMin = paramDouble;
    }
}
View Code

 FieldInfo.java 属性信息类

public class FieldInfo {
    private String _Caption = "";
    private String _Name = "";
    private boolean _Type = false;
    
    public String getCaption()
    {
        return this._Caption;
    }
    
    public String getName()
    {
        return this._Name;
    }
    
    public boolean getType()
    {
        return this._Type;
    }

    public void setCaption(String paramString) {
        // TODO Auto-generated method stub
        this._Caption = paramString;
    }

    public void setName(String paramString) {
        // TODO Auto-generated method stub
        this._Name = paramString;
        this._Name = this._Name.toUpperCase();
        if(this._Name.indexOf("SYS_")>=0){
            this._Type = true;
        }
    }


}
View Code

 v1_LayerRenderExplorer.java 图层渲染

public class v1_LayerRenderExplorer {
    
    private boolean RenderLayer(v1_Layer paramv1_Layer, lkEditMode paramlkEditMode)
    {
        if(paramlkEditMode == lkEditMode.enNew)
        {
            Object localObject = PubVar.m_Workspace.GetDataSourceByEditing();
            Dataset localDataset = new Dataset((DataSource)localObject);
            localDataset.setName(paramv1_Layer.GetLayerID());
            localDataset.setType(paramv1_Layer.GetLayerType());
            ((DataSource)localObject).getDatasets().add(localDataset);
            Log.d("v1_LayerRenderExplorer", "AddlocalDataset");
            GeoLayer localObject2 = new GeoLayer(PubVar.m_Map);
            ((GeoLayer)localObject2).setDataset(localDataset);
            ((GeoLayer)localObject2).setName(localDataset.getName());
            ((GeoLayer)localObject2).setType(localDataset.getType());
            localDataset.setBindGeoLayer((GeoLayer)localObject2);
            PubVar.m_Map.getGeoLayers().AddLayer((GeoLayer)localObject2);
            Log.d("v1_LayerRenderExplorer", "AddLayer");
            RenderLayer(paramv1_Layer, lkEditMode.enEdit);
        }
        if(paramlkEditMode == lkEditMode.enEdit){
            RenderLayerForGeoLayer(PubVar.m_Map.getGeoLayers().GetLayerByName(paramv1_Layer.GetLayerID()), paramv1_Layer); //渲染GeoLayer
        }
        return true;
    }
    
    private void RenderLayerForGeoLayer(GeoLayer paramGeoLayer, v1_Layer paramv1_Layer)
    {
        Log.d("v1_LayerRenderExplorer", "Into RenderLayerForGeoLayer");
        paramGeoLayer.setVisible(paramv1_Layer.GetVisible());
        Log.d("v1_LayerRenderExplorer", "SetVisible");
        if(paramGeoLayer.getRender() == null){
            paramGeoLayer.setRender(new SimpleRender(paramGeoLayer));
        }
        Log.d("v1_LayerRenderExplorer", "set Render");
        paramGeoLayer.getRender().setIfLabel(paramv1_Layer.GetIfLabel());
        Log.d("v1_LayerRenderExplorer", "set IfLabel");
        paramGeoLayer.getRender().setLabelField(paramv1_Layer.GetLabelDataField());
        Log.d("v1_LayerRenderExplorer", "set LabelField");
        paramGeoLayer.getRender().setLabelFont(paramv1_Layer.GetLabelFont());
        Log.d("v1_LayerRenderExplorer", "set LabelFont");
        ((SimpleRender)paramGeoLayer.getRender()).setSymbolName(paramv1_Layer.GetSymbolName());
        Log.d("v1_LayerRenderExplorer", "set SymbolName");
        ((SimpleRender)paramGeoLayer.getRender()).SetSymbolTransparent(paramv1_Layer.GetTransparet());
        Log.d("v1_LayerRenderExplorer", "set SymbolTransparent");
        paramGeoLayer.getRender().LoadSymbol();
        Log.d("v1_LayerRenderExplorer", "After Load Symbol");
        int i = 0;
        for(;;)
        {
            if(i >= paramGeoLayer.getDataset().getRecordCount()){
                return;
            }
            Log.d("v1_LayerRenderExplorer", "get geometry");
            Geometry paramv1_Layer2 = paramGeoLayer.getDataset().GetGeometry(i);
            paramGeoLayer.getRender().UpdateSymbol(paramv1_Layer2);
            i += 1;
        }
    }

    public boolean RenderLayerForAdd(v1_Layer paramv1_Layer) {
        // TODO Auto-generated method stub
        return RenderLayer(paramv1_Layer, lkEditMode.enNew);
    }
    
    public boolean RenderLayerForUpdate(v1_Layer paramv1_Layer)
    {
        return RenderLayer(paramv1_Layer, lkEditMode.enEdit);
    }
    
    public void RenderLayerForUpdateAllLabel(v1_Layer paramv1_Layer)
    {
        Object localObject = PubVar.m_Workspace.GetDataSourceByEditing();
        Dataset localDataset = ((DataSource)localObject).GetDatasetByName(paramv1_Layer.GetLayerID());
        localObject = ((DataSource)localObject).Query("select SYS_ID," + paramv1_Layer.GetLabelDataField() + " from " +
        paramv1_Layer.GetLayerID());
        if(localObject == null){
            return;
        }
        while(((SQLiteDataReader)localObject).Read())
        {
            String str1 = ((SQLiteDataReader)localObject).GetString("SYS_ID");
            String str2 = ((SQLiteDataReader)localObject).GetString(paramv1_Layer.GetLabelDataField());
            localDataset.GetGeometryFromDIndex(Integer.parseInt(str1)).setTag(str2);
        }
        ((SQLiteDataReader)localObject).Close();
    }

    public boolean RenderBKLayerForAdd(v1_Layer paramv1_Layer) {
        // TODO Auto-generated method stub
        Dataset localDataset = PubVar.m_Workspace.GetDataSourceByUnEditing().GetDatasetByName(paramv1_Layer.GetLayerID());
        GeoLayer localGeoLayer = new GeoLayer(PubVar.m_Map);
        localGeoLayer.setDataset(localDataset);
        localGeoLayer.setName(localDataset.getName());
        localGeoLayer.setType(localDataset.getType());
        localDataset.setBindGeoLayer(localGeoLayer);
        PubVar.m_Map.getBKGeoLayers().AddLayer(localGeoLayer);
        RenderLayerForGeoLayer(localGeoLayer, paramv1_Layer);
        return true;
    }

}
View Code

 LayerCellIndex.java 图层细胞索引

public class LayerCellIndex {
  private List<ArrayList<Integer>> _CellIndex = new ArrayList(); //0-1023共1024个ArrayList
  private List<Integer> _CurrentCellIndex = new ArrayList(); //当前的List<Integer>细胞索引
  
  public LayerCellIndex()
  {
      int i = 0;
      for(;;)
      {
          if(i >= 1024){
              return;
          }
          this._CellIndex.add(new ArrayList());
          i += 1;
      }
  }
  
  public void ClearAllIndex()
  {
      Iterator localIterator = this._CellIndex.iterator();
      for(;;)
      {
          if(!localIterator.hasNext()){
              return;
          }
          ((List)localIterator.next()).clear();
      }
  }
  
  public void RemoveIndex(int paramInt)
  {
      Iterator localIterator = this._CellIndex.iterator();
      for(;;)
      {
          if(!localIterator.hasNext()){
              return;
          }
          List localList = (List)localIterator.next();
          int i = localList.indexOf(Integer.valueOf(paramInt));
          if(i >= 0){
              localList.remove(i);
          }
      }
  }
  
  public void SetIndex(List<Integer> paramList, int paramInt)
  {
      Iterator<Integer> paramList2 = paramList.iterator();
      for(;;)
      {
          if(!paramList2.hasNext()){
              return;
          }
          int i = ((Integer)paramList2.next()).intValue();
          ((ArrayList)this._CellIndex.get(i)).add(Integer.valueOf(paramInt));
      }
  }
  
  public void UpdateIndex(List<Integer> paramList, int paramInt)
  {
      RemoveIndex(paramInt);
      SetIndex(paramList, paramInt);
  }
  
  public List<ArrayList<Integer>> getCellIndex()
  {
      return this._CellIndex;
  }
  
  public List<Integer> getCurrentCellIndex()
  {
      return this._CurrentCellIndex;
  }
  
  public void setCellIndex(List<ArrayList<Integer>> paramList)
  {
      this._CellIndex = paramList;
  }
  
  public void setCurrentCellIndex(List<Integer> paramList)
  {
      this._CurrentCellIndex = paramList;
  }
}
View Code

 MapCellIndex.java

public class MapCellIndex {
  private Envelope _BigCell; //大细胞 Envelope范围
  private double _CellHeight; //一个细胞的高度
  private double _CellWidth; //一个细胞的宽度
  private int _Cells = 32; //细胞的个数
  
  public MapCellIndex()
  {
      InitCellIndex(getCells());
  }
  
  private void CalCellIndex(double paramDouble1, double paramDouble2, Param paramParam1, Param paramParam2) //计算细胞索引
  {
      int k = (int)((paramDouble2 - getBigCell().getMinY())/getCellHeigth()); //Y方向的个数
      int j = (int)((paramDouble1 - getBigCell().getMinX())/getCellWidth()); //X方向的个数
      Log.d("MapCellIndex", "paramDouble2:" + paramDouble2 + ",BigCell:" + getBigCell() + ",CellHeight:" + getCellHeigth() + ",k:" + k);
      Log.d("MapCellIndex", "paramDouble1:" + paramDouble1 + ",BigCell:" + getBigCell() + ",CellWidth:" + getCellWidth() + ",j:" + j);
      
      int i = 0;
      
      
      for(;;)
      {
          if(j >= getCells()) //基本不太可能发生
          {
              i = getCells() - 1;
              if(k < getCells()){
                  break;
              }
              j = getCells() - 1;
          } 
          
          if(j >= 0){
              i = j;
              j = k;
              break;
          }
          if(k <=0 ){ //不太可能发生
              j = 0;
              i = 0;
              break;
          }
      }
      paramParam1.setValue(j);
      paramParam2.setValue(i);
      return;
      
      /*
      int i = 0;
      Log.d("MapCellIndex", String.valueOf(getCells())); //32个
      if(j >= getCells())
      {
          i = getCells() - 1;
          if(k < getCells()){
              //break;
          }
          j = getCells() - 1;
      }
      for(;;)
      {
          if(k < 0){
              j = 0;
          }
          j = k;
          i = j;
          paramParam1.setValue(j);
          paramParam2.setValue(i);
          if(j>=0){
              break;
          }
          return;
          //break;
          
      }
      */
  }
  
  private void InitCellIndex(int paramInt)
  {
      this._BigCell = GetCellExtend();
      this._CellHeight = (this._BigCell.getHeight() / paramInt);
      this._CellWidth = (this._BigCell.getWidth() / paramInt);
  }
  
  public int CalCellIndex(Coordinate paramCoordinate)
  {
      Param localParam1 = new Param();
      Param localParam2 = new Param();
      CalCellIndex(paramCoordinate.getX(), paramCoordinate.getY(), localParam1, localParam2);
      int i = localParam1.getInt();
      int j = localParam2.getInt();
      return getCells() * i + j;
  }
  
  public List<Integer> CalCellIndex(Coordinate paramCoordinate, double paramDouble)
  {
      ArrayList localArrayList = new ArrayList();
      Polygon paramCoordinate2;
      if(paramDouble == 0.0D)
      {
          Param localParam1 = new Param();
          Param localParam2 = new Param();
          CalCellIndex(paramCoordinate.getX(), paramCoordinate.getY(), localParam1, localParam2);
          int i = localParam1.getInt();
          int j = localParam2.getInt();
          localArrayList.add(Integer.valueOf(getCells() * i + j));
          return localArrayList;
      }
      localArrayList = new ArrayList();
      int i = 1;
      for (;;)
      {
          if(i > 4)
          {
              paramCoordinate2 = new Polygon();
              paramCoordinate2.SetAllCoordinateList(localArrayList);
              return paramCoordinate2.CalCellIndex();
          }
          double d2 = 0.0D;
          double d1 = 0.0D;
          if(i == 1)
          {
              d2 = paramCoordinate.getX() - paramDouble;
              d1 = paramCoordinate.getY() - paramDouble;
          }
          if(i == 2)
          {
              d2 = paramCoordinate.getX() + paramDouble;
              d1 = paramCoordinate.getY() - paramDouble;
          }
          if(i == 3)
          {
              d2 = paramCoordinate.getX() + paramDouble;
              d1 = paramCoordinate.getY() + paramDouble;
          }
          if(i == 4)
          {
              d2 = paramCoordinate.getX() - paramDouble;
              d1 = paramCoordinate.getY() + paramDouble;
          }
          localArrayList.add(new Coordinate(d2, d1));
          i += 1;
      }
  }
  
  public List<Integer> CalCellIndex(Envelope paramEnvelope)
  {
      ArrayList localArrayList = new ArrayList();
      Param localParam1 = new Param();
      Param localParam2 = new Param();
      Param localParam3 = new Param();
      Param localParam4 = new Param();
      CalCellIndex(paramEnvelope.getLeftTop(), localParam1, localParam4);
      CalCellIndex(paramEnvelope.getRightBottom(), localParam2, localParam3);
      Log.d("MapCellIndex", "After CalCellIndex");
      int m = localParam1.getInt();
      int i = localParam2.getInt();
      int n = localParam3.getInt();
      int k = localParam4.getInt();
      if(i > m){
          return localArrayList;
      }
      int j = k;
      for(;;)
      {
          if(j > n)
          {
              i += 1;
              break;
          }
          localArrayList.add(Integer.valueOf(getCells() * i + j));
          j += 1;
      }
      return localArrayList;
  }
  
  public void CalCellIndex(Coordinate paramCoordinate, Param paramParam1, Param paramParam2)
  {
      CalCellIndex(paramCoordinate.getX(), paramCoordinate.getY(), paramParam1, paramParam2);
  }
  
  public Envelope GetCellExtend()
  {
      Log.d("MapCellIndex", "Into GetCellExtend");
      if(this._BigCell == null){
          SetCellExtend(new Coordinate(0.0D, 0.0D), new Coordinate(999999.0D, 999999.0D));
      }
      Log.d("MapCellIndex", "Before return big cell");
      return getBigCell();
  }
  
  public void SetCellExtend(Coordinate paramCoordinate1, Coordinate paramCoordinate2)
  {
      this._BigCell = new Envelope(paramCoordinate1, paramCoordinate2);
      this._CellHeight = (this._BigCell.getHeight()/this._Cells);
      this._CellWidth = (this._BigCell.getWidth()/this._Cells);
  }
  
  public Envelope getBigCell()
  {
    return this._BigCell;
  }
  
  public double getCellHeigth()
  {
    return this._CellHeight;
  }
  
  public double getCellWidth()
  {
    return this._CellWidth;
  }
  
  public int getCells()
  {
    return this._Cells;
  }
}
View Code

 Selection.java 选择Dataset

public class Selection {
    private Dataset _Dataset = null;
    private List<Integer> _GeometryIndexList = new ArrayList();
    private ISymbol _Style = null;
    public lkSelectionType _Type = lkSelectionType.enUnKnow;

    public boolean Add(int paramInt) {
        // TODO Auto-generated method stub
        if(getGeometryIndexList().indexOf(Integer.valueOf(paramInt)) >= 0 ){
            return true;
        }
        getGeometryIndexList().add(Integer.valueOf(paramInt));
        return true;
    }
    
    public boolean Add(Geometry paramGeometry)
    {
        return Add(paramGeometry.getIndex());
    }
    
    public boolean FromRecordset()
    {
        return true;
    }
    
    public boolean Remove(int paramInt)
    {
        return getGeometryIndexList().remove(Integer.valueOf(paramInt));
    }
    
    public boolean Remove(Geometry paramGeometry)
    {
        return true;
    }
    
    public boolean RemoveAll()
    {
        this._GeometryIndexList.clear();
        return true;
    }
    
    public Dataset getDataset()
    {
        return this._Dataset;
    }
    
    public Envelope getEnvelope()
    {
        Object localObject;
        if(getGeometryIndexList().size() == 0)
        {
            localObject = null;
            return (Envelope)localObject;
        }
        Envelope localEnvelope = this._Dataset.GetGeometry(((Integer)getGeometryIndexList().get(0)).intValue()).getEnvelope();
        int i = 1;
        for(;;)
        {
            localObject = localEnvelope;
            if(i >= getGeometryIndexList().size()){
                break;
            }
            localEnvelope = localEnvelope.MergeEnvelope(this._Dataset.GetGeometry(((Integer)getGeometryIndexList().get(i)).intValue()).getEnvelope());
            i += 1;
        }
        return localEnvelope;
    }
    
    public List<Integer> getGeometryIndexList() {
        // TODO Auto-generated method stub
        return this._GeometryIndexList;
    }
    
    public ISymbol getStyle()
    {
        return this._Style;
    }
    
    public lkSelectionType getType()
    {
        return this._Type;
    }
    
    public void setDataset(Dataset paramDataset)
    {
        this._Dataset = paramDataset;
    }
    
    public void setStyle(ISymbol paramISymbol)
      {
        this._Style = paramISymbol;
      }

    public int getCount() {
        // TODO Auto-generated method stub
        return this._GeometryIndexList.size();
    }

    public void setType(lkSelectionType paramlkSelectionType)
    {
        this._Type = paramlkSelectionType;
    }

}
View Code

Point.java

public class Point extends Geometry {
    
    public Point()
    {
        setStatus(lkGeometryStatus.enNormal);
        IsSimple(true);
    }
    
    public Point(double paramDouble1, double paramDouble2)
    {
        setItems(new ArrayList());
        getItems().add(new Coordinate(paramDouble1, paramDouble2));
        InitPoint();
    }
    
    public Point(List<Coordinate> paramList)
    {
        setItems(paramList);
        InitPoint();
    }
    
    public Point(Coordinate paramCoordinate)
    {
        setItems(new ArrayList());
        getItems().add(paramCoordinate);
        InitPoint();
    }
    
    private void InitPoint()
    {
        setStatus(lkGeometryStatus.enNormal);
        if(PartCount() == 1)
        {
            IsSimple(true);
            return;
        }
        IsSimple(false);
    }
    

    @Override
    public List<Integer> CalCellIndex() {
        // TODO Auto-generated method stub
        ArrayList localArrayList = new ArrayList();
        Param localParam1 = new Param();
        Param localParam2 = new Param();
        int i;
        int j;
        Iterator localIterator = getItems().iterator();
        
        for(;;)
        {
            if(IsSimple())
            {
                StaticObject.soMapCellIndex.CalCellIndex((Coordinate)getItems().get(0), localParam1, localParam2);
                i = localParam1.getInt();
                j = localParam2.getInt();
                localArrayList.add(Integer.valueOf(StaticObject.soMapCellIndex.getCells()*i + j));
                return localArrayList;
            }
            while(localIterator.hasNext())
            {
                Coordinate localCoordinate = (Coordinate)localIterator.next();
                StaticObject.soMapCellIndex.CalCellIndex(localCoordinate, localParam1, localParam2);
                i = localParam1.getInt();
                j = localParam2.getInt();
                localArrayList.add(Integer.valueOf(StaticObject.soMapCellIndex.getCells()*i + j));
            }
            return localArrayList;
        }
        
        /*
        if(IsSimple())
        {
            StaticObject.soMapCellIndex.CalCellIndex((Coordinate)getItems().get(0), localParam1, localParam2);
            i = localParam1.getInt();
            j = localParam2.getInt();
            localArrayList.add(Integer.valueOf(StaticObject.soMapCellIndex.getCells() * i + j));
        }
        for(;;)
        {
            Iterator localIterator = getItems().iterator();
            while(localIterator.hasNext())
            {
                Coordinate localCoordinate = (Coordinate)localIterator.next();
                StaticObject.soMapCellIndex.CalCellIndex(localCoordinate, localParam1, localParam2);
                i = localParam1.getInt();
                j = localParam2.getInt();
                localArrayList.add(Integer.valueOf(StaticObject.soMapCellIndex.getCells()*i + j));
            }
            return localArrayList;
        }
        */
    }

    @Override
    public Geometry Clone() {
        // TODO Auto-generated method stub
        ArrayList localArrayList = new ArrayList();
        Iterator localIterator = GetAllCoordinateList().iterator();
        for(;;)
        {
            if(!localIterator.hasNext()){
                return new Point(localArrayList);
            }
            localArrayList.add(((Coordinate)localIterator.next()).Clone());
        }
    }
    
    public double DistanceTo(Coordinate paramCoordinate)
    {
        double d2;
        if(IsSimple())
        {
            d2 = Tools.GetTwoPointDistance((Coordinate)getItems().get(0), paramCoordinate);
            return d2;
        }
        double d1 = 1.7976931348623157E+308D;
        Iterator localIterator = getItems().iterator();
        for(;;)
        {
            d2 = d1;
            if(!localIterator.hasNext()){
                break;
            }
            d2 = Tools.GetTwoPointDistance((Coordinate)localIterator.next(), paramCoordinate);
            if(d2 < d1){
                d1 = d2;
            }
        }
        return d1;
    }
    
    public List<Coordinate> GetAllPartCoordinate()
    {
        return getItems();
    }
    
    public Coordinate GetPart(int paramInt)
    {
        return (Coordinate)getItems().get(paramInt);
    }

    @Override
    public lkGeoLayerType GetType() {
        // TODO Auto-generated method stub
        return lkGeoLayerType.enPoint;
    }

    @Override
    public boolean HitTest(Coordinate paramCoordinate, double paramDouble) {
        // TODO Auto-generated method stub
        return DistanceTo(paramCoordinate) <= paramDouble;
    }

    @Override
    public boolean Offset(double paramDouble1, double paramDouble2) {
        // TODO Auto-generated method stub
        return false;
    }
    
    public int PartCount()
    {
        return getItems().size();
    }
    
    public double getX()
    {
        return ((Coordinate)getItems().get(0)).getX();
    }
  
    public double getY()
    {
        return ((Coordinate)getItems().get(0)).getY();
    }
    
    public void setX(double paramDouble)
    {
        ((Coordinate)getItems().get(0)).setX(paramDouble);
    }
    
    public void setY(double paramDouble)
    {
        ((Coordinate)getItems().get(0)).setY(paramDouble);
    }
}
View Code

Polyline.java 多线

public class Polyline extends Geometry {
    private double _Length = -1.0D; //长度
    private List<Integer> _PartIndex = new ArrayList(); //线段索引
    private SpatialRelation _SpatialRelation = null; //空间关系
    
    public Polyline()
    {
        setStatus(lkGeometryStatus.enNormal);
        IsSimple(true);
    }
    
    private double CalLength()//计算总长度
    {
        return CalLengthToVertex(getVertexList().size() - 1); 
    }
    
    private void DoIndexList(List<Integer> paramList, int paramInt)
    {
        if(paramList.indexOf(Integer.valueOf(paramInt))<0){ //如果paramInt的值不存在就加入
            paramList.add(Integer.valueOf(paramInt));
        }
    }
    
    private List<Coordinate> Douglas_Peuker(List<Coordinate> paramList1, List<Coordinate> paramList2, int paramInt1,
            int paramInt2, double paramDouble) //道格拉斯-普克算法,用于精简点的数量,各参数含义:paramDouble为抽稀精度,paramList1为坐标数列
    {
        if(Math.abs(paramInt1 - paramInt2)<2){}
        Param localParam = new Param();
        int i = 0;
        i = FindFurthestPt(paramList2, paramInt1, paramInt2, localParam); //i为最远的点,为paramInt1?
        if(localParam.getDouble() <= paramDouble) //如果小于抽稀精度,表示精简完成
        {
            return paramList1;
        }
        Douglas_Peuker(paramList1, paramList2, paramInt1, i, paramDouble); //自循环,分成两段,左半段
        paramList1.add(((Coordinate)paramList2.get(i)).Clone()); //添加克隆点
        Douglas_Peuker(paramList1, paramList2, i, paramInt2, paramDouble); //自循环,分成两段,右半段
        return paramList1;
    }
    
    private int FindFurthestPt(List<Coordinate> paramList, int paramInt1, int paramInt2, Param paramParam)
    {
        return paramInt1;
    }
    
    public void AddPart(List<Coordinate> paramList)
    {
        if((this._PartIndex == null)&&(getItems().size() == 0))
        {
            setItems(paramList);
            IsSimple(true);
            return;
        }
        int i = getItems().size();
        Iterator<Coordinate> paramList2 = paramList.iterator();
        for(;;)
        {
            if(!paramList2.hasNext())
            {
                IsSimple(false);
                if(this._PartIndex == null)
                {
                    this._PartIndex = new ArrayList();
                    this._PartIndex.add(Integer.valueOf(0));
                }
                this._PartIndex.add(Integer.valueOf(i));
                return;
            }
            Coordinate localCoordinate = (Coordinate)paramList2.next();
            getItems().add(localCoordinate);
        }
    }
    
    @Override
    public List<Integer> CalCellIndex() {
        // TODO Auto-generated method stub
        Param localParam1 = new Param();
        Param localParam2 = new Param();
        Param localParam3 = new Param();
        Param localParam4 = new Param();
        Param localParam5 = new Param();
        Param localParam6 = new Param();
        ArrayList localArrayList1 = new ArrayList();
        ArrayList localArrayList2 = new ArrayList();
        int m=0;
        for(;;)
        {
            Coordinate localCoordinate = (Coordinate)getVertexList().get(m);
            Object localObject = (Coordinate)getVertexList().get(m+1);
            StaticObject.soMapCellIndex.CalCellIndex(localCoordinate, localParam1, localParam2); //计算点localCoordinate的CellIndex
            StaticObject.soMapCellIndex.CalCellIndex((Coordinate)localObject, localParam3, localParam4); //计算localObject的CellIndex
            int i = localParam1.getInt(); //localCoordinate的x
            int j = localParam2.getInt(); //localCoordinate的y
            int i2 = localParam3.getInt(); //localObject的x
            int i3 = localParam4.getInt(); //localObject的y
            if(m >= getVertexList().size() - 1){ //如果已遍历结束返回localArrayList1(CellIndex数列)
                return localArrayList1;
            }
            if((i == i2)||(j == i3)) //如果m和m+1的x或者y索引一样
            {
                if(i == i2){ //如果i==i2 x值相等
                    if(j > i3){ //而j>i3 y值
                        DoIndexList(localArrayList1, StaticObject.soMapCellIndex.getCells() * i + j); //加入i,j的CellIndex
                        j -= 1;
                        if(j >= i3){}
                    }
                    if(j <= i3){
                        DoIndexList(localArrayList1, StaticObject.soMapCellIndex.getCells() * i + j);
                        j += 1;
                    }
                }
                if(i > i2){ //j==i3
                    if(i >= i2){
                        DoIndexList(localArrayList1, StaticObject.soMapCellIndex.getCells() * i + j);
                        i -= 1;
                    }
                }
                else{ //i<i2 j==i3
                    if(i <= i2){
                        DoIndexList(localArrayList1, StaticObject.soMapCellIndex.getCells() * i + j);
                           i += 1;
                    }
                }
                
            }
            //否则i不等于i2,j也不等于i3
            
            double d4 = (((Coordinate)localObject).getY() - localCoordinate.getY())/(((Coordinate)localObject).getX() - localCoordinate.getX());
            double d5 = StaticObject.soMapCellIndex.getCellWidth();
            double d6 = StaticObject.soMapCellIndex.getCellHeigth();
            localArrayList2.clear();
            int i1 = 1;
            int k = 1;
            int n = 0;
            //label444://有循环?
            double d2;
            double d1;
            double d3;
            if(Math.abs(i3 - j)>Math.abs(i2 - i))
            {
                n = j;
                for(;;)
                {
                    k = 1;
                    if(n >= i3){
                        break;
                    }
                    localArrayList2.add(Integer.valueOf(n));
                    n += 1;
                }
                localArrayList2.add(Integer.valueOf(n));
                if(j > i3)
                {
                    n = j;
                    if(n <= i3)
                    {
                        DoIndexList(localArrayList1, StaticObject.soMapCellIndex.getCells() * i + j);
                        localObject = localArrayList2.iterator();
                    }
                }
                for(;;)
                {
                    if(!((Iterator)localObject).hasNext())
                    {
                        DoIndexList(localArrayList1, StaticObject.soMapCellIndex.getCells()*i2 + i3);
                        break;
                    }
                    j = ((Integer)((Iterator)localObject).next()).intValue();
                    d2 = 0.0D;
                    i = 1;
                    while(i<=2)
                    {
                        d1 = d2;
                        if(i == 1)
                        {
                            d1 = d2;
                            if(k != 0){
                                d1 = (j + 1)*d5 - 1.0D;
                            }
                        }
                        d2 = d1;
                        if(i == 2)
                        {
                            d2 = d1;
                            if(k != 0){
                                d2 = (j + 1)*d5 + 1.0D;
                            }
                        }
                        d3 = d2;
                        if(i == 1)
                        {
                            d3 = d2;
                            if(k == 0){
                                d3 = j * d5 + 1.0D;
                            }
                        }
                        d1 = d3;
                        if(i == 2)
                        {
                            d1 = d3;
                            if(k == 0){
                                d1 = j * d5 - 1.0D;
                            }
                        }
                        d2 = d1 + StaticObject.soMapCellIndex.getBigCell().getMinX();
                        d3 = localCoordinate.getY();
                        d6 = localCoordinate.getX();
                        StaticObject.soMapCellIndex.CalCellIndex(new Coordinate(d2, d3 + (d2 - d6)*d4), localParam5, localParam6);
                        n = localParam5.getInt();
                        i1 = localParam6.getInt();
                        DoIndexList(localArrayList1, StaticObject.soMapCellIndex.getCells() * n + i1);
                        i += 1;
                        d2 = d1;
                    }
                    
                }
            }
            
            n = i;
            for(;;)
            {
                k = 1;
                if(n >= i2){
                    break;
                }
                localArrayList2.add(Integer.valueOf(n));
                n += 1;
            }
            if(i > i2)
            {
                n = i;
                k = i1;
                if(n <= i2) //i<=i2
                {
                    DoIndexList(localArrayList1, StaticObject.soMapCellIndex.getCells() * i + j);
                    localObject = localArrayList2.iterator();
                    k = 0;
                    n -= 1;
                }
                localArrayList2.add(Integer.valueOf(n));
            }
            for(;;)
            {
                if(!((Iterator)localObject).hasNext())
                {
                    DoIndexList(localArrayList1, StaticObject.soMapCellIndex.getCells()*i2 + i3);
                    break;
                }
                j = ((Integer)((Iterator)localObject).next()).intValue();
                d2 = 0.0D;
                i = 1;
                while(i <= 2)
                {
                    d1 = d2;
                    if(i == 1)
                    {
                        d1 = d2;
                        if(k != 0){
                            d1 = (j + 1)*d6 - 1.0D;
                        }
                    }
                    d2 = d1;
                    if(i == 2)
                    {
                        d2 = d1;
                        if(k != 0){
                            d2 = (j + 1)*d6 + 1.0D;
                        }
                    }
                    d3 = d2;
                    if(i == 1)
                    {
                        d3 = d2;
                        if(k == 0){
                            d3 = j * d6 + 1.0D;
                        }
                    }
                    d1 = d3;
                    if(i == 2)
                    {
                        d1 = d3;
                        if(k == 0){
                            d1 = j * d6 - 1.0D;
                        }
                    }
                    d2 = d1 + StaticObject.soMapCellIndex.getBigCell().getMinY();
                    d3 = -(localCoordinate.getY() - d2)/d4;
                    d5 = localCoordinate.getX();
                    StaticObject.soMapCellIndex.CalCellIndex(new Coordinate(d3 + d5, d2), localParam5, localParam6);
                    n = localParam5.getInt();
                    i1 = localParam6.getInt();
                    DoIndexList(localArrayList1, StaticObject.soMapCellIndex.getCells() * n + i1);
                    i += 1;
                    d2 = d1;
                }
            }
            
            m += 1; //循环变量
            
            continue;
        }
        
    }
    
    public double CalLengthToVertex(int paramInt)
    {
        double d = 0.0D;
        int i = 0;
        for(;;)
        {
            if(i >= paramInt){
                return d;
            }
            d += Tools.GetTwoPointDistance((Coordinate)getVertexList().get(i),(Coordinate)getVertexList().get(i + 1));
            i += 1;
        }
    }
    
    public double CalLengthToVertex(Coordinate paramCoordinate)
    {
        int i = 0;
        Iterator localIterator = getVertexList().iterator();
        for(;;)
        {
            if (!localIterator.hasNext()) {}
            Coordinate localCoordinate;
            do
            {
                int j = i;
                if(i == getVertexList().size()){
                    j = 0;
                }
                localCoordinate = (Coordinate)localIterator.next();
                return CalLengthToVertex(j);
            }while((Math.abs(localCoordinate.getX() - paramCoordinate.getX()) < 1.0D) && 
                    (Math.abs(localCoordinate.getY() - paramCoordinate.getY()) < 1.0D));
            //i += 1;
        }
    }
    
    //public Geometry
    
    public boolean CheckCorner(List<Coordinate> paramList)
    {
        boolean bool = true;
        int j = GetAllCoordinateList().size();
        int i = 0;
        for(;;)
        {
            if(i >= j - 2){
                return bool;
            }
            if(Tools.AngleB((Coordinate)GetAllCoordinateList().get(i), (Coordinate)GetAllCoordinateList().get(i+1),
                    (Coordinate)GetAllCoordinateList().get(i+2))<90.0D )
            {
                paramList.add(((Coordinate)GetAllCoordinateList().get(i+1)).Clone());
                bool = false;
            }
            i += 1;
        }
    }
    
    @Override
    public Geometry Clone() {
        // TODO Auto-generated method stub
        Polyline localPolyline = new Polyline();
        Iterator localIterator = GetAllCoordinateList().iterator();
        for(;;)
        {
            if(!localIterator.hasNext())
            {
              localPolyline.setID(getID());
              return localPolyline;
            }
            Coordinate localCoordinate = (Coordinate)localIterator.next();
            localPolyline.GetAllCoordinateList().add(localCoordinate.Clone());
        }
        //return null;
    }

    
    public int CompressPolylineDouglas(double paramDouble) //压缩?
    {
        int i = GetAllCoordinateList().size();
        List localList = CompressPolylineDouglas(GetAllCoordinateList(), paramDouble);
        setVertexList(localList);
        return i - localList.size();
    }
    
    public List<Coordinate> CompressPolylineDouglas(List<Coordinate> paramList, double paramDouble)
    {
        int j = paramList.size() - 1;
        int i = paramList.size() - 1;
        //label29:
        Object localObject = null;
        if(i < 0)
        {
            i = j;
            localObject = new ArrayList();
            ((List)localObject).add(((Coordinate)paramList.get(0)).Clone());
            localObject = Douglas_Peuker((List)localObject, paramList, 0, i, paramDouble);
        }
        for(;;)
        {
            if(i > paramList.size() - 1)
            {
                if(!((Coordinate)paramList.get(0)).Equal((Coordinate)paramList.get(i))){
                    break;
                }
                i -= 1;
                break;
            }
            ((List)localObject).add(((Coordinate)paramList.get(i)).Clone());
            i += 1;
        }
        return (List)localObject;
    }
    
    public boolean Flip()
    {
      return true;
    }
    
    public List<Coordinate> GetPartAt(int paramInt)
    {
        Object localObject;
        if(IsSimple())
        {
            localObject = getItems();
            return (List<Coordinate>) localObject;
        }
        ArrayList localArrayList = new ArrayList();
        int j = ((Integer)this._PartIndex.get(paramInt)).intValue();
        int i = getItems().size() - 1;
        if(paramInt != this._PartIndex.size() - 1){
            i = ((Integer)this._PartIndex.get(paramInt + 1)).intValue() - 1;
        }
        paramInt = j;
        for(;;)
        {
            localObject = localArrayList;
            if(paramInt > i){
                break;
            }
            localArrayList.add((Coordinate)getItems().get(paramInt));
            paramInt += 1;
        }
        return localArrayList;
    }
    
    public boolean GetToStartCoordinate(double paramDouble, Param paramParam, Coordinate paramCoordinate)
    {
        double d = 0.0D;
        int i = 0;
        for(;;)
        {
            if(i > getVertexList().size() - 2)
            {
                paramParam.setValue(-1);
                return false;
            }
            paramCoordinate = (Coordinate)getVertexList().get(i);
            Coordinate localCoordinate = (Coordinate)getVertexList().get(i + 1);
            d += Tools.GetTwoPointDistance(paramCoordinate, localCoordinate);
            if(d >= paramDouble)
            {
                new Line(paramCoordinate, localCoordinate).GetToStartCoordinate(d - paramDouble);
                paramParam.setValue(i);
                return true;
            }
            i += 1;
        }
    }
    
    public boolean GetToStartDistance(Coordinate paramCoordinate, double paramDouble, Param paramParam)
    {
        double d3 = 0.0D;
        double d1 = 0.0D;
        Param localParam = new Param();
        int i = 0;
        for(;;)
        {
            if(i > getVertexList().size() - 2)
            {
                paramParam.setValue(0.0D);
                return false;
            }
            double d2 = d1;
            if(i >= 1){
                d2 = d1 + d3;
            }
            Line localLine = new Line((Coordinate)getVertexList().get(i), (Coordinate)getVertexList().get(i+1));
            d3 = localLine.Length();
            if(localLine.PointToLineDistance(paramCoordinate, paramDouble, localParam))
            {
                paramParam.setValue(d2 + localParam.getDouble());
                return true;
            }
            i += 1;
            d1 = d2;
        }
    }

    @Override
    public lkGeoLayerType GetType() {
        // TODO Auto-generated method stub
        return lkGeoLayerType.enPolyline;
    }

    @Override
    public boolean HitTest(Coordinate paramCoordinate, double paramDouble) {
        // TODO Auto-generated method stub
        return HitTestSegment(paramCoordinate, paramDouble, new Param());
    }
    
    public boolean HitTestSegment(Coordinate paramCoordinate, double paramDouble, Param paramParam)
    {
        paramParam.setValue(-1);
        if(!getEnvelope().ContainsPoint(paramCoordinate)){}
        for(;;)
        {
            int i = 0;
            while(i<=getVertexList().size() - 2)
            {
                paramParam.setValue(i);
                if(new Line((Coordinate)getVertexList().get(i), (Coordinate)getVertexList().get(i+1)).PointToLineDistance(paramCoordinate,
                        paramDouble))
                {
                    return true;
                }
                i += 1;
            }
        }
        //return false;
    }
    
    public boolean HitTestSegment(Coordinate paramCoordinate, Param paramParam)
    {
        paramParam.setValue(-1);
        int i = 0;
        for(;;)
        {
            if(i > getVertexList().size() - 2){
                return false;
            }
            paramParam.setValue(i);
            if(new Line((Coordinate)getVertexList().get(i), (Coordinate)getVertexList().get(i+1)).PointOnLine(paramCoordinate)){
                return true;
            }
            i += 1;
        }
    }
    
    public boolean HitVertexTest(Coordinate paramCoordinate, double paramDouble, Param paramParam)
    {
        int j = -1;
        double d1 = 1.7976931348623157E+308D;
        int i = 0;
        for(;;)
        {
            if(i >= getVertexList().size())
            {
                paramParam.setValue(j);
                if(d1 > paramDouble){
                    break;
                }
                return true;
            }
            double d3 = Tools.GetTwoPointDistance(paramCoordinate, (Coordinate)getVertexList().get(i));
            double d2 = d1;
            if(d3 < d1)
            {
                d2 = d3;
                j = i;
            }
            i += 1;
            d1 = d2;
        }
        paramParam.setValue(-1);
        return false;
    }
    
    public int InVertexList(Coordinate paramCoordinate)
    {
        if(!getEnvelope().ContainsPoint(paramCoordinate)){
            return -1;
        }
        int i = -1;
        Iterator localIterator = GetAllCoordinateList().iterator();
        Coordinate localCoordinate;
        int j;
        do
        {
            if(!localIterator.hasNext()){
                return -1;
            }
            localCoordinate = (Coordinate)localIterator.next();
            j = i + 1;
            i = j;
        }while(!localCoordinate.Equal(paramCoordinate));
        return j;
    }
    
    public void InsertPartAt(int paramInt, List<Coordinate> paramList){}
    
    public boolean Insersect(Polyline paramPolyline, List<Coordinate> paramList)
    {
        if((!getEnvelope().Intersect(paramPolyline.getEnvelope()))&&(!getEnvelope().Contains(paramPolyline.getEnvelope()))){
            return false;
        }
        int k = GetAllCoordinateList().size();
        int m = paramPolyline.GetAllCoordinateList().size();
        int i = 0;
        if(i > k - 2)
        {
            if(paramList.size() > 0){
                return true;
            }
        }
        else
        {
            Line localLine1 = new Line((Coordinate)GetAllCoordinateList().get(i), (Coordinate)GetAllCoordinateList().get(i+1));
            int j = 0;
            for(;;)
            {
                if(j > m-2)
                {
                    i += 1;
                    break;
                }
                Line localLine2 = new Line((Coordinate)paramPolyline.GetAllCoordinateList().get(j), (Coordinate)paramPolyline.GetAllCoordinateList().get(j + 1));
                if(localLine1.Intersect(localLine2))
                {
                    Coordinate localCoordinate1 = new Coordinate();
                    Coordinate localCoordinate2 = new Coordinate();
                    int n = localLine1.Intersect(localLine2, localCoordinate1, localCoordinate2);
                    if(n == 1){
                        paramList.add(localCoordinate1.Clone());
                    }
                    if(n == 2)
                    {
                        paramList.add(localCoordinate1.Clone());
                        paramList.add(localCoordinate2.Clone());
                    }
                }
                j += 1;
            }
        }
        return false;
    }

    @Override
    public boolean Offset(double paramDouble1, double paramDouble2) {
        // TODO Auto-generated method stub
        return true;
    }

    public void RemovePartAt(int paramInt){}
    
    public void SetPartAt(int paramInt, List<Coordinate> paramList){}
    
    public boolean Split(Coordinate paramCoordinate, int paramInt, Polyline paramPolyline1, Polyline paramPolyline2)
    {
        paramPolyline1 = new Polyline();
        paramPolyline2 = new Polyline();
        int i = 0;
        if(i >= getVertexList().size())
        {
            paramPolyline1.getVertexList().add(paramCoordinate.Clone());
            paramPolyline2.getVertexList().add(0, paramCoordinate.Clone());
            return true;
        }
        if(i <= paramInt){
            paramPolyline1.getVertexList().add(((Coordinate)getVertexList().get(i)).Clone());
        }
        for(;;)
        {
            paramPolyline2.getVertexList().add(((Coordinate)getVertexList().get(i)).Clone());
            i += 1;
            break;
        }
        return false;
    }
    
    public Coordinate getEndPoint()
    {
        int i = GetAllCoordinateList().size();
        return (Coordinate)GetAllCoordinateList().get(i - 1);
    }
    
    public double getLength(boolean paramBoolean)
    {
        if(paramBoolean){
            this._Length = CalLength();
        }
        if(this._Length == -1.0D){
            this._Length = CalLength();
        }
        return this._Length;
    }
    
    public int getPartCount()
    {
        return this._PartIndex.size();
    }
    
    public List<Integer> getPartIndex()
    {
        return this._PartIndex;
    }
    
    public SpatialRelation getSpatialRelation()
    {
        if(this._SpatialRelation == null){
            this._SpatialRelation = new SpatialRelation(this);
        }
        return this._SpatialRelation;
    }
    
    public Coordinate getStartPoint()
    {
        return (Coordinate)GetAllCoordinateList().get(0);
    }
    
    public List<Coordinate> getVertexList() //获取节点列表,坐标_CoorList
    {
        if(getItems() == null){
            setItems(new ArrayList());
        }
        return getItems();
    }
    
    public void setPartIndex(List<Integer> paramList)
    {
        this._PartIndex = paramList;
    }
    
    public void setVertexList(List<Coordinate> paramList)
    {
        setItems(paramList);
    }
}
View Code

Polygon.java 继承自Geometry

Geometry.java 几何图形 (abstract抽象类)

public abstract class Geometry {
  private List<Coordinate> _CoorList = null;
  private boolean _Edited = false;
  private Envelope _Envelope;
  private String _ID;
  private int _Index;
  private boolean _IsSimple = true;
  private lkGeometryStatus _Status = lkGeometryStatus.enNormal;
  private ISymbol _Symbol = null;
  private String _Tag = "";
  
  public abstract List<Integer> CalCellIndex();
  
  public Envelope CalEnvelope()
  {
      double d3 = 0.0D;
      double d2 = 0.0D;
      double d4 = 0.0D;
      double d1 = 0.0D;
      int i = 0;
      for(;;)
      {
          if(i >= getItems().size()){
              return new Envelope(d3, d1, d4, d2);
          }
          Coordinate localCoordinate = (Coordinate)getItems().get(i);
          double d6 = d3;
          double d5 = d4;
          if(i == 0)
          {
              d6 = localCoordinate.getX();
              d2 = localCoordinate.getY();
              d5 = d6;
              d1 = d2;
          }
          d3 = d6;
          if(d6 > localCoordinate.getX()){
              d3 = localCoordinate.getX();
          }
          d4 = d5;
          if(d5 < localCoordinate.getX()){
              d4 = localCoordinate.getX();
          }
          d5 = d2;
          if(d2 > localCoordinate.getY()){
              d5 = localCoordinate.getY();
          }
          d2 = d1;
          if(d1 < localCoordinate.getY()){
              d2 = localCoordinate.getY();
          }
          i+=1;
          d1 = d2;
          d2 = d5;
      }
  }
  
  public abstract Geometry Clone();
  
  public List<Coordinate> GetAllCoordinateList()
  {
      return getItems();
  }
  
  public boolean GetEdited()
  {
    return this._Edited;
  }
  
  public abstract lkGeoLayerType GetType();
  
  public abstract boolean HitTest(Coordinate paramCoordinate, double paramDouble);
  
  public boolean IsNull()
  {
      if(this._CoorList == null){}
      while(this._CoorList.size()==0){
          return true;
      }
      return false;
  }
  
  public void IsSimple(boolean paramBoolean)
  {
      this._IsSimple = paramBoolean;
  }
  
  public boolean IsSimple()
  {
    return this._IsSimple;
  }
  
  public abstract boolean Offset(double paramDouble1, double paramDouble2);
  
  public void SetAllCoordinateList(List<Coordinate> paramList)
  {
      setItems(paramList);
  }
  
  public void SetEdited(boolean paramBoolean)
  {
    this._Edited = paramBoolean;
  }
  
  public void SetNull()
  {
    this._CoorList = null;
  }
  
  public void UpdateCoordinate(double paramDouble1, double paramDouble2)
  {
      Iterator localIterator = getItems().iterator();
      for(;;)
      {
          if(!localIterator.hasNext())
          {
              this._Envelope = null;
              return;
          }
          Coordinate localCoordinate = (Coordinate)localIterator.next();
          localCoordinate.setX(localCoordinate.getX() + paramDouble1);
          localCoordinate.setY(localCoordinate.getY() + paramDouble2);
      }
      
  }
  
  public void UpdateEnvelope()
  {
      this._Envelope = CalEnvelope();
  }
  
  public Envelope getEnvelope()
  {
      if(this._Envelope == null){
          UpdateEnvelope();
      }
      return this._Envelope;
  }
  
  public String getID()
  {
    return this._ID;
  }
  
  public int getIndex()
  {
    return this._Index;
  }
  
  protected List<Coordinate> getItems()
  {
    if (this._CoorList == null) {
      this._CoorList = new ArrayList();
    }
    return this._CoorList;
  }
  
  public lkGeometryStatus getStatus()
  {
    return this._Status;
  }
  
  public ISymbol getSymbol()
  {
    return this._Symbol;
  }
  
  public String getTag()
  {
      return this._Tag;
  }
  
  public void setEnvelope(Envelope paramEnvelope)
  {
    this._Envelope = paramEnvelope;
  }
  
  public void setID(String paramString)
  {
    this._ID = paramString;
  }
  
  public void setIndex(int paramInt)
  {
    this._Index = paramInt;
  }
  
  protected void setItems(List<Coordinate> paramList)
  {
    this._CoorList = paramList;
  }
  
  public void setStatus(lkGeometryStatus paramlkGeometryStatus)
  {
    this._Status = paramlkGeometryStatus;
  }
  
  public void setSymbol(ISymbol paramISymbol)
  {
    this._Symbol = paramISymbol;
  }
  
  public void setTag(String paramString)
  {
    this._Tag = paramString;
  }
  
  public static class dd {}

}
View Code

 GridLayer.java 格网图层

public class GridLayer {
    private Map Map = null;
    private List<Tile> _CacheList = new ArrayList();
    private String _GridDataFileName = "";
    private GridPad _GridPad = new GridPad(null);
    private boolean _IfLoadGrid = false;
    private List<Double> _LevelScale = new ArrayList();
    private OverMapSQLiteDataBase _SQLiteDB = null;
    private boolean _ShowGrid = true;

    public GridLayer(Map paramMap) {
        // TODO Auto-generated constructor stub
        this.Map = paramMap;
    }
    
    private int GetCurrentLevel(double paramDouble)
    {
        double d1 = 1.7976931348623157E+308D;
        int j = -1;
        int i = 0;
        for(;;)
        {
            if(i >= this._LevelScale.size()){
                return j;
            }
            double d3 = Math.abs(((Double)this._LevelScale.get(i)).doubleValue() - paramDouble);
            double d2 = d1;
            if(d3 < d1)
            {
                j = i;
                d2 = d3;
            }
            i += 1;
            d1 = d2;
        }
    }
    
    private OverMapSQLiteDataBase getSQLiteDB()
    {
        if(this._SQLiteDB == null){
            this._SQLiteDB = new OverMapSQLiteDataBase();
        }
        return this._SQLiteDB;
    }

    public void FastRefresh() {
        // TODO Auto-generated method stub
        Iterator localIterator = this._CacheList.iterator();
        for(;;)
        {
            if(!localIterator.hasNext()){
                return;
            }
            Log.d("GridLayer", "Refresh next");
            Tile localTile = (Tile)localIterator.next();
            PointF localPointF1 = this.Map.getViewConvert().MapToScreenF(localTile.LT_X, localTile.LT_Y);
            PointF localPointF2 = this.Map.getViewConvert().MapToScreenF(localTile.RB_X, localTile.RB_Y);
            this.Map.getDisplayGraphic().drawBitmap(localTile.TileBitmap, new Rect(0, 0, this._GridPad.TileSize,
                    this._GridPad.TileSize), new RectF(localPointF1.x, localPointF1.y, localPointF2.x,
                            localPointF2.y), null);
        }
    }
    
    public Envelope GetExtend()
    {
        if(this._IfLoadGrid){
            return this._GridPad.Extend;
        }
        return null;
    }
    
    public void Refresh()
    {
        if(!this._ShowGrid){Log.d("GridLayer", "Not Show Grid");}
        Log.d("GridLayer", "Show Grid");
        int n;
        Object localObject1;
        Object localObject2;
        Object localObject3;
        int i;
        int m;
        int i2;
        
        if(!this._IfLoadGrid)
        {
            Log.d("GridLayer", "Not Load Grid");
            return;
        }
        
        do
        {
            do
            {
                /*
                do
                {
                    //return;
                }while(!this._IfLoadGrid);
                */
                n = GetCurrentLevel(this.Map.ToMapDistance(1.0D));
                localObject1 = this.Map.getExtend();
                if (!this._GridPad.InCurrentView((Envelope)localObject1))
                {
                    this._CacheList.clear();
                    return;
                }
                localObject2 = this._GridPad.CalGridPosition(((Double)this._LevelScale.get(n)).doubleValue(), ((Envelope)localObject1).getLeftTop());
                localObject3 = this._GridPad.CalGridPosition(((Double)this._LevelScale.get(n)).doubleValue(), ((Envelope)localObject1).getRightBottom());
                localObject1 = UUID.randomUUID().toString();
                i = Integer.parseInt(localObject2.toString().split(",")[0]);
                m = Integer.parseInt(localObject2.toString().split(",")[1]);
                int i1 = Integer.parseInt(localObject3.toString().split(",")[0]);
                i2 = Integer.parseInt(localObject3.toString().split(",")[1]);
                localObject2 = new ArrayList();
                if(i <= i1){
                    break;
                }
                i = this._CacheList.size() - 1;
                if(i >= 0){
                    break;
                }
            }while(((List)localObject2).size() == 0);
            localObject1 = "L" + (n + 1);
            localObject1 = "select SYS_GEO, LT_X, LT_Y, RB_X, RB_Y, SYS_RC from " + (String)localObject1 + " where SYS_RC in ('"  + 
                Tools.JoinT("','", (List)localObject2) + "')";
            localObject1 = getSQLiteDB().Query((String)localObject1);
            //return;
        }while(localObject1 == null); //也许改为if?
        for(;;)
        {
            if(!((SQLiteDataReader)localObject1).Read())
            {
                ((SQLiteDataReader)localObject1).Close();
                //return;
                int j = m;
                if(j > i2)
                {
                    i += 1;
                    break;
                }
                int k = 0;
                localObject3 = this._CacheList.iterator();
                for(;;)
                {
                    if(!((Iterator)localObject3).hasNext())
                    {
                        if(k == 0){
                            ((List)localObject2).add(j + "-" + i);
                        }
                        j += 1;
                        break;
                    }
                    Tile localTile = (Tile)((Iterator)localObject3).next();
                    if(localTile.TileName.equals(n + "-" + j + "-" + i))
                    {
                        localTile.TileUniqueID = ((String)localObject1);
                        k = 1;
                    }
                }
                localObject3 = (Tile)this._CacheList.get(i);
                if(!((Tile)localObject3).TileUniqueID.equals(localObject1)){
                    this._CacheList.remove(localObject3);
                }
                i -= 1;
                break;
            }
            localObject2 = ((SQLiteDataReader)localObject1).GetString("SYS_RC");
            localObject3 = ((SQLiteDataReader)localObject1).GetBlob("SYS_GEO");
            double d1 = Double.parseDouble(((SQLiteDataReader)localObject1).GetString("LT_X"));
            double d2 = Double.parseDouble(((SQLiteDataReader)localObject1).GetString("LT_Y"));
            double d3 = Double.parseDouble(((SQLiteDataReader)localObject1).GetString("RB_X"));
            double d4 = Double.parseDouble(((SQLiteDataReader)localObject1).GetString("RB_Y"));
            Tile localTile = new Tile(null);
            localTile.LT_X = d1;
            localTile.LT_Y = d2;
            localTile.RB_X = d3;
            localTile.RB_Y = d4;
            localTile.TileName = (n + "-" + (String)localObject2);
            localTile.TileBitmap = BitmapFactory.decodeByteArray((byte[])localObject3, 0, ((byte[])localObject3).length);
            this._CacheList.add(localTile);
        }
    }
    
    public void SetGridDataFile(String paramString) //设置Grid数据文件
    {
        SQLiteDataReader paramString2;
        if(!Tools.ExistFile(paramString))
        {
            this._IfLoadGrid = false;
            this._CacheList.clear();
        }
        do
        {
            this._GridDataFileName = paramString;
            getSQLiteDB().setDatabaseName(this._GridDataFileName);
            this._IfLoadGrid = true;
            this._CacheList.clear();
            this._LevelScale.clear();
            paramString2 = getSQLiteDB().Query("select * from MapInfo");
        }while(paramString == null);
        if(!paramString2.Read())
        {
            paramString2.Close();
            return;
        }
        String str1 = paramString2.GetString("MaxLevel");
        String str2 = paramString2.GetString("Scale");
        int i = 1;
        for(;;)
        {
            if(i > Integer.parseInt(str1))
            {
                this._GridPad.TileSize = Integer.parseInt(paramString2.GetString("TileSize"));
                this._GridPad.SetExtend(Double.parseDouble(paramString2.GetString("Min_X")), Double.parseDouble(paramString2.GetString("Min_Y")),
                        Double.parseDouble(paramString2.GetString("Max_X")), Double.parseDouble(paramString2.GetString("Max_Y")));
                break;
            }
            this._LevelScale.add(0, Double.valueOf(Double.parseDouble(str2)*Math.pow(2.0D, i - 1)));
            i += 1;
        }
    }
    
    public void SetShowGrid(boolean paramBoolean)
    {
        this._ShowGrid = paramBoolean;
        if(!this._ShowGrid){
            this._CacheList.clear();
        }
    }
    
    public class GridPad{
        public Envelope Extend;
        private double MaxX;
        private double MaxY;
        private double MinX;
        private double MinY;
        public int TileSize = 256;
        
        private GridPad(){}
        
        public GridPad(Object object) {
            // TODO Auto-generated constructor stub
        }

        public String CalGridPosition(double paramDouble, Coordinate paramCoordinate)
        {
            paramDouble = this.TileSize * paramDouble;
            int n = (int)((this.MaxX - this.MinX)/paramDouble) + 1;
            int m = (int)((this.MaxY - this.MinY)/paramDouble) + 1;
            int j = (int)((paramCoordinate.getX() - this.MinX)/paramDouble);
            int k = (int)((this.MaxY - paramCoordinate.getY())/paramDouble);
            int i = j;
            if(j < 0){
                i = 0;
            }
            j = k;
            if(k < 0){
                j = 0;
            }
            k = i;
            if(i > n){
                k = n;
            }
            i = j;
            if(j > m){
                i = m;
            }
            return k + "," + i;
        }
        
        public boolean InCurrentView(Envelope paramEnvelope)
        {
            return paramEnvelope.Intersect(this.Extend);
        }
        
        public void SetExtend(double paramDouble1, double paramDouble2, double paramDouble3, double paramDouble4)
        {
            this.MinX = paramDouble1;
            this.MinY = paramDouble2;
            this.MaxX = paramDouble3;
            this.MaxY = paramDouble4;
            this.Extend = new Envelope(paramDouble1, paramDouble4, paramDouble3, paramDouble2);
        }
    }

    private class Tile
    {
        public double LT_X = 0.0D;
        public double LT_Y = 0.0D;
        public double RB_X = 0.0D;
        public double RB_Y = 0.0D;
        public Bitmap TileBitmap = null;
        public String TileName = "";
        public String TileUniqueID = "";
        
        private Tile(){}

        public Tile(Object object) {
            // TODO Auto-generated constructor stub
        }
    }
}
View Code

v1_project_layer.java 工程图层类

OverMap.java 覆盖地图类

public class OverMap{
  private Map Map = null;
  private int OffsetX = 0;
  private int OffsetY = 0;
  private double[] _LevelScale = new double[21];
  private OverMapDownloader _OverMapDownloader = null;
  private lkOverMapType _OverMapType = lkOverMapType.enGoogle_Satellite;
  public boolean _PanRefresh = false;
  private OverMapSQLiteDataBase _SQLiteDB = null;
  private boolean _ShowGrid = false;
  private String _TableName = "";
  private Bitmap _TileScaleBitmap = null;
  private Canvas _TileScaleCanvas = null;
}
View Code

 OverMapDownloader.java 覆盖地图下载器

 GPSLocate.java GPS定位类

public class GPSLocate {
    public boolean GPS_OpenClose = false;
    private GpsStatus.Listener gpsListener = new GpsStatus.Listener() { //GPS状态监听器
        
        @Override
        public void onGpsStatusChanged(int paramAnonymousInt) {
            // TODO Auto-generated method stub
            GPSLocate.this.m_GPSMap.UpdateGPSStatus(null);
        }
    };
    private final LocationListener locationListener = new LocationListener() //位置监听器
    {
        public void onLocationChanged(Location paramAnonymousLocation)
        {
            GPSLocate.this.m_Location = paramAnonymousLocation;
            GPSLocate.this.m_GPSMap.UpdateGPSStatus(GPSLocate.this.m_Location);
        }
        
        public void onProviderDisabled(String paramAnonymousString)
        {
            GPSLocate.this.m_GPSMap.GetGpsInfoManage().UpdateGPSStatus("不可用");
        }
        
        public void onProviderEnabled(String paramAnonymousString)
        {
            GPSLocate.this.m_GPSMap.GetGpsInfoManage().UpdateGPSStatus("可用");
        }
        
        public void onStatusChanged(String paramAnonymousString, int paramAnonymousInt, Bundle paramAnonymousBundle)
        {}
    };
    public Context m_Context;
    private GPSMap m_GPSMap = null;
    public LocationManager m_LTManager = null;
    public Location m_Location = null;
    public MapControl m_MapControl = null;

    public GPSLocate(MapControl paramMapControl) {
        // TODO Auto-generated constructor stub
        this.m_MapControl = paramMapControl;
        this.m_GPSMap = new GPSMap(this.m_MapControl);
        PubVar.m_GPSMap = this.m_GPSMap;
    }
    
    public boolean AlwaysFix()
    {
        if((this.m_LTManager == null)||(this.m_Location == null)){
            return false;
        }
        int i = 0;
        Iterator localIterator = this.m_LTManager.getGpsStatus(null).getSatellites().iterator();
        for(;;)
        {
            if(!localIterator.hasNext())
            {
                if((i < 4)||(this.m_Location.getAccuracy() <= 0.0F) || (this.m_Location.getAccuracy() > 30.0F)){
                    break;
                }
                return true;
            }
            if(((GpsSatellite)localIterator.next()).usedInFix()){
                i += 1;
            }
        }
        return GPS_OpenClose;
    }

    public boolean CloseGPS()
    {
        this.m_LTManager.removeUpdates(this.locationListener);
        this.m_LTManager.removeGpsStatusListener(this.gpsListener);
        this.GPS_OpenClose = false;
        this.m_GPSMap.UpdateGPSStatus(null);
        this.m_LTManager = null;
        return true;
    }
    
    public int GetLevelForAlwaysFix()
    {
        int i = 0;
        Iterator localIterator = this.m_LTManager.getGpsStatus(null).getSatellites().iterator(); //获取卫星数GpsSatellite
        
        /*
        do
        {
            if(!localIterator.hasNext()) //如果没有下一个
            {
                this.m_Location.getAccuracy();
                if(i!=0)
                {
                    break;
                }
            }
        }while(localIterator.hasNext());
        */
        
        for(;localIterator.hasNext();)
        {
            this.m_Location.getAccuracy();
            if(!((GpsSatellite)localIterator.next()).usedInFix()){ //如果不能用来Fix
                break;
            }
            i += 1;
        }
        
        if(i < 12)
        {
            if((i>=1)&&(i<=4)){
                return 1;
            }
            if((i>=5)&&(i<=7)){
                return 2;
            }
            if((i>=8)&&(i<=11)){
                return 3;
            }
        }
        else{
            return 4;
        }
        return 0;
        /*
        do
        {
            if(!localIterator.hasNext())
            {
                this.m_Location.getAccuracy();
                if(i != 0){
                    break;
                }
            }
            if(!((GpsSatellite)localIterator.next()).usedInFix()){
                break;
            }
            i += 1;
            if((i>=1)&&(i<=4)){
                return 1;
            }
            if((i>=5)&&(i<=7)){
                return 2;
            }
            if((i>=8)&&(i<=11)){
                return 3;
            }
            break;
            //return 0;
        }while(i < 12);
        return 4;
        */
    }
    
    public boolean OpenGPS()
    {
        this.m_LTManager = ((LocationManager)this.m_Context.getSystemService(Context.LOCATION_SERVICE)); //位置管理器赋值 "gps"
        Object localObject;
        Log.d("GPSLocate", "After location manager");
        if(!this.m_LTManager.isProviderEnabled("gps")) //如果位置管理器没有gps开启
        {
            Log.d("GPSLocate", "open gps");
            localObject = new AlertDialog.Builder(PubVar.m_DoEvent.m_Context);
            ((AlertDialog.Builder)localObject).setTitle("系统提示");
            ((AlertDialog.Builder)localObject).setMessage("获取精确的位置服务,需在位置设置中打开GPS,是否需要打开设置界面?");
            ((AlertDialog.Builder)localObject).setPositiveButton("确定", new DialogInterface.OnClickListener() {
                
                @Override
                public void onClick(DialogInterface paramAnonymousDialogInterface, int paramAnonymousInt) {
                    // TODO Auto-generated method stub
                    Intent localIntent = new Intent("android.settings.LOCATION_SOURCE_SETTINGS");
                    PubVar.m_DoEvent.m_Context.startActivity(localIntent);
                    paramAnonymousDialogInterface.dismiss();
                }
            });
            ((AlertDialog.Builder)localObject).setNegativeButton("取消", new DialogInterface.OnClickListener() {
                
                @Override
                public void onClick(DialogInterface paramAnonymousDialogInterface, int paramAnonymousInt) {
                    // TODO Auto-generated method stub
                    paramAnonymousDialogInterface.dismiss();
                }
            });
            ((AlertDialog.Builder)localObject).show();
            this.GPS_OpenClose = false;
            this.m_GPSMap.UpdateGPSStatus(null);
            return false;
        }//如果开启了的话
        localObject = new Criteria();
        ((Criteria)localObject).setAccuracy(Criteria.ACCURACY_FINE);
        ((Criteria)localObject).setAltitudeRequired(false);
        ((Criteria)localObject).setBearingRequired(false);
        ((Criteria)localObject).setCostAllowed(false);
        ((Criteria)localObject).setPowerRequirement(Criteria.POWER_LOW);
        this.m_LTManager.getBestProvider((Criteria)localObject, true);
        if(this.m_Location != null){
            this.m_GPSMap.UpdateGPSStatus(this.m_Location);
        }
        this.m_LTManager.requestLocationUpdates("gps", 1000L, 0.0F, this.locationListener);
        this.m_LTManager.addGpsStatusListener(this.gpsListener);
        this.GPS_OpenClose = true;
        this.m_GPSMap.UpdateGPSStatus(null);
        return true;
    }
    
    public float getAccuracy()
    {
        return this.m_Location.getAccuracy()/2.0F;
    }
    
    public String getGC()
    {
        return this.m_Location.getAltitude() + "0";
    }
    
    public Coordinate getGPSCoordinate()
    {
        return StaticObject.soProjectSystem.WGS84ToXY(this.m_Location.getLongitude(), this.m_Location.getLatitude(), 
                this.m_Location.getAltitude());
    }
    
    public String getGPSDate()
    {
        Date localDate = new Date(this.m_Location.getTime() + 86400L);
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(localDate);
    }
    
    public String[] getGPSDateForPhotoFormat()
    {
        String[] arrayOfString = getGPSDate().split(" ");
        arrayOfString[0] = arrayOfString[0].replaceAll("-", ":");
        arrayOfString[1] = (arrayOfString[1].replaceAll(":", "/1,") + "/1");
        return arrayOfString;
    }
    
    public String getGPSSpeed()
    {
        float f = this.m_Location.getSpeed();
        return new DecimalFormat("0.0").format(f * 3.6F).toString();
    }
    
    public String getJWGPSCoordinate()
    {
        DecimalFormat localDecimalFormat = new DecimalFormat("#.00000000");
        return localDecimalFormat.format(this.m_Location.getLongitude()) + "," + localDecimalFormat.format(this.m_Location.getLatitude());
    }
}
View Code

GPSMap.java

v1_CGpsInfoManage.java GPS信息管理器

public class v1_CGpsInfoManage {
    private ImageView _gps_close = null;
    private TextView _gps_jd = null;
    private ImageView _gps_open = null;
    private ImageView _gpsxh_0 = null;
    private ImageView _gpsxh_1 = null;
    private ImageView _gpsxh_2 = null;
    private ImageView _gpsxh_3 = null;
    private ImageView _gpsxh_4 = null;
    private ImageView _gpsxh_close = null;
    private TextView _mainheader_pos = null;
    private long m_BeforeTime = 0L;
    
    private String GetDDMM(double paramDouble)
    {
        int i = (int)Math.floor(paramDouble);
        double d = i;
        return i + "°" + Tools.ConvertToDigi(new StringBuilder(String.valueOf((paramDouble - d)*60.0D)).toString(), 6) + "″";
    }
    
    private String GetDDMMSS(double paramDouble)
    {
        int i = (int)Math.floor(paramDouble);
        paramDouble = (paramDouble - i) * 60.0D;
        int j = (int)Math.floor(paramDouble);
        String str = Tools.ConvertToDigi(String.valueOf((paramDouble - j) * 60.0D), 4);
        return i + "°" + j + "'" + str + "″";
    }

    public void SetHeaderViewBar(View paramView) {
        // TODO Auto-generated method stub
        this._mainheader_pos = (TextView)(paramView.findViewById(R.id.mainheader_pos)); //顶部坐标
        //Log.d("CGpsInfo", "afterpos");
        //this._mainheader_pos.setText(PubVar.m_HashMap.GetValueObject("Tag_System_TopXYFormat_Label").Value);
        this._mainheader_pos.setText("0,0,0");
        this._gps_jd = (TextView)paramView.findViewById(R.id.iv_gps_jd);
        this._gps_open = (ImageView)paramView.findViewById(R.id.iv_gpsopen);
        this._gps_close = (ImageView)paramView.findViewById(R.id.iv_gpsclose);
        this._gpsxh_close = (ImageView)paramView.findViewById(R.id.iv_gpsxh_close);
        this._gpsxh_0 = (ImageView)paramView.findViewById(R.id.iv_gpsxh0);
        this._gpsxh_1 = (ImageView)paramView.findViewById(R.id.iv_gpsxh1);
        this._gpsxh_2 = (ImageView)paramView.findViewById(R.id.iv_gpsxh2);
        this._gpsxh_3 = (ImageView)paramView.findViewById(R.id.iv_gpsxh3);
        this._gpsxh_4 = (ImageView)paramView.findViewById(R.id.iv_gpsxh4);
        SetInVisible();
        this._gps_close.setVisibility(View.VISIBLE);
        this._gpsxh_close.setVisibility(View.VISIBLE);
    }
    
    private void SetInVisible()
    {
        this._gps_open.setVisibility(View.GONE);
        this._gps_close.setVisibility(View.GONE);
        this._gpsxh_close.setVisibility(View.GONE);
        this._gpsxh_0.setVisibility(View.GONE);
        this._gpsxh_1.setVisibility(View.GONE);
        this._gpsxh_2.setVisibility(View.GONE);
        this._gpsxh_3.setVisibility(View.GONE);
        this._gpsxh_4.setVisibility(View.GONE);
    }

    public void UpdateGpsPosition(Coordinate paramCoordinate) {
        // TODO Auto-generated method stub
        String[] arrayOfString = PubVar.m_HashMap.GetValueObject("Tag_System_TopXYFormat_Code").Value.split("_");
        Object localObject2 = "";
        Object localObject1 = localObject2;
        if(arrayOfString[0].equals("GPS"))
        {
            localObject1 = localObject2;
            if(arrayOfString[1].equals("0")){
                localObject1 = "E:" + GetDDMMSS(paramCoordinate.getX()) + " N:" + GetDDMMSS(paramCoordinate.getY());
            }
            if(arrayOfString[1].equals("1")){
                localObject1 = "E:" + GetDDMMSS(paramCoordinate.getX()) + " N:" + GetDDMMSS(paramCoordinate.getY());
            }
            if(arrayOfString[1].equals("2")){
                localObject1 = "E:" + Tools.ConvertToDigi(new StringBuilder(String.valueOf(paramCoordinate.getX())).toString(), 6) +
                        "° N:" + Tools.ConvertToDigi(new StringBuilder(String.valueOf(paramCoordinate.getY())).toString(), 6) + "°";
            }
        }
        if(arrayOfString[0].equals("PROJECT"))
        {
            localObject1 = StaticObject.soProjectSystem.WGS84ToXY(paramCoordinate.getX(), paramCoordinate.getY(), paramCoordinate.getZ());
            localObject1 = "X:" + Tools.ConvertToDigi(new StringBuilder(String.valueOf(((Coordinate)localObject1).getX())).toString(), 3)
                    + " Y:" + Tools.ConvertToDigi(new StringBuilder(String.valueOf(((Coordinate)localObject1).getY())).toString(), 3);
        }
        localObject2 = localObject1;
        if(arrayOfString[2].equals("1")){
            localObject2 = localObject1 + " H:" + Tools.ConvertToDigi(new StringBuilder(String.valueOf(paramCoordinate.getZ())).toString(), 2);
        }
        this._mainheader_pos.setText((CharSequence)localObject2);
    }

    public void UpdateGPSStatus(String paramString) {
        // TODO Auto-generated method stub
        Log.d("v1_CGpsInfoManage", "Into UpdateGPSStatus");
        SetInVisible();
        this._gps_jd.setText("0.00m");
        
        //for(;;)
        //{
            if(paramString.equals("关闭"))
            {
                this._gps_close.setVisibility(View.VISIBLE);
                this._gpsxh_close.setVisibility(View.VISIBLE);
            }
            if(paramString.equals("已定位"))
            {
                this._gps_open.setVisibility(View.VISIBLE);
                int i = PubVar.m_GPSLocate.GetLevelForAlwaysFix();
                if(i == 0){
                    this._gpsxh_0.setVisibility(View.VISIBLE);
                }
                if(i == 1){
                    this._gpsxh_1.setVisibility(View.VISIBLE);
                }
                if(i == 2){
                    this._gpsxh_2.setVisibility(View.VISIBLE);
                }
                if(i == 3){
                    this._gpsxh_3.setVisibility(View.VISIBLE);
                }
                if (i == 4) {
                    this._gpsxh_4.setVisibility(View.VISIBLE);
                }
                this._gps_jd.setText(PubVar.m_GPSLocate.getAccuracy() + "m");
            }
            if(paramString.equals("定位中")) //实现闪烁的效果
            {
                /*
                new Thread()
                {
                    private long m_BeforeTime;
                    //private ImageView _gps_close = (ImageView)paramView.findViewById(R.id.iv_gpsclose);
                    
                    //重写run方法;
                    public void run()
                    {
                    */
                /*
                        for(;;)
                        {
                            long l = System.currentTimeMillis(); //当前时间
                            if(l - this.m_BeforeTime <= 2000L){
                                this._gps_open.setVisibility(View.GONE);
                                this._gps_close.setVisibility(View.VISIBLE);
                            }
                            else{
                                this._gps_open.setVisibility(View.VISIBLE);
                                this._gps_close.setVisibility(View.GONE);
                                this.m_BeforeTime = l;
                            }
                        }
                */
                    /*
                    }
                }.start();
                */
                
            }
            else{
                this._gpsxh_close.setVisibility(View.VISIBLE);
                return;
            }
            
        //}
    }

}
View Code

 v1_CGpsLine.java GPS线类

 v1_GPSSet.java GPS信息显示

public class v1_GPSSet {
  private v1_FormTemplate _Dialog = new v1_FormTemplate(PubVar.C);
  private Canvas m_BoundGraphics = null;
  private ICallback m_Callback = new ICallback()
  {
    public void OnClick(String paramAnonymousString, Object paramAnonymousObject)
    {
        if (paramAnonymousString.equals("退出"))
        {
            if(PubVar.m_GPSLocate.m_LTManager != null)
            {
                PubVar.m_GPSLocate.m_LTManager.removeGpsStatusListener(v1_GPSSet.this.statusListener);
                v1_GPSSet.this.m_SensorManager.unregisterListener(v1_GPSSet.this.sensorListener);
            }
            v1_GPSSet.this._Dialog.dismiss();
        }
        if(paramAnonymousString.equals("关闭GPS"))
        {
            PubVar.m_DoEvent.DoCommand(paramAnonymousString);
            v1_GPSSet.this.m_Callback.OnClick("退出", null);
        }
    }
  };
  private TextView m_GC = null;
  private Canvas m_Graphics = null;
  private ImageView m_ImgView = null;
  private ImageView m_ImgViewBound = null;
  private ImageView m_ImgViewSNR = null;
  private TextView m_JD = null;
  private TextView m_POS_JD = null;
  private TextView m_POS_ZT = null;
  private TextView m_SD = null;
  private Canvas m_SNRGraphics = null;
  private Sensor m_Sensor3 = null;
  private SensorManager m_SensorManager = null;
  private TextView m_WD = null;
  private float s_Angle = 0.0F;
  private SensorEventListener sensorListener = new SensorEventListener()
  {
    public void onAccuracyChanged(Sensor paramAnonymousSensor, int paramAnonymousInt){}

    @Override
    public void onSensorChanged(SensorEvent paramAnonymousSensorEvent) {
        // TODO Auto-generated method stub
        RotateAnimation paramAnonymousSensorEvent2;
        String paramAnonymousSensorEvent3;
        if(paramAnonymousSensorEvent.sensor.getType() == 3)
        {
            float f = paramAnonymousSensorEvent.values[0];
            paramAnonymousSensorEvent2 = new RotateAnimation(v1_GPSSet.this.s_Angle, -f, 1, 0.5F, 1, 0.5F);
            paramAnonymousSensorEvent2.setDuration(200L);
            v1_GPSSet.this._Dialog.findViewById(R.id.iv_compassarrow).startAnimation(paramAnonymousSensorEvent2);
            v1_GPSSet.this.s_Angle = (-f);
            int i = (int)f;
            Object localObject = "";
            paramAnonymousSensorEvent = (SensorEvent)localObject;
            if(i > 335)
            {
                paramAnonymousSensorEvent = (SensorEvent)localObject;
                if(i < 385){
                    paramAnonymousSensorEvent3 = "北 " + i + "° ";
                }
            }
            localObject = paramAnonymousSensorEvent;
            if(i > 65)
            {
                localObject = paramAnonymousSensorEvent;
                if(i < 115){
                    localObject = "东 " + i + "° ";
                }
            }
            paramAnonymousSensorEvent = (SensorEvent)localObject;
            if(i > 155)
            {
                paramAnonymousSensorEvent = (SensorEvent)localObject;
                if (i < 205) {
                    paramAnonymousSensorEvent3 = "南 " + i + "°";
                  }
            }
            localObject = paramAnonymousSensorEvent;
            if (i > 245)
            {
              localObject = paramAnonymousSensorEvent;
              if (i < 295) {
                localObject = "西 " + i + "°";
              }
            }
            paramAnonymousSensorEvent = (SensorEvent)localObject;
            if (i > 20)
            {
              paramAnonymousSensorEvent = (SensorEvent)localObject;
              if (i < 70) {
                paramAnonymousSensorEvent3 = "东北 " + i + "°";
              }
            }
            localObject = paramAnonymousSensorEvent;
            if (i > 110)
            {
              localObject = paramAnonymousSensorEvent;
              if (i < 160) {
                localObject = "东南 " + i + "°";
              }
            }
            paramAnonymousSensorEvent = (SensorEvent)localObject;
            if (i > 200)
            {
              paramAnonymousSensorEvent = (SensorEvent)localObject;
              if (i < 250) {
                paramAnonymousSensorEvent3 = "西南 " + i + "°";
              }
            }
            localObject = paramAnonymousSensorEvent;
            if (i > 290)
            {
              localObject = paramAnonymousSensorEvent;
              if (i < 340) {
                localObject = "西北 " + i + "°";
              }
            }
            if (localObject != "") {
                Tools.SetTextViewValueOnID(v1_GPSSet.this._Dialog, R.id.tv_compassangle, (String)localObject);
              }
        }
    }
      
  };
  
  private GpsStatus.Listener statusListener = null;
  
  public v1_GPSSet()
  {
      this._Dialog.SetOtherView(R.layout.v1_gpsset);
      this._Dialog.SetCallback(this.m_Callback);
      this._Dialog.ReSetSize(1.0F, 0.96F);
      this._Dialog.SetCaption("GPS信息");
      this._Dialog.SetButtonInfo("1," + R.drawable.v1_closegps + ",关闭GPS ,关闭GPS", this.m_Callback);
      this.m_SD = ((TextView)this._Dialog.findViewById(R.id.tv_sd)); //
      this.m_POS_JD = ((TextView)this._Dialog.findViewById(R.id.tv_pos_jd)); //
      this.m_POS_ZT = ((TextView)this._Dialog.findViewById(R.id.tv_pos_zt)); //
      this.m_JD = ((TextView)this._Dialog.findViewById(R.id.tv_jd)); //
      this.m_WD = ((TextView)this._Dialog.findViewById(R.id.tv_wd)); //
      this.m_GC = ((TextView)this._Dialog.findViewById(R.id.tv_gc)); //
      this.m_ImgView = ((ImageView)this._Dialog.findViewById(R.id.iv_gps)); //imageview_gps
      this.m_ImgViewBound = ((ImageView)this._Dialog.findViewById(R.id.iv_gps2)); //imageview_gps2
      this.m_ImgViewSNR = ((ImageView)this._Dialog.findViewById(R.id.iv_snr)); //
      this.m_ImgView.setOnClickListener(new View.OnClickListener() {
        
        @Override
        public void onClick(View paramAnonymousView) {
            // TODO Auto-generated method stub
            ((ViewFlipper)v1_GPSSet.this._Dialog.findViewById(R.id.viewFlipper1)).showPrevious();
        }
    });
    this.m_ImgViewBound.setOnClickListener(new View.OnClickListener() {
        
        @Override
        public void onClick(View paramAnonymousView) {
            // TODO Auto-generated method stub
            ((ViewFlipper)v1_GPSSet.this._Dialog.findViewById(R.id.viewFlipper1)).showPrevious();
        }
    });
    this.m_SensorManager = ((SensorManager)PubVar.m_DoEvent.m_Context.getSystemService(Context.SENSOR_SERVICE)); //传感器管理器 "sensor"
    this.m_Sensor3 = this.m_SensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); //加速器
    this.m_SensorManager.registerListener(this.sensorListener, this.m_Sensor3, SensorManager.SENSOR_DELAY_GAME);//1
  }
  
  private void CreateLayerOut() //创建界面
  {
      Object localObject1 = Bitmap.createBitmap(this.m_ImgViewSNR.getMeasuredWidth(), this.m_ImgViewSNR.getMeasuredHeight(),
              Bitmap.Config.ARGB_8888); //星历信息
      this.m_ImgViewSNR.setImageBitmap((Bitmap)localObject1);
      this.m_SNRGraphics = new Canvas((Bitmap)localObject1); //星历canvas
      localObject1 = (LinearLayout)this._Dialog.findViewById(R.id.imageControl);
      Object localObject2 = Bitmap.createBitmap(((LinearLayout)localObject1).getMeasuredWidth(), ((LinearLayout)localObject1).getMeasuredHeight(),
              Bitmap.Config.ARGB_8888);
      this.m_ImgView.setImageBitmap((Bitmap)localObject2); //imageview_gps设置图像
      this.m_Graphics = new Canvas((Bitmap)localObject2); //imageview_gps的canvas
      localObject2 = this._Dialog.findViewById(R.id.iv_compassarrow); //
      RelativeLayout.LayoutParams localLayoutParams = new RelativeLayout.LayoutParams(((View)localObject2).getWidth(), ((View)localObject2).getHeight());
      localLayoutParams.leftMargin = (this.m_Graphics.getWidth()/2 - ((View)localObject2).getWidth()/2);
      localLayoutParams.topMargin = (this.m_Graphics.getHeight()/2 - ((View)localObject2).getHeight()/2);
      ((View)localObject2).setLayoutParams(localLayoutParams);
      localObject1 = Bitmap.createBitmap(((LinearLayout)localObject1).getMeasuredWidth(), ((LinearLayout)localObject1).getMeasuredHeight(),
              Bitmap.Config.ARGB_8888);
      this.m_ImgViewBound.setImageBitmap((Bitmap)localObject1);
      this.m_BoundGraphics = new Canvas((Bitmap)localObject1);
      Refresh(); //刷新
      this.statusListener = new GpsStatus.Listener() //GPS状态监听
      {

        @Override
        public void onGpsStatusChanged(int paramAnonymousInt) {
            // TODO Auto-generated method stub
            v1_GPSSet.this.m_ImgView.invalidate();
            switch(paramAnonymousInt)
            {
            default:
                v1_GPSSet.this.Refresh();
                return;
            }
            //return;
        }
      };
      if(PubVar.m_GPSLocate == null){}
      while(PubVar.m_GPSLocate.m_LTManager == null){
          return;
      }
      PubVar.m_GPSLocate.m_LTManager.addGpsStatusListener(this.statusListener);
  }
  
  private void DrawBound(Iterable<GpsSatellite> paramIterable, int paramInt)
  {
      float f1 = this.m_BoundGraphics.getHeight(); //高度
      float f2 = this.m_BoundGraphics.getWidth(); //宽度
      int i = 1;
      paramInt = 0;
      Object localObject = paramIterable.iterator();
      
      int paramIterable2;
      String paramIterable3;
      Paint localPaint2 = new Paint();
      localPaint2.setStyle(Paint.Style.STROKE);
      localPaint2.setAntiAlias(true);
      localPaint2.setColor(Color.BLUE); //parseColor("#1e1e5a")
      Paint localPaint1 = new Paint();
      localPaint1.setColor(Color.RED);
      localPaint1.setAntiAlias(true);
      localObject = Typeface.create("宋体", Typeface.BOLD);
      localPaint1.setTextSize(20.0F);
      localPaint1.setTypeface((Typeface)localObject);
      localPaint1.setAntiAlias(true);
      float f3 = f1/8.0F;
      this.m_BoundGraphics.drawLine(30.0F, f1 - 40.0F, f2 - 30.0F, f1 - 40.0F, localPaint2);
      this.m_BoundGraphics.drawLine(30.0F, 40.0F + f3, 30.0F, f1 - 40.0F, localPaint2);
      localObject = new DashPathEffect(new float[]{5.0F, 5.0F, 5.0F, 5.0F}, 1.0F);
      localPaint2.setColor(Color.GREEN);
      localPaint2.setPathEffect((PathEffect)localObject);
      /*
      for(;;)
      {
          if (!((Iterator)localObject).hasNext())
          {
            return;
          }
          
      }
      */
      
      for(;;)
      {
          
          if(!((Iterator)localObject).hasNext())
          {
              break;
          }
          GpsSatellite localGpsSatellite = (GpsSatellite)((Iterator)localObject).next();
          f2 = localGpsSatellite.getSnr() * f3 / 10.0F;
          if(localGpsSatellite.getSnr() > 40.0F){
              f2 = 40.0F * f3 / 10.0F + (localGpsSatellite.getSnr() - 40.0F) * f3 / 25.0F;
          }
          float f4 = paramInt * f1 + 30.0F + paramInt;
          float f5 = this.m_BoundGraphics.getHeight() - 40.0F;
          float f6 = paramInt;
          float f7 = paramInt;
          f2 = this.m_BoundGraphics.getHeight() - 40.0F - f2;
          localPaint2.setColor(GetGpsSatelliteColor(localGpsSatellite));
          this.m_BoundGraphics.drawRect(f4, f2, f6*f1 + 30.0F + f7 + f1, f5, localPaint2);
          paramIterable2 = (int)localGpsSatellite.getSnr();
          this.m_BoundGraphics.drawText(String.valueOf(paramIterable2), (f1 - localPaint1.measureText(String.valueOf(paramIterable2)))/2.0F + f4, 
                  f2 - 2.0F, localPaint1);
          paramIterable3 = "G" + localGpsSatellite.getPrn();
          if(localGpsSatellite.getPrn() > 32){
              paramIterable3 = "R" + localGpsSatellite.getPrn();
          }
          this.m_BoundGraphics.drawText(paramIterable3, (f1 - localPaint1.measureText(paramIterable3))/2.0F + f4, 
                  localPaint1.getTextSize() + f5, localPaint1);
          paramInt += 1;
          i += 1;
      }
      
      
      if(i > 4)
      {
          localPaint2 = new Paint();
          localPaint2.setStyle(Paint.Style.FILL);
          localPaint2.setAntiAlias(true);
          f1 = (f2 - 2.0F * 30.0F)/11.0F;
          if(paramInt > 11){
              f1 = f2/paramInt;
          }
          //paramInt = 0;
          //localObject = paramIterable.iterator();
          this.m_BoundGraphics.drawLine(30.0F, f1 - i * f3 - 40.0F, f2 - 30.0F, f1 - i * f3 - 40.0F, localPaint2);
          this.m_BoundGraphics.drawText(String.valueOf(i * 10), 3.0F, f1 - i * f3 - 40.0F + 5.0F, localPaint1);
          return;
      }
      
      
  }
  
  private void DrawCompass(PointF paramPointF, float paramFloat) //绘制指北针
  {
      Paint localPaint1 = new Paint();
      localPaint1.setStyle(Paint.Style.FILL);
      localPaint1.setColor(Color.parseColor("#1e1e5a"));
      localPaint1.setAntiAlias(true);
      this.m_Graphics.drawCircle(paramPointF.x, paramPointF.y, paramFloat, localPaint1);
      localPaint1.setStyle(Paint.Style.STROKE);
      localPaint1.setColor(Color.GREEN);
      localPaint1.setPathEffect(new DashPathEffect(new float[]{5.0F, 5.0F, 5.0F, 5.0F}, 1.0F));
      this.m_Graphics.drawCircle(paramPointF.x, paramPointF.y, paramFloat/3.0F, localPaint1);
      this.m_Graphics.drawCircle(paramPointF.x, paramPointF.y, 2.0F * paramFloat/3.0F, localPaint1);
      Paint localPaint2 = new Paint();
      localPaint2.setAntiAlias(true);
      localPaint2.setTypeface(Typeface.create("宋体", 0));
      localPaint2.setAntiAlias(true);
      int i = 0;
      for(;;)
      {
          if(i > 330){
              return;
          }
          float f4 = (float)(i * 3.141592653589793D / 180.0D);
          float f1 = (float)(Math.cos(f4) * paramFloat + paramPointF.x);
          float f2 = (float)(paramPointF.y - Math.sin(f4) * paramFloat);
          float f3 = (float)(Math.cos(f4) * 2.7D * paramFloat / 3.0D + paramPointF.x);
          f4 = (float)(paramPointF.y - Math.sin(f4) * 2.7D * paramFloat / 3.0D);
          this.m_Graphics.drawLine(paramPointF.x, paramPointF.y, f1, f2, localPaint1);
          int k = 90 - i;
          int j = k;
          if(k < 0){
              j = k + 360;
          }
          String str = j + "° ";
          localPaint2.setTextSize(20.0F);
          localPaint2.setColor(Color.parseColor("#ded5d5"));
          if(j == 0)
          {
              str = "北";
              localPaint2.setColor(Color.RED);
              localPaint2.setTextSize(localPaint2.getTextSize() * 1.5F);
          }
          if(j == 90)
          {
              str = "东";
              localPaint2.setColor(Color.GREEN);
              localPaint2.setTextSize(localPaint2.getTextSize() * 1.5F);
          }
          if(j == 180)
          {
              str = "南";
              localPaint2.setColor(Color.BLUE);
              localPaint2.setTextSize(localPaint2.getTextSize() * 1.5F);
          }
          if(j == 270)
          {
              str = "西";
              localPaint2.setColor(Color.CYAN);
              localPaint2.setTextSize(localPaint2.getTextSize() * 1.5F);
          }
          this.m_Graphics.drawText(str, f3 - localPaint2.measureText(str)/2.0F, f4, localPaint2);
          i += 30;
      }
  }
  
  private void DrawGPSSatellite(GpsSatellite paramGpsSatellite, PointF paramPointF, float paramFloat) //绘制GPS卫星
  {
      float f2 = 90.0F - paramGpsSatellite.getAzimuth();
      float f1 = f2;
      Paint paramPointF2;
      Typeface paramPointF3;
      String paramPointF4;
      if(f2 < 0.0F){
          f1 = f2 + 360.0F;
      }
      f1 = (float)(f1 * 3.141592653589793D / 180.0D);
      f2 = paramGpsSatellite.getElevation() * paramFloat / 90.0F;
      paramFloat = (float)(Math.cos(f1) * f2 + paramPointF.x);
      f1 = (float)(paramPointF.y - Math.sin(f1) * f2);
      paramPointF2 = new Paint();
      paramPointF2.setStyle(Paint.Style.FILL);
      paramPointF2.setColor(GetGpsSatelliteColor(paramGpsSatellite));
      paramPointF2.setAntiAlias(true);
      this.m_Graphics.drawCircle(paramFloat, f1, 10.0F, paramPointF2);
      Paint localPaint = new Paint();
      localPaint.setColor(Color.BLUE);
      localPaint.setAntiAlias(true);
      paramPointF3 = Typeface.create("宋体", Typeface.BOLD);
      localPaint.setTextSize(20.0F);
      localPaint.setTypeface(paramPointF3);
      localPaint.setAntiAlias(true);
      paramPointF4 = "G" + paramGpsSatellite.getPrn();
      if(paramGpsSatellite.getPrn() > 32){
          paramPointF4 = "R" + paramGpsSatellite.getPrn();
      }
      this.m_Graphics.drawText(paramPointF4, paramFloat - localPaint.measureText(paramPointF4)/2.0F, f1 + 10.0F + 20.0F,
              localPaint);
  }
  
  private void DrawSNR(float paramFloat1, float paramFloat2) //绘制SNR
  {
      Paint localPaint1 = new Paint();
      localPaint1.setStyle(Paint.Style.FILL);
      localPaint1.setAntiAlias(true);
      Paint localPaint2 = new Paint();
      localPaint2.setColor(Color.RED);
      localPaint2.setAntiAlias(true);
      Typeface localTypeface = Typeface.create("宋体", Typeface.BOLD);
      localPaint2.setTextSize(20.0F);
      localPaint2.setTypeface(localTypeface);
      localPaint2.setAntiAlias(true);
      localPaint1.setColor(GetGpsSatelliteColor(5.0F));
      this.m_SNRGraphics.drawRect(0.0F, 0.0F, paramFloat1/10.0F, paramFloat2/2.0F, localPaint1);
      this.m_SNRGraphics.drawText("00", 0.0F - localPaint2.measureText("00")/2.0F, paramFloat2 / 2.0F + 20.0F, localPaint2);
      localPaint1.setColor(GetGpsSatelliteColor(15.0F));
      this.m_SNRGraphics.drawRect(paramFloat1/10.0F, 0.0F, 2.0F * paramFloat1/10.0F, paramFloat2/2.0F, localPaint1);
      this.m_SNRGraphics.drawText("10", paramFloat1/10.0F-localPaint2.measureText("10")/2.0F, paramFloat2/2.0F+20.0F, localPaint2);
      localPaint1.setColor(GetGpsSatelliteColor(25.0F));
      this.m_SNRGraphics.drawRect(2.0F * paramFloat1 / 10.0F, 0.0F, 3.0F * paramFloat1 / 10.0F, paramFloat2 / 2.0F, localPaint1);
      this.m_SNRGraphics.drawText("20", 2.0F * paramFloat1 / 10.0F - localPaint2.measureText("20") / 2.0F, paramFloat2 / 2.0F + 
              20.0F, localPaint2);
      localPaint1.setColor(GetGpsSatelliteColor(35.0F));
      this.m_SNRGraphics.drawRect(3.0F * paramFloat1 / 10.0F, 0.0F, 4.0F * paramFloat1 / 10.0F, paramFloat2 / 2.0F, localPaint1);
      this.m_SNRGraphics.drawText("30", 3.0F * paramFloat1 / 10.0F - localPaint2.measureText("30") / 2.0F, paramFloat2 / 2.0F + 
              20.0F, localPaint2);
      localPaint1.setColor(GetGpsSatelliteColor(50.0F));
      this.m_SNRGraphics.drawRect(4.0F * paramFloat1 / 10.0F, 0.0F, paramFloat1, paramFloat2 / 2.0F, localPaint1);
      this.m_SNRGraphics.drawText("40", 4.0F * paramFloat1 / 10.0F - localPaint2.measureText("40")/2.0F, paramFloat2/2.0F+ 
              20.0F, localPaint2);
  }
  
  private void DrawSateNumber(Canvas paramCanvas, int paramInt1, int paramInt2) //绘制卫星数
  {
      Paint localPaint = new Paint();
      localPaint.setColor(Color.parseColor("#ded5d5"));
      localPaint.setAntiAlias(true);
      Typeface localTypeface = Typeface.create("宋体", 0);
      localPaint.setTextSize(20.0F);
      localPaint.setTypeface(localTypeface);
      localPaint.setAntiAlias(true);
      localPaint.setColor(Color.RED);
      paramCanvas.drawText("可见卫星数", 10.0F, 0.0F + 20.0F, localPaint);
      paramCanvas.drawText("解算卫星数", paramCanvas.getWidth() - localPaint.measureText("解算卫星数") - 10.0F, 0.0F + 20.0F, localPaint);
      localPaint.setTextSize(localPaint.getTextSize() * 2.0F);
      paramCanvas.drawText(paramInt1 + "颗", 10.0F, localPaint.getTextSize() + 20.0F, localPaint);
      paramCanvas.drawText(paramInt2 + "颗", paramCanvas.getWidth() - localPaint.measureText(paramInt2 + "颗") - 10.0F,
              localPaint.getTextSize() + 20.0F, localPaint);
  }
  
  private int GetGpsSatelliteColor(float paramFloat) //获取GPS卫星颜色
  {
      int i = Color.argb(255, 255, 0, 0);
      int j = Color.argb(255, 255, 129, 0);
      int k = Color.argb(255, 255, 255, 0);
      int m = Color.argb(255, 222, 255, 0);
      int n = Color.argb(255, 0, 255, 0);
      if((paramFloat >= 0.0F) && (paramFloat <= 10.0F))
      {
          return i;
      }
      if((paramFloat > 10.0F) && (paramFloat <= 20.0F)){
          return j;
      }
      if((paramFloat > 20.0F) && (paramFloat <= 30.0F)){
          return k;
      }
      if((paramFloat > 30.0F) && (paramFloat <= 40.0F)){
          return m;
      }
      if(paramFloat > 40.0F){
          return n;
      }
      return 0;
  }
  
  private int GetGpsSatelliteColor(GpsSatellite paramGpsSatellite)
  {
      int i = Color.argb(255, 197, 194, 197);
      if(!paramGpsSatellite.usedInFix()){
          return i;
      }
      return GetGpsSatelliteColor(paramGpsSatellite.getSnr());
  }
  
  private void Refresh() //刷新
  {
      Log.d("v1_GPSSet", "Into Refresh");
      this.m_Graphics.drawColor(Color.GRAY); //图像
      this.m_SNRGraphics.drawColor(Color.BLUE); //星历图像
      this.m_BoundGraphics.drawColor(Color.YELLOW); //绑定图像
      if(PubVar.m_GPSLocate == null){}
      Object localObject1 = PubVar.m_GPSLocate.m_LTManager.getGpsStatus(null);
      if(localObject1 == null){
          return;
      }
      int j = 0;
      int i = 0;
      Iterable localIterable = ((GpsStatus)localObject1).getSatellites(); //获取卫星
      //Log.d("v1_GPSSet", "Satellite:" + localIterable)
      localObject1 = localIterable.iterator();
      Object localObject2 = null;
      float f = 0;
      Log.d("v1_GPSSet", "Before First For");
      for(;;)
      {
          if(!((Iterator)localObject1).hasNext())
          {
              if(PubVar.m_GPSLocate.m_Location != null)
              {
                  this.m_SD.setText("速度:" + PubVar.m_GPSLocate.getGPSSpeed() + " km/h"); //速度
                  this.m_GC.setText("高程:" + PubVar.m_GPSLocate.getGC() + " 米"); //高程
                  this.m_POS_JD.setText("精度:" + PubVar.m_GPSLocate.getAccuracy() + " 米"); //精度
                  localObject2 = this.m_POS_ZT;
                  StringBuilder localStringBuilder = new StringBuilder("状态:");
                  if(!PubVar.m_GPSLocate.AlwaysFix()){
                      localObject1 = "未定位";
                      break;
                  }
                  localObject1 = "已定位";
                  ((TextView)localObject2).setText((String)localObject1);
                  this.m_JD.setText("经度:" + PubVar.m_GPSLocate.getJWGPSCoordinate().split(",")[0]);
                  this.m_WD.setText("纬度:" + PubVar.m_GPSLocate.getJWGPSCoordinate().split(",")[1]);
              }
              Log.d("v1_GPSSet", "Before Draw SNR");
              DrawSNR(this.m_ImgViewSNR.getMeasuredWidth(), this.m_ImgViewSNR.getMeasuredHeight()); //绘制星历信息*
              Log.d("v1_GPSSet", "After Draw SNR");
              f = Math.min(this.m_ImgView.getMeasuredWidth(), this.m_ImgView.getMeasuredHeight())/2.0F - 10.0F;
              localObject1 = new PointF(this.m_ImgView.getMeasuredWidth()/2, this.m_ImgView.getMeasuredHeight()/2);
              DrawCompass((PointF)localObject1, f); //绘制指北针
              Log.d("v1_GPSSet", "After Draw Compass");
              DrawSateNumber(this.m_Graphics, i, j); //绘制星历数
              Log.d("v1_GPSSet", "After Draw SateNumber");
              localObject2 = localIterable.iterator();
              Log.d("v1_GPSSet", "First For Ends");
              break;
          }
          localObject2 = (GpsSatellite)((Iterator)localObject1).next();
          int k = i + 1;
          i = k;
          if(!((GpsSatellite)localObject2).usedInFix()){
              break;
          }
          j += 1;
          i = k;
          
      }
      Log.d("v1_GPSSet", "Before Second For");
      /*
      for(;;)
      {
          if(!((Iterator)localObject2).hasNext())
          {
              Log.d("v1_GPSSet", "Before DrawBound");
              //DrawBound(localIterable, i);
              Log.d("v1_GPSSet", "After DrawBound");
             //DrawSateNumber(this.m_BoundGraphics, i, j);
              Log.d("v1_GPSSet", "Refresh Ends");
              return;
          }
          Log.d("v1_GPSSet", "Before Draw Satellite");
          DrawGPSSatellite((GpsSatellite)((Iterator)localObject2).next(), (PointF)localObject1, f);
          Log.d("v1_GPSSet", "After Draw Satellite");
      }
      */
  }
  
  public void ShowDialog()
  {
      ///*
      this._Dialog.setOnShowListener(new DialogInterface.OnShowListener() { //显示监听
        
        @Override
        public void onShow(DialogInterface paramAnonymousDialogInterface) {
            // TODO Auto-generated method stub
            v1_GPSSet.this.CreateLayerOut(); //绘制界面
        }
    });
    //*/
    this._Dialog.show();
  }
}
View Code

 Select.java 选择

 ZoomIn.java 放大

public class ZoomIn implements ICommand, IOnPaint { //放大
     private TrackRectangle TR_X;
     private ICommand _Command;
     private MapControl _MapControl = null;

    public ZoomIn(MapControl paramMapControl) {
        // TODO Auto-generated constructor stub
        this.TR_X = new TrackRectangle(paramMapControl); //追踪矩形
        this._Command = this.TR_X;
        this._MapControl = paramMapControl;
    }


    @Override
    public void MouseDown(MotionEvent paramMotionEvent) {
        // TODO Auto-generated method stub
        this._Command.MouseDown(paramMotionEvent);
    }

    @Override
    public void MouseMove(MotionEvent paramMotionEvent) {
        // TODO Auto-generated method stub
        this._Command.MouseMove(paramMotionEvent);
    }

    @Override
    public void MouseUp(MotionEvent paramMotionEvent) {
        // TODO Auto-generated method stub
        this._Command.MouseUp(paramMotionEvent);
        if(this.TR_X.getTrackEnvelope() == null){
            this.TR_X.setTrackEnvelope(this._MapControl.getMap().getExtend().Scale(0.5D));
        }
        else{
            this._MapControl.getMap().setExtend(this.TR_X.getTrackEnvelope());
        }
        for(;;)
        {
            this._MapControl.getMap().Refresh();
            return;
        }
    }

    @Override
    public void OnPaint(Canvas paramCanvas)
    {
        this.TR_X.OnPaint(paramCanvas);
    }
}
View Code

ZoomOut.java 缩小

public class ZoomOut implements ICommand {
    private TrackRectangle TR_X;
    private ICommand _Command;
    private MapControl _MapControl = null;

    public ZoomOut(MapControl paramMapControl) {
        // TODO Auto-generated constructor stub
        this.TR_X = new TrackRectangle(paramMapControl);
        this._Command = this.TR_X;
        this._MapControl = paramMapControl;
    }

    @Override
    public void MouseDown(MotionEvent paramMotionEvent) {
        // TODO Auto-generated method stub
        this._Command.MouseDown(paramMotionEvent);
    }

    @Override
    public void MouseMove(MotionEvent paramMotionEvent) {
        // TODO Auto-generated method stub
        this._Command.MouseMove(paramMotionEvent);
    }

    @Override
    public void MouseUp(MotionEvent paramMotionEvent) {
        // TODO Auto-generated method stub
        this._Command.MouseUp(paramMotionEvent);
        if(this.TR_X.getTrackEnvelope() == null){
            this._MapControl.getMap().setExtend(this._MapControl.getMap().getExtend().Scale(2.0D));
        }
        else{
            this._MapControl.getMap().setExtend(this._MapControl.getMap().getExtend().Scale
                    (this._MapControl.getMap().getExtend().Factor(this.TR_X.getTrackEnvelope())));
        }
        for(;;)
        {
            this._MapControl.getMap().Refresh();
            return;
        }
    }

}
View Code

ZoomInOutPan.java 手势缩放平移

public class ZoomInOutPan implements ICommand, IOnPaint {
    boolean FirstMouseMove = true;
    private Bitmap MaskImage = null;
    private MapControl _MapControl = null;
    private Pan _Pan = null;
    private boolean _PanScreen = false;
    private float m_FromDist = 0.0F;
    private PointF m_ScaleStartPoint = null;
    private float m_ToDist = 0.0F;
    private RectF m_ToRect = null;

    public ZoomInOutPan(MapControl paramMapControl) {
        // TODO Auto-generated constructor stub
        this._MapControl = paramMapControl;
        this._Pan = new Pan(paramMapControl);
    }
    
    private float GetScaleDist(MotionEvent paramMotionEvent)
    {
        float f1 = Math.min(paramMotionEvent.getX(0 ), paramMotionEvent.getX(1)); //MotionEvent.ACTION_DOWN MotionEvent.ACTION_UP
        float f2 = Math.min(paramMotionEvent.getY(0), paramMotionEvent.getY(1));
        float f3 = Math.max(paramMotionEvent.getX(0), paramMotionEvent.getX(1));
        float f4 = Math.max(paramMotionEvent.getY(0), paramMotionEvent.getY(1));
        return Float.valueOf(String.valueOf(Math.sqrt((f1 - f3) * (f1 - f3) + (f2 - f4) * (f2 - f4)))).floatValue();
    }

    @Override
    public void MouseDown(MotionEvent paramMotionEvent) {
        // TODO Auto-generated method stub
        this.FirstMouseMove = true;
        if(paramMotionEvent.getPointerCount() > 1)
        {
            this._PanScreen = false;
            this._MapControl.getMap().setInvalidMap(true);
            Bitmap localBitmap = this._MapControl.getMap().bp;
            this.MaskImage = this._MapControl.getMap().MaskBitmap;
            this.m_FromDist = GetScaleDist(paramMotionEvent);
            this.m_ToRect = null;
            this.m_ScaleStartPoint = new PointF((paramMotionEvent.getX(0) + paramMotionEvent.getX(1))/2.0F, (paramMotionEvent.getY(0) +
                    paramMotionEvent.getY(1))/2.0F);
            return;
        }
        this._Pan.MouseDown(paramMotionEvent);
        this._PanScreen = true;
    }

    @Override
    public void MouseMove(MotionEvent paramMotionEvent) {
        // TODO Auto-generated method stub
        if((paramMotionEvent.getPointerCount()<=1)&&(this._PanScreen))
        {
            if(this.FirstMouseMove)
            {
                this._Pan.MouseDown(paramMotionEvent);
                this.FirstMouseMove = false;
            }
            this._Pan.MouseMove(paramMotionEvent);
        }
        while((paramMotionEvent.getPointerCount()<=1)||(this._PanScreen)){
            return;
        }
        this.m_ToDist = GetScaleDist(paramMotionEvent);
        if((this.m_FromDist != 0.0F)&&(this.m_ToDist == 0.0F)){}
        float f1 = this.m_ToDist/this.m_FromDist;
        if(this.MaskImage != null)
        {
            float f2 = this.MaskImage.getWidth()/2;
            f2 = this.MaskImage.getHeight() / 2;
            f2 = this.MaskImage.getWidth();
            float f3 = this.MaskImage.getHeight();
            float f4 = -(f1 - 1.0F) * this.m_ScaleStartPoint.x;
            float f5 = -(f1 - 1.0F) * this.m_ScaleStartPoint.y;
            this.m_ToRect = new RectF(f4, f5, f4 + f2 * f1, f5 + f3 * f1);
        }
        this._MapControl.invalidate();
    }

    @Override
    public void MouseUp(MotionEvent paramMotionEvent) {
        // TODO Auto-generated method stub
        if((paramMotionEvent.getPointerCount() <= 1) && (this._PanScreen)){
            this._Pan.MouseUp(paramMotionEvent);
        }
        while((paramMotionEvent.getPointerCount() <= 1)&&(this._PanScreen)){
            return;
        }
        if(this.MaskImage != null){
            this.MaskImage = null;
        }
        float f = 0;
        
        for(;;)
        {
            if(this.m_ToRect != null)
            {
                if((this.m_FromDist != 0.0F)&&(this.m_ToDist == 0.0F)){}
                f = this.m_ToDist / this.m_FromDist;
                if(1.0F / f >= 1.0F){
                    break;
                }
            }
            Coordinate paramMotionEvent2 = PubVar.m_Map.getViewConvert().ScreenToMap(this.m_ScaleStartPoint);
            Object localObject = this._MapControl.getMap().getExtend().Scale(1.0F/f);
            this._MapControl.getMap().setExtend((Envelope)localObject);
            localObject = PubVar.m_Map.getViewConvert().ScreenToMap(this.m_ScaleStartPoint);
            PubVar.m_Map.getCenter().setX(PubVar.m_Map.getCenter().getX() - (((Coordinate)localObject).getX() - paramMotionEvent.getX()));
            PubVar.m_Map.getCenter().setY(PubVar.m_Map.getCenter().getY() - (((Coordinate)localObject).getY() - paramMotionEvent.getY()));
            PubVar.m_Map.getViewConvert().CalExtend();
            this._MapControl.getMap().setInvalidMap(false);
            this._MapControl.getMap().Refresh();
            return;
        }
    }

    @Override
    public void OnPaint(Canvas paramCanvas)
    {
        if(this._PanScreen){
            this._Pan.OnPaint(paramCanvas);
        }
        while((this.MaskImage == null) || (this.m_ToRect == null)){
            return;
        }
        Paint localPaint = new Paint();
        localPaint.setColor(Color.BLUE);
        localPaint.setStyle(Paint.Style.FILL);
        paramCanvas.drawRect(0.0F, 0.0F, this.MaskImage.getWidth(), this.MaskImage.getHeight(), localPaint);
        paramCanvas.drawBitmap(this.MaskImage, new Rect(0, 0, this.MaskImage.getWidth(), this.MaskImage.getHeight()), 
                this.m_ToRect, localPaint);
    }
}
View Code

 Pan.java 平移

public class Pan implements ICommand, IOnPaint {
    float DeltX;
    float DeltY;
    Integer GGdc;
    float H1;
    float H2;
    Bitmap MaskImage = null;
    float W1;
    float W2;
    float X1;
    float X2;
    float Y1;
    float Y2;
    private MapControl _MapControl;
    boolean _MouseDown = false;
    private boolean _SelectMode = true;
    Paint brush = new Paint(Paint.HINTING_OFF);
    Canvas g2;
    private PointF m_MoveStart;

    public Pan(MapControl paramMapControl) {
        // TODO Auto-generated constructor stub
        this._MapControl = paramMapControl;
    }
    
    @Override
    public void MouseDown(MotionEvent paramMotionEvent) {
        // TODO Auto-generated method stub
        this._MapControl.getMap().setInvalidMap(true);
        this._MapControl.TrackingRectangle = null;
        this.m_MoveStart = new PointF(paramMotionEvent.getX(), paramMotionEvent.getY());
        Bitmap paramMotionEvent2 = this._MapControl.getMap().bp;
        this.MaskImage = this._MapControl.getMap().MaskBitmap;
        this._MouseDown = true;
    }

    @Override
    public void MouseMove(MotionEvent paramMotionEvent) {
        // TODO Auto-generated method stub
        this.DeltX = (paramMotionEvent.getX() - this.m_MoveStart.x); //X方向的移动
        this.DeltY = (paramMotionEvent.getY() - this.m_MoveStart.y); //Y方向的移动
        float f1 = this._MapControl.getWidth(); //Map控件的宽度
        float f2 = this._MapControl.getHeight(); //Map控件的高度
        
        for(;;)
        {
            if (this.DeltY >= 0.0F)
              {
                if (this.DeltX < 0.0F) {
                   //break label184;
                    this.X1 = 0.0F;
                    this.Y1 = 0.0F;
                    this.W1 = this.DeltX;
                    this.H1 = f2;
                    this.X2 = 0.0F;
                    this.Y2 = 0.0F;
                    this.W2 = f1;
                    this.H2 = this.DeltY;
                    break;
                }
                else{
                    
                }
                this.X1 = 0.0F;
                this.Y1 = 0.0F;
                this.W1 = f1; //宽度
                this.H1 = this.DeltY;
                this.X2 = (this.DeltX + f1);
                this.Y2 = 0.0F;
                this.W2 = (-this.DeltX);
                this.H2 = f2;
                break;
              }
              else
              {
                if (this.DeltX < 0.0F) {
                  //break label184;
                  this.X1 = 0.0F;
                  this.Y1 = 0.0F;
                  this.W1 = this.DeltX;
                  this.H1 = f2;
                  this.X2 = 0.0F;
                  this.Y2 = (this.DeltY + f2);
                  this.W2 = f1;
                  this.H2 = (-this.DeltY);
                  break;
                }
                else{
                        
                }
                this.X1 = 0.0F;
                this.Y1 = (this.DeltY + f2); //DeltY + Height
                this.W1 = f1;
                this.H1 = (-this.DeltY); //Y方向的变化正负
                this.X2 = (this.DeltX + f1); //DeltX + Width
                this.Y2 = 0.0F;
                this.W2 = (-this.DeltX); //X方向
                this.H2 = f2;
                break;
              }
            
        }
        this._MapControl.invalidate(); //刷新image
        return;
    }
    
    @Override
    public void MouseUp(MotionEvent paramMotionEvent) {
        // TODO Auto-generated method stub
        if(this.g2 != null){
            this.g2 = null;
        }
        if(this.MaskImage != null){
            this.MaskImage = null;
        }
        if(this._MouseDown)
        {
            Coordinate localCoordinate1 = this._MapControl.getMap().getViewConvert().ScreenToMap(this.m_MoveStart);
            Coordinate localCoordinate2 = this._MapControl.getMap().getViewConvert().ScreenToMap(paramMotionEvent.getX(),
                    paramMotionEvent.getY());
            SetNewCenter(new Coordinate(this._MapControl.getMap().getCenter().getX() - (localCoordinate2.getX() - 
                    localCoordinate1.getX()), this._MapControl.getMap().getCenter().getY() - (localCoordinate2.getY() - 
                            localCoordinate1.getY())));
            this._MouseDown = false;
            if((this._SelectMode)&&(Math.abs(paramMotionEvent.getX() - this.m_MoveStart.x) <= 10.0F)&&(Math.abs(paramMotionEvent.getY()-
                    this.m_MoveStart.y)<=10.0F)){
                this._MapControl._Select.MouseUp(paramMotionEvent);
            }
        }
        this._MapControl.getMap().setInvalidMap(false);
        System.gc();
    }
    
    @Override
    public void OnPaint(Canvas paramCanvas) {
        // TODO Auto-generated method stub
        if(this.MaskImage != null)
        {
            this.brush.setColor(Color.RED);
            this.brush.setStyle(Paint.Style.FILL);
            float f1 = this.X1;
            float f2 = this.Y1;
            float f3 = this.X1;
            float f4 = this.W1;
            float f5 = this.Y1;
            paramCanvas.drawRect(f1, f2, f4 + f3, this.H1 + f5, this.brush);
            f1 = this.X2;
            f2 = this.Y2;
            f3 = this.X2;
            f4 = this.W2;
            f5 = this.Y2;
            paramCanvas.drawRect(f1, f2, f4+f3, this.H2 + f5, this.brush);
            paramCanvas.drawBitmap(this.MaskImage, this.DeltX, this.DeltY, new Paint());
        }
    }


    public void SetNewCenter(Coordinate paramCoordinate) {
        // TODO Auto-generated method stub
        this._MapControl.getMap().getCenter().setX(paramCoordinate.getX());
        this._MapControl.getMap().getCenter().setY(paramCoordinate.getY());
        this._MapControl.getMap().getViewConvert().CalExtend();
        this._MapControl.getMap().Refresh();
    }

}
View Code

Tools.ReadyGPS 准备GPS

v1_CGpsPoint.java GPS点类

public class v1_CGpsPoint implements ICommand, IOnPaint {
    private String m_TableName = "";
    
    private void AddPoint(Coordinate paramCoordinate, String paramString) //添加点
    {
        Point paramCoordinate2 = new Point(paramCoordinate);
        v1_BaseDataObject localv1_BaseDataObject = new v1_BaseDataObject(); //基本数据对象
        localv1_BaseDataObject.SetBaseObjectRelateTable(this.m_TableName);
        localv1_BaseDataObject.SetSYS_TYPE(paramString);
        int i = localv1_BaseDataObject.SaveGeoToDb(paramCoordinate2);
        Edit(this.m_TableName, i);
    }
    
    public void AddGPSPoint() //添加点
    {
        if(!Tools.ReadyGPS(true)){ //准备GPS完毕
            return;
        }
        if(!Boolean.parseBoolean(PubVar.m_HashMap.GetValueObject("Tag_System_GPS_AveragePointEnable").Value)){
            AddPoint(PubVar.m_GPSLocate.getGPSCoordinate(), "GPS点位");
            return;
        }
        v1_Data_Gps_AveragePoint localv1_Data_Gps_AveragePoint = new v1_Data_Gps_AveragePoint();
        localv1_Data_Gps_AveragePoint.SetDataType(lkGeoLayerType.enPoint);
        localv1_Data_Gps_AveragePoint.SetCallback(new ICallback(){

            @Override
            public void OnClick(String paramAnonymousString, Object paramAnonymousObject) {
                // TODO Auto-generated method stub
                v1_CGpsPoint.this.AddPoint((Coordinate)paramAnonymousObject, "GPS点位");
            }
        });
        localv1_Data_Gps_AveragePoint.ShowDialog(); //平均点对话框
    }
    
    public boolean CheckLayerValid() //检查图层是否可用
    {
        return PubVar.m_DoEvent.m_ProjectDB.GetLayerExplorer().CheckLayerValid(this.m_TableName);
    }
    
    public void Edit(String paramString, int paramInt)
    {
        v1_Data_Template localv1_Data_Template = new v1_Data_Template();
        localv1_Data_Template.SetLayerID(paramString);
        localv1_Data_Template.SetSYS_ID(paramInt);
        localv1_Data_Template.ShowDialog(); //数据模板对话框
    }
    
    public String GetTableName()
    {
        return this.m_TableName;
    }

    @Override
    public void OnPaint(Canvas paramCanvas) {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void MouseDown(MotionEvent paramMotionEvent) {
        // TODO Auto-generated method stub
        PointF paramMotionEvent2 = new PointF(paramMotionEvent.getX(), paramMotionEvent.getY());
        Coordinate paramMotionEvent3 = PubVar.m_Map.getViewConvert().ScreenToMap(paramMotionEvent2);
        Coordinate localCoordinate = StaticObject.soProjectSystem.XYToWGS84(paramMotionEvent3);
        paramMotionEvent3.setGeoX(localCoordinate.getX());
        paramMotionEvent3.setGeoY(localCoordinate.getY());
        AddPoint(paramMotionEvent3, "手绘点位");
    }

    @Override
    public void MouseMove(MotionEvent paramMotionEvent) {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void MouseUp(MotionEvent paramMotionEvent) {
        // TODO Auto-generated method stub
        
    }
    
    public void SetTableName(String paramString)
    {
        this.m_TableName = paramString;
    }

}
View Code

v1_CGpsLine.java

v1_CGpsPoly.java

v1_GpsData_SelectLayer.java GPS数据选择图层类

public class v1_GpsData_SelectLayer {
  private ICallback _Callback = null;
  private v1_FormTemplate _Dialog = new v1_FormTemplate(PubVar.C);
  private Object m_SelectItem = null;
  private ICallback pCallback = new ICallback()
  {
    @Override
    public void OnClick(String paramAnonymousString, Object paramAnonymousObject) {
        // TODO Auto-generated method stub
        Log.d("v1_GpsData_SelectLayer", "OnClick");
        if((paramAnonymousString.equals("确定"))&&(v1_GpsData_SelectLayer.this.m_SelectItem != null))
        {
            paramAnonymousString = ((HashMap)v1_GpsData_SelectLayer.this.m_SelectItem).get("D1").toString();
            Log.d("v1_GpsData_SelectLayer", "D1:" + paramAnonymousString);
            paramAnonymousObject = PubVar.m_DoEvent.m_ProjectDB.GetLayerExplorer().GetLayerIDByName(paramAnonymousString);
            Log.d("v1_GpsData_SelectLayer", "LayerID:" + paramAnonymousObject);
            v1_Layer localv1_Layer = PubVar.m_DoEvent.m_ProjectDB.GetLayerExplorer().GetLayerByID((String)paramAnonymousObject);
            if(v1_GpsData_SelectLayer.this._Callback != null){
                if(localv1_Layer == null){
                    Log.d("v1_GpsData_SelectLayer", "localv1_Layer is null");
                }
                else{
                    Log.d("v1_GpsData_SelectLayer", "localv1_Layer isn't null");
                }
                Log.d("v1_GpsData_SelectLayer", localv1_Layer.GetLayerTypeName());
                Log.d("v1_GpsData_SelectLayer", "Before callback:" + paramAnonymousString + "," + paramAnonymousObject + ","
                        + localv1_Layer.GetLayerTypeName());
                v1_GpsData_SelectLayer.this._Callback.OnClick("当前图层", paramAnonymousString + "," + paramAnonymousObject + ","
                        + localv1_Layer.GetLayerTypeName()); //SubToolBar.OnClick()
            }
            v1_GpsData_SelectLayer.this._Dialog.dismiss();
        }
    }
      
  };
  
  public v1_GpsData_SelectLayer() //构造函数
  {
      this._Dialog.SetOtherView(R.layout.v1_gpsdata_selectlayer);
      this._Dialog.ReSetSize(1.0F, 0.96F);
      this._Dialog.SetCaption("选择图层");
      //this._Dialog.SetButtonInfo("1," + R.drawable.v1_ok + ",确定  ,确定", this.pCallback);
      this._Dialog.SetButtonInfo("1," + R.drawable.v1_ok +",确定  ,确定", this.pCallback);
      int i = 1;
      for(;;)
      {
          if(i > 3){
              return;
          }
          Object localObject = "";
          if(i == 1){
              localObject = PubVar.m_DoEvent.m_GPSPoint.GetTableName();
          }
          if(i == 2){
              localObject = PubVar.m_DoEvent.m_GPSLine.GetTableName();
          }
          if(i == 3){
              localObject = PubVar.m_DoEvent.m_GPSPoly.GetTableName();
          }
          v1_Layer localv1_Layer = PubVar.m_DoEvent.m_ProjectDB.GetLayerExplorer().GetLayerByID((String)localObject);
          if(localv1_Layer != null)
          {
              this._Dialog.findViewById(R.id.ll_datainlayer).setVisibility(View.VISIBLE);
              localObject = null;
              if(localv1_Layer.GetLayerType() == lkGeoLayerType.enPoint){
                  localObject = (Button)this._Dialog.findViewById(R.id.di_point);
              }
              if(localv1_Layer.GetLayerType() == lkGeoLayerType.enPolyline){
                  localObject = (Button)this._Dialog.findViewById(R.id.di_line);
              }
              if(localv1_Layer.GetLayerType() == lkGeoLayerType.enPolygon){
                  localObject = (Button)this._Dialog.findViewById(R.id.di_poly);
              }
              ((Button)localObject).setVisibility(View.VISIBLE);
              ((Button)localObject).setText("[" + localv1_Layer.GetLayerName() + "]  ");
              ((Button)localObject).setTag(localv1_Layer.GetLayerName());
              ((Button)localObject).setOnClickListener(new View.OnClickListener() {
                
                @Override
                public void onClick(View paramAnonymousView) {
                    // TODO Auto-generated method stub
                    HashMap localHashMap = new HashMap();
                    localHashMap.put("D1", paramAnonymousView.getTag());
                    v1_GpsData_SelectLayer.this.m_SelectItem = localHashMap;
                    v1_GpsData_SelectLayer.this.pCallback.OnClick("确定", null);
                }
            });
          }
          i += 1;
      }
  }
  
  private void LoadLayerListInfo()
  {
      this._Dialog.GetButton("1").setEnabled(false);
      v1_ExpandableBar localv1_ExpandableBar1 = (v1_ExpandableBar)this._Dialog.findViewById(R.id.vExpandableBar_point);
      v1_ExpandableBar localv1_ExpandableBar2 = (v1_ExpandableBar)this._Dialog.findViewById(R.id.vExpandableBar_line);
      v1_ExpandableBar localv1_ExpandableBar3 = (v1_ExpandableBar)this._Dialog.findViewById(R.id.vExpandableBar_poly);
      ArrayList localArrayList1 = new ArrayList();
      ArrayList localArrayList2 = new ArrayList();
      ArrayList localArrayList3 = new ArrayList();
      Iterator localIterator = PubVar.m_DoEvent.m_ProjectDB.GetLayerExplorer().GetLayerList().iterator();
      for(;;)
      {
         if(!localIterator.hasNext())
         {
             if(localArrayList1.size() > 0)
             {
                 localv1_ExpandableBar1.setVisibility(View.VISIBLE);
                 localv1_ExpandableBar1.CreateBarHeader("【点图层】");
                 localv1_ExpandableBar1.SetItemList(localArrayList1);
                 localv1_ExpandableBar1.SetCallback(new ICallback(){

                    @Override
                    public void OnClick(String paramAnonymousString, Object paramAnonymousObject) {
                        // TODO Auto-generated method stub
                        Log.d("v1_GpsData_SelectLayer", "point layer clicked");
                        v1_GpsData_SelectLayer.this.m_SelectItem = paramAnonymousObject;
                        v1_GpsData_SelectLayer.this.pCallback.OnClick("确定", null);
                    }
                 });
             }
             if((localArrayList2.size() > 0) && (!PubVar.m_DoEvent.m_GPSLine.CheckIfStarting()))
             {
                 localv1_ExpandableBar2.setVisibility(View.VISIBLE);
                 localv1_ExpandableBar2.CreateBarHeader("【线图层】");
                 localv1_ExpandableBar2.SetItemList(localArrayList2);
                 localv1_ExpandableBar2.SetCallback(new ICallback(){

                    @Override
                    public void OnClick(String paramAnonymousString, Object  paramAnonymousObject) {
                        // TODO Auto-generated method stub
                        v1_GpsData_SelectLayer.this.m_SelectItem = paramAnonymousObject;
                        v1_GpsData_SelectLayer.this.pCallback.OnClick("确定", null);
                    }
                 });
             }
             if((localArrayList3.size() > 0) && (!PubVar.m_DoEvent.m_GPSPoly.getGPSLine().CheckIfStarting()))
             {
                 localv1_ExpandableBar3.setVisibility(View.VISIBLE);
                 localv1_ExpandableBar3.CreateBarHeader("【面图层】");
                 localv1_ExpandableBar3.SetItemList(localArrayList3);
                 localv1_ExpandableBar3.SetCallback(new ICallback(){

                    @Override
                    public void OnClick(String paramAnonymousString, Object paramAnonymousObject) {
                        // TODO Auto-generated method stub
                        
                        v1_GpsData_SelectLayer.this.m_SelectItem = paramAnonymousObject;
                        v1_GpsData_SelectLayer.this.pCallback.OnClick("确定", null);
                    }
                 });
             }
             return;
         }
         v1_Layer localv1_Layer = (v1_Layer)localIterator.next();
         Dataset localDataset = PubVar.m_Workspace.GetDataSourceByEditing().GetDatasetByName(localv1_Layer.GetLayerID());
         HashMap localHashMap = new HashMap();
         localHashMap.put("D1", localv1_Layer.GetLayerName());
         localHashMap.put("D2", localDataset.getRecordCount());
         if(localv1_Layer.GetLayerType() == lkGeoLayerType.enPoint){
             localArrayList1.add(localHashMap);
         }
         if(localv1_Layer.GetLayerType() == lkGeoLayerType.enPolyline){
             localArrayList2.add(localHashMap);
         }
         if(localv1_Layer.GetLayerType() == lkGeoLayerType.enPolygon){
             localArrayList3.add(localHashMap);
         }
      }
  }
  
  public void SetCallback(ICallback paramICallback)
  {
      this._Callback = paramICallback;
  }
  
  public void ShowDialog()
  {
      this._Dialog.setOnShowListener(new DialogInterface.OnShowListener() {
        
        @Override
        public void onShow(DialogInterface paramAnonymousDialogInterface) {
            // TODO Auto-generated method stub
            v1_GpsData_SelectLayer.this.LoadLayerListInfo();
        }
    });
    this._Dialog.show();
  }
}
View Code

2. 数据库

SQLite Expert

源代码:对比源代码、程序和逻辑关系进行代码分析

3. 软件截图

 

加载工程

点图层

对应的数据库信息为:

点的数据库存储信息

比例尺

 

注:该项目借鉴了SharpMap源代码。

原文地址:https://www.cnblogs.com/2008nmj/p/5368514.html