Apparently if you look at the geometry using the API (feature) the collection of the linestring has double starting points and double endpoints.
A validation on oracle doesn't detect the problem in the collection of the linestring.
Performing a spatial function, either rectify or a simplify, on the geometry will solve the problem.
select * from tb_job where name = 'Aansluiting 67 G split';
exec job3.setjob(45);
select * from in_geo_segment where FID = 43141;
update in_geo_segment set geom = SDO_UTIL.SIMPLIFY(geom,0.01,0.005) where fid = 43141;
commit;
select * from tb_job where name = 'Aansluiting 108 G split';
exec job3.setjob(48);
select * from in_geo_segment where FID = 46655;
update in_geo_segment set geom = SDO_UTIL.SIMPLIFY(geom,0.01,0.005) where fid = 46655;
update in_geo_segment set geom = SDO_UTIL.SIMPLIFY(geom,0.01,0.005) where fid = 46651;
update in_geo_segment set geom = SDO_UTIL.SIMPLIFY(geom,0.01,0.005) where fid = 47169;
commit;
Tuesday, December 2, 2014
Saturday, October 18, 2014
Wednesday, July 30, 2014
Tuesday, July 29, 2014
The program can't start because WMVCore.DLL is missing from your computer
Today I had this error on my windows server 2008 r2 install when trying to launch camtasia studio on the server.
This youtube video explained me how to resolve this problem.
https://www.youtube.com/watch?v=QoQqs0SiS8w
This youtube video explained me how to resolve this problem.
https://www.youtube.com/watch?v=QoQqs0SiS8w
Monday, July 14, 2014
FME : Validate the attribute names of a feature
Goal : Verify the attribute names of a feature layer in a dataset using FME.
My dataset source is an sdf but this can be done with any reader source FME can read.
I had to use a few transformers to filter the attribute names of the feature layer.
1. First of all you need to use a Sampler to make sure you end up with one single feature instead of the complete dataset.
2. Once you filtered a single feature you use an attributeexploder to aquire the feature's fme attribute names.
3. Next I added a Tester to verify the expected attribute names.
4. I added the result to a list using the listbuilder
5. I used a ListCounter to get the amount of passed tests.
6. I will verify the amount of passed tests against the amount of expected attribute names within the dataset.
7. The failed results are written to a text file using a TEXTWRITER
Voila, thats how you verify whether the expected amount of columns are part of your dataset using FME.
The result can be downloaded here
My dataset source is an sdf but this can be done with any reader source FME can read.
I had to use a few transformers to filter the attribute names of the feature layer.
1. First of all you need to use a Sampler to make sure you end up with one single feature instead of the complete dataset.
2. Once you filtered a single feature you use an attributeexploder to aquire the feature's fme attribute names.
3. Next I added a Tester to verify the expected attribute names.
4. I added the result to a list using the listbuilder
5. I used a ListCounter to get the amount of passed tests.
6. I will verify the amount of passed tests against the amount of expected attribute names within the dataset.
7. The failed results are written to a text file using a TEXTWRITER
Voila, thats how you verify whether the expected amount of columns are part of your dataset using FME.
The result can be downloaded here
Thursday, July 10, 2014
C# Using PSTool PsExec to execute programs on remote systems 2
Small update. I haven't implemented all the remarks of Cjorn yet.
public interface IValidator
{
DirectoryInfo OutputDirectoryFromClient { get; set; }
DirectoryInfo OutputDirectoryOnServer { get; set; }
DirectoryInfo WorkbenchDirectoryFromClient {
get; set; }
DirectoryInfo WorkbenchDirectoryOnServer { get; set; }
FileInfo FileToValidate { get; set; }
FileInfo FmeBatch { get; set; }
FileInfo FmeWorkbench { get; set; }
FileInfo PsExec { get; set; }
FileInfo FmeExec { get; set; }
string UserName { get; set; }
string Password { get; set; }
string ServerName { get; set; }
string StandardError { get; }
string StandardOutput { get; }
void Validate();
}
public class Validator : IValidator
{
public DirectoryInfo OutputDirectoryFromClient { get; set; }
public DirectoryInfo OutputDirectoryOnServer { get; set; }
public DirectoryInfo WorkbenchDirectoryFromClient { get; set; }
public DirectoryInfo WorkbenchDirectoryOnServer { get; set; }
public FileInfo FmeBatch { get; set; }
public FileInfo FileToValidate { get; set; }
public FileInfo FmeWorkbench { get; set; }
public FileInfo PsExec { get; set; }
public FileInfo FmeExec { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public string ServerName { get; set; }
public string StandardError { get; private set; }
public string StandardOutput { get; private set; }
private void CreateSourceCopy()
{
File.Copy(FileToValidate.FullName,
WorkbenchDirectoryFromClient.FullName + "source.sdf");
}
private void RemoveSourceCopy()
{
if (File.Exists(WorkbenchDirectoryFromClient.FullName
+ "source.sdf"))
File.Delete(WorkbenchDirectoryFromClient.FullName
+ "source.sdf");
}
private void RemoveOutput()
{
if (File.Exists(OutputDirectoryFromClient.FullName
+ "validated.sdf"))
File.Delete(OutputDirectoryFromClient.FullName
+ "validated.sdf");
}
public void Validate()
{
RemoveSourceCopy();
RemoveOutput();
CreateSourceCopy();
var arg = ServerName + @" cmd.exe -u " + UserName + @" -p " + Password + @" /c " + FmeBatch.FullName;
var p = new Process
{
StartInfo =
{
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
RedirectStandardInput = true,
FileName =
PsExec.FullName,
Arguments = arg,
CreateNoWindow = true
}
};
using (p)
{
p.Start();
StandardOutput = p.StandardOutput.ReadToEnd();
StandardError = p.StandardError.ReadToEnd();
//One should
add an amount of time before we exit as this could lock up your app if the
process never exits.
p.WaitForExit();
}
RemoveSourceCopy();
}
}
public class ValidatorViewModel : ViewModelBase
{
public List<string> ValidationErrors { get; set; }
private string _standardOutput;
public string
StandardOutput { get { return _standardOutput; } set { _standardOutput = value; OnPropertyChanged("StandardOutput"); } }
private string _standardError;
public string StandardError { get { return _standardError; } set { _standardError = value; OnPropertyChanged("StandardError"); } }
#region
Constructor
public ValidatorViewModel(IValidator validator)
{
Validator = validator;
ValidationErrors = new List<string>();
}
#endregion
#region
Properties & Variables
public IValidator Validator { get; private set; }
private string _sourceFileName;
public string SourceFileName { get { return _sourceFileName; } set { _sourceFileName = value; OnPropertyChanged("SourceFileName"); } }
#endregion
#region
Commands
private RelayCommand _sourceUploadCommand;
public ICommand SourceUploadCommand
{
get
{
return _sourceUploadCommand ??
(_sourceUploadCommand = new RelayCommand(param => SourceUploadExecute(),
param => CanSourceUploadExecute()));
}
}
private void SourceUploadExecute()
{
try
{
var ofd = new OpenFileDialog
{
InitialDirectory = "c:\\",
Filter = "sdf
files (*.sdf)|*.sdf|All files (*.*)|*.*",
RestoreDirectory = true
};
if (ofd.ShowDialog() == DialogResult.OK)
{
Validator.FileToValidate = new FileInfo(ofd.FileName);
SourceFileName = Validator.FileToValidate.FullName;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private bool CanSourceUploadExecute()
{
return true;
}
private RelayCommand _validateUploadCommand;
public ICommand ValidateUploadCommand
{
get
{
return _validateUploadCommand ??
(_validateUploadCommand = new RelayCommand(param => ValidateUploadExecute(),
param => CanValidateUploadExecute()));
}
}
private void ValidateUploadExecute()
{
try
{
try
{
Validator.Validate();
StandardError = Validator.StandardError;
StandardOutput = Validator.StandardOutput;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private bool CanValidateUploadExecute()
{
ValidationErrors.Clear();
if
(Validator.OutputDirectoryFromClient == null)
{
ValidationErrors.Add("OutputDirectoryFromClient is not set.");
return false;
}
if
(Validator.OutputDirectoryOnServer == null)
{
ValidationErrors.Add("OutputDirectoryOnServer is not set.");
return false;
}
if (Validator.WorkbenchDirectoryOnServer
== null)
{
ValidationErrors.Add("WorkbenchDirectoryOnServer is not set.");
return false;
}
if (Validator.FileToValidate == null)
{
ValidationErrors.Add("FileToValidate is not set.");
return false;
}
if (Validator.FmeWorkbench == null)
{
ValidationErrors.Add("FmeWorkbench is not set.");
return false;
}
if (Validator.PsExec == null)
{
ValidationErrors.Add("PsExec is not set.");
return false;
}
if (Validator.FmeExec == null)
{
ValidationErrors.Add("FmeExec is not set.");
return false;
}
if (Validator.FmeBatch == null)
{
ValidationErrors.Add("FmeBatch is not set.");
return false;
}
if (!Directory.Exists(Validator.OutputDirectoryFromClient.FullName))
{
ValidationErrors.Add("Invalid Output Directory From Client Path");
return false;
}
return true;
}
private RelayCommand _openDestinationCommand;
public ICommand OpenDestinationCommand
{
get
{
return _openDestinationCommand ??
(_openDestinationCommand = new RelayCommand(param =>
OpenDestinationExecute(),
param => CanOpenDestinationExecute()));
}
}
private void OpenDestinationExecute()
{
try
{
Process.Start("explorer.exe",
Validator.OutputDirectoryFromClient.FullName);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private bool CanOpenDestinationExecute()
{
return true;
}
#endregion
}
public TrackValidatorViewModel() : base(new Validator())
{
Validator.OutputDirectoryFromClient = new DirectoryInfo(@"\\hictblockap022\FME\TrackValidator\");
Validator.OutputDirectoryOnServer = new DirectoryInfo(@"E:\FME\TrackValidator\");
Validator.WorkbenchDirectoryFromClient = new DirectoryInfo(@"\\hictblockap022\FME\Infranet\TrackValidator\");
Validator.WorkbenchDirectoryOnServer = new DirectoryInfo(@"E:\FME\Infranet\TrackValidator\");
Validator.FmeBatch = new FileInfo(Validator.WorkbenchDirectoryOnServer
+ "trackvalidator.bat");
Validator.FmeWorkbench = new FileInfo(Validator.WorkbenchDirectoryOnServer
+ "trackvalidator.fmw");
Validator.PsExec = new FileInfo(@"C:\Users\Public\Documents\Infranet\PSTools\PsExec.exe");
Validator.FmeExec = new FileInfo(@"C:\Program Files\FME\fme.exe");
Validator.UserName = "CXP8200";
Validator.Password = "password";
Validator.ServerName = @"\\hictblockap022";
}
public class SwitchValidatorViewModel : ValidatorViewModel
{
public SwitchValidatorViewModel() : base(new Validator())
{
Validator.OutputDirectoryFromClient = new DirectoryInfo(@"\\hictblockap022\FME\SwitchValidator\");
Validator.OutputDirectoryOnServer = new DirectoryInfo(@"E:\FME\SwitchValidator\");
Validator.WorkbenchDirectoryFromClient = new DirectoryInfo(@"\\hictblockap022\FME\Infranet\SwitchValidator\");
Validator.WorkbenchDirectoryOnServer = new DirectoryInfo(@"E:\FME\Infranet\SwitchValidator\");
Validator.FmeBatch = new FileInfo(Validator.WorkbenchDirectoryOnServer
+ "switchvalidator.bat");
Validator.FmeWorkbench = new FileInfo(Validator.WorkbenchDirectoryOnServer
+ "switchvalidator.fmw");
Validator.PsExec = new FileInfo(@"C:\Users\Public\Documents\Infranet\PSTools\PsExec.exe");
Validator.FmeExec = new FileInfo(@"C:\Program Files\FME\fme.exe");
Validator.UserName = "CXP8200";
Validator.Password = "password";
Validator.ServerName = @"\\hictblockap022";
}
}
<UserControl x:Class="BRail.InfraNet.TrackValidator.TrackValidatorView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="30"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Button Grid.Column="0" Grid.Row="0" Command="{Binding SourceUploadCommand}" Content="Open Source" Margin="0,5,5,5"/>
<Button Grid.Column="1" Grid.Row="0" Command="{Binding ValidateUploadCommand}" Content="Validate Source" Margin="5"/>
<Button Grid.Column="2" Grid.Row="0" Command="{Binding OpenDestinationCommand}" Content="Open Result" Margin="5,5,0,5"/>
<TextBox Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="3" Margin="0,5,0,0" IsReadOnly="True" Height="25" TextWrapping="Wrap" Text="{Binding SourceFileName, UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Top"/>
<TextBox Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="3" Margin="0,5,0,0" TextWrapping="Wrap" Text="{Binding StandardError}" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" Height="Auto"/>
</Grid>
</UserControl>
<Window x:Class="BRail.InfraNet.TrackValidator.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:BRail.InfraNet.TrackValidator"
Title="Master Validator" Height="Auto" Width="Auto">
<Grid Margin="5">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Border BorderBrush="LightBlue" BorderThickness="5" Margin="5" Grid.Column="0">
<Grid Margin="5">
<Grid.RowDefinitions>
<RowDefinition Height="25"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Height="20" TextAlignment="Center" Text="TrackValidator" Background="LightBlue" FontStyle="Italic" FontWeight="Bold"/>
<local:TrackValidatorView Grid.Row="1" Margin="0,5,0,0" DataContext="{Binding Source={StaticResource TrackValidatorViewModel}}"/>
</Grid>
</Border>
<Border BorderBrush="LightBlue" BorderThickness="5" Margin="5" Grid.Column="1">
<Grid Margin="5">
<Grid.RowDefinitions>
<RowDefinition Height="25"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Height="20" TextAlignment="Center" Text="SwitchValidator" Background="LightBlue" FontStyle="Italic" FontWeight="Bold"/>
<local:TrackValidatorView Grid.Row="1" Margin="0,5,0,0" DataContext="{Binding Source={StaticResource SwitchValidatorViewModel}}"/>
</Grid>
</Border>
</Grid>
</Window>
Labels:
C#,
FME,
PSTools,
Remote Systems
Subscribe to:
Posts (Atom)